BATTERYML 부록2

Published by onesixx on

# Code 6: Config Setting : Use the newly added preprocessor Min-Max normalization.
# src/data/transformation/min_max.py

import torch
from src.builders                 import DATA_TRANSFORMATIONS
from src.data.transformation.base import BaseDataTransformation

@DATA_TRANSFORMATIONS.register()
class MinMaxDataTransformation(BaseDataTransformation):
    def __init__(self, base: float = None):
        self.min = None
        self.max = None
        
    def fit(self, data: torch.Tensor) -> torch.Tensor:
        self.min = torch.min(data)
        self.max = torch.max(data)
        
    def assert_fitted(self):
        assert self.min is not None, ’Transformation not fitted!’
        assert self.max is not None, ’Transformation not fitted!’
        
    @torch.no_grad()
    def transform(self, data: torch.Tensor) -> torch.Tensor:
        self.assert_fitted()
        data =  (data - self.min ) / (self.max  - self.min )
        return data
        
    @torch.no_grad()
    def inverse_transform(self, data: torch.Tensor) -> torch.Tensor:
        self.assert_fitted()
        data = data * (self.max  - self.min ) + self.min
        return data
        
    def to(self, device):
        self.min = self.min.to(device)
        self.max = self.max.to(device)
        return self

코드 7은 학습을 위해 이 최소-최대 정규화 기능을 사용하는 구성 예시를 보여줍니다.

# Code 7: Example configuration file that uses custom feature preprocessor for learning.

model:
    name: ’LinearRegressionRULPredictor’
train_test_split:
    name: ’MATRPrimaryTestTrainTestSplitter’
    cell_data_path: ’data/processed/MATR’
feature:
    name: ’DischargeModelFeatureExtractor’
    interp_dims: 1000
    critical_cycles:
    		-2 
    		-9 
    		- 99
    use_precalculated_qdlin: True
label:
    name: ’RULLabelAnnotator’
feature_transformation:
    name: ’MinMaxDataTransformation’
label_transformation:
    name: ’SequentialDataTransformation’
    transformations:
        - name: ’LogScaleDataTransformation’
        - name: ’MinMaxDataTransformation’

E.5 MODEL INTERFACE FOR CUSTOM BATTERY MODELS

맞춤형 배터리 모델을 위한 E.5 모델 인터페이스

BatteryML은 다양한 학습에 유연한 모델 적용을 지원하기 위해 ‘scikit-learn’ 규칙을 따르는 일반 모델 인터페이스를 제공합니다. linear models(선형 모델), Gaussian Process Regression(가우스 프로세스 회귀), tree-based models(트리 기반 모델), SVM과 같은 전통적인 통계 모델은 자동 학습 프로세스를 위한 적합도 및 예측 방법을 구현하는 데 필요합니다.

반면에 Neural network 모델은 순방향 로직만 구현하면 됩니다.
BatteryML은 신경망의 훈련 및 평가 프로세스를 fit 및 predict 방법으로 캡슐화하여, 학습 파이프라인에서 일관된 동작을 위해 기존 통계 모델과 연계합니다.

여기에서는 RUL 예측에 LightGBM을 사용하는 예시를 제공합니다. lightgbm.LGBMRegressor는 이미 예측에 대한 적합도 및 예측을 지원하므로 batteryml.model.SklearnModel 클래스를 직접 상속하고 구성 파일을 통해 모델의 하이퍼파라미터를 전달할 수 있습니다.

코드 8은 LightGBM을 사용하는 RUL 예측자에 대한 구현 예시를 보여줍니다.
이 예제에서 BatteryML은 학습 및 평가를 위해 LightgbmRULPredictor.model의 적합 및 예측 메서드를 호출합니다.
마지막으로, 커스텀 LightGBM 모델은 @MODELS.register() 이후에 BatteryML에 등록되고 초기화 중에 임포트됩니다.

#Code 8: Implementation example of custom models: utilizing LightGBM as a case study. Hyperpa- rameters are configured and passed through the configuration files.
# batteryml/model/rul_predictor/lightgbm.py
from lightgbm import LGBMRegressor
from src.builders import MODELS
from src.models.sklearn_model import SklearnModel

@MODELS.register()
class LightgbmRULPredictor(SklearnModel):
    def __init__(self, *args, workspace: str = None, **kwargs):
        SklearnModel.__init__(self, workspace)
        self.model = LGBMRegressor(*args, **kwargs)

모델을 정의한 후에는 코드 9에 표시된 것처럼 구성 파일을 통해 RUL 예측자의 하이퍼파라미터를 전달할 수 있습니다. 구성 파일의 필드는 예측자를 초기화할 때 키워드 인수로 모델에 전달됩니다.

# Code 9: Configuration example for custom LightGBM model.
model:
    name: ’LightgbmRULPredictor’
    boosting_type : ’gbdt’
    learning_rate : 0.001
    n_estimators : 200
    objective : ’regression’
train_test_split:
    name: ’MATRPrimaryTestTrainTestSplitter’
    cell_data_path: ’data/processed/MATR’
feature:
    name: ’VoltageCapacityMatrixFeatureExtractor’
    diff_base: 8
    max_cycle_index: 98
    cycles_to_keep: 98
    use_precalculated_qdlin: True
label:
    name: ’RULLabelAnnotator’
feature_transformation:
    name: ’ZScoreDataTransformation’
label_transformation:
    name: ’SequentialDataTransformation’
    transformations:
        - name: ’LogScaleDataTransformation’
        - name: ’ZScoreDataTransformation’

Categories: battery

onesixx

Blog Owner

Subscribe
Notify of
guest

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x