| from src.entity.artifact_entity import DataTransformationArtifact, ModelTrainingArtifact |
| from src.entity.config_entity import ModelTrainingConfig |
| from src.entity.model import MyModel |
| from src.utils.asyncHandler import asyncHandler |
| import pandas as pd |
| import os |
| import logging |
| from torch.utils.data import DataLoader |
| from src.models.muti_model import MultimodalDataset |
|
|
| class Model_Trainer: |
| def __init__(self, data_transformation_artifact: DataTransformationArtifact, model_training_config: ModelTrainingConfig): |
| self.data_transformation_artifact = data_transformation_artifact |
| self.model_training_config = model_training_config |
| self.model_training_config.train_file_path = self.data_transformation_artifact.train_path |
| self.model = MyModel(config=self.model_training_config) |
|
|
| @asyncHandler |
| async def initiate(self) -> ModelTrainingArtifact: |
| logging.info("Entered model training step") |
| try: |
| |
| train_df = pd.read_csv(self.data_transformation_artifact.train_path) |
| val_df = pd.read_csv(self.data_transformation_artifact.val_path) |
|
|
| train_dataset = MultimodalDataset( |
| data_frame=train_df, |
| config=self.model_training_config |
| ) |
| val_dataset = MultimodalDataset( |
| data_frame=val_df, |
| config=self.model_training_config |
| ) |
|
|
| train_loader = DataLoader( |
| train_dataset, |
| batch_size=self.model_training_config.batch_size, |
| shuffle=True |
| ) |
| val_loader = DataLoader( |
| val_dataset, |
| batch_size=self.model_training_config.batch_size, |
| shuffle=False |
| ) |
|
|
| self.model.train(train_data_loader=train_loader, val_data_loader=val_loader) |
| |
| model_path = os.path.join(self.model_training_config.model_dir, self.model_training_config.model_name) |
| logging.info("Exited model training step") |
|
|
| return ModelTrainingArtifact( |
| model_path=model_path, |
| is_trained=True, |
| message="Model training completed successfully" |
| ) |
| except Exception as e: |
| logging.error(f"Model training failed: {str(e)}") |
| return ModelTrainingArtifact( |
| model_path="", |
| is_trained=False, |
| message=f"Model training failed: {str(e)}" |
| ) |