import os from cnnClassfier.constants import * from cnnClassfier.utils.common import read_yaml, create_directories from cnnClassfier.entity.config_entity import (DataIngestionConfig, PrepareBaseModelConfig, PrepareCallbacksConfig, TrainingConfig, EvaluationConfig) class ConfigurationManager: def __init__( self, config_filepath = CONFIG_FILE_PATH, params_filepath = PARAMS_FILE_PATH): self.config = read_yaml(config_filepath) self.params = read_yaml(params_filepath) create_directories([self.config.artifacts_root]) def get_data_ingestion_config(self) -> DataIngestionConfig: config = self.config.data_ingestion create_directories([config.root_dir]) data_ingestion_config = DataIngestionConfig( root_dir=config.root_dir, source_URL=config.source_URL, local_data_file=config.local_data_file, unzip_dir=config.unzip_dir ) return data_ingestion_config def get_prepare_base_model(self) -> PrepareBaseModelConfig: config = self.config.prepare_base_model create_directories([config.root_dir]) prepare_base_model_config = PrepareBaseModelConfig( root_dir=Path(config.root_dir), base_model_path= Path(config.base_model_path), updated_base_model_path= Path(config.updated_base_model_path), params_image_size=self.params.IMAZE_SIZE, params_learning_rate=self.params.LEARNING_RATE, params_include_top=self.params.INCLUDE_TOP, params_weights=self.params.WEIGHTS, params_classes=self.params.CLASSES ) return prepare_base_model_config def get_prepare_callback_config(self) -> PrepareCallbacksConfig: config = self.config.prepare_callbacks model_ckpt_dir = os.path.dirname(config.checkpoint_model_filepath) create_directories([ Path(model_ckpt_dir), Path(config.tensorboard_root_log_dir) ]) prepare_callback_config = PrepareCallbacksConfig( root_dir=Path(config.root_dir), tensorboard_root_log_dir=Path(config.tensorboard_root_log_dir), checkpoint_model_filepath=Path(config.checkpoint_model_filepath) ) return prepare_callback_config def get_training_config(self) -> TrainingConfig: training = self.config.training prepare_base_model = self.config.prepare_base_model params = self.params training_data = os.path.join(self.config.data_ingestion.unzip_dir, "Chicken-fecal-images") create_directories([ Path(training.root_dir) ]) training_config = TrainingConfig( root_dir=Path(training.root_dir), trained_model_path=Path(training.trained_model_path), updated_base_model_path=Path(prepare_base_model.updated_base_model_path), training_data=Path(training_data), params_epochs=params.EPOCHS, params_batch_size=params.BATCH_SIZE, params_is_augmentation=params.AUGMENTATION, params_image_size=params.IMAZE_SIZE ) return training_config def get_validation_config(self) -> EvaluationConfig: eval_config = EvaluationConfig( path_of_model="artifacts/training/model.h5", training_data="artifacts/data_ingestion/Chicken-fecal-images", all_params=self.params, params_image_size=self.params.IMAZE_SIZE, params_batch_size=self.params.BATCH_SIZE ) return eval_config