Source code for aitoolbox.experiment.local_experiment_saver

import datetime
import time

from aitoolbox.experiment.experiment_saver import AbstractExperimentSaver
from aitoolbox.experiment.local_save.local_model_save import PyTorchLocalModelSaver, KerasLocalModelSaver, AbstractLocalModelSaver
from aitoolbox.experiment.local_save.local_results_save import LocalResultsSaver


[docs]class BaseFullExperimentLocalSaver(AbstractExperimentSaver): def __init__(self, model_saver, project_name, experiment_name, local_model_result_folder_path='~/project/model_result'): """Base functionality class common to all the full experiment local saver derivations Args: model_saver (aitoolbox.experiment.local_save.local_model_save.AbstractLocalModelSaver): selected model saver implementing the saving logic for the desired framework project_name (str): root name of the project experiment_name (str): name of the particular experiment local_model_result_folder_path (str): root local path where project folder will be created """ if not isinstance(model_saver, AbstractLocalModelSaver): raise TypeError(f'model_saver must be inherited from AbstractLocalModelSaver. ' f'model_saver type is: {type(model_saver)}') self.project_name = project_name self.experiment_name = experiment_name self.model_saver = model_saver self.results_saver = LocalResultsSaver(local_model_result_folder_path)
[docs] def save_experiment(self, model, result_package, training_history, experiment_timestamp=None, save_true_pred_labels=False, separate_files=False, protect_existing_folder=True): """Save the experiment with the provided model saver Args: model (dict or keras.Model): model representation. If used with PyTorch it is a simple dict under the hood. In the case of Keras training this would be the keras Model. result_package (aitoolbox.experiment.result_package.abstract_result_packages.AbstractResultPackage): selected result package which will be evaluated to produce the performance results training_history (aitoolbox.experiment.training_history.TrainingHistory): experiment_timestamp (str): time stamp at the start of training save_true_pred_labels (bool): should ground truth labels also be saved separate_files (bool): should the results be saved in separate pickle files or should all the results be batched together in a single results file protect_existing_folder (bool): can override potentially already existing folder or not Returns: list: local model and results paths """ if experiment_timestamp is None: experiment_timestamp = datetime.datetime.fromtimestamp(time.time()).strftime('%Y-%m-%d_%H-%M-%S') _, model_local_path = self.model_saver.save_model(model=model, project_name=self.project_name, experiment_name=self.experiment_name, experiment_timestamp=experiment_timestamp, protect_existing_folder=protect_existing_folder) saved_paths = [model_local_path] if not separate_files: saved_local_results_details = \ self.results_saver.save_experiment_results(result_package=result_package, training_history=training_history, project_name=self.project_name, experiment_name=self.experiment_name, experiment_timestamp=experiment_timestamp, save_true_pred_labels=save_true_pred_labels, protect_existing_folder=protect_existing_folder) else: saved_local_results_details = \ self.results_saver.save_experiment_results_separate_files(result_package=result_package, training_history=training_history, project_name=self.project_name, experiment_name=self.experiment_name, experiment_timestamp=experiment_timestamp, save_true_pred_labels=save_true_pred_labels, protect_existing_folder=protect_existing_folder) saved_paths += [path for _, path in saved_local_results_details] return saved_paths
[docs]class FullPyTorchExperimentLocalSaver(BaseFullExperimentLocalSaver): def __init__(self, project_name, experiment_name, local_model_result_folder_path='~/project/model_result'): """PyTorch local experiment saver Args: project_name (str): root name of the project experiment_name (str): name of the particular experiment local_model_result_folder_path (str): root local path where project folder will be created """ BaseFullExperimentLocalSaver.__init__(self, PyTorchLocalModelSaver(local_model_result_folder_path), project_name, experiment_name, local_model_result_folder_path=local_model_result_folder_path)
[docs]class FullKerasExperimentLocalSaver(BaseFullExperimentLocalSaver): def __init__(self, project_name, experiment_name, local_model_result_folder_path='~/project/model_result'): """Keras local experiment saver Args: project_name (str): root name of the project experiment_name (str): name of the particular experiment local_model_result_folder_path (str): root local path where project folder will be created """ BaseFullExperimentLocalSaver.__init__(self, KerasLocalModelSaver(local_model_result_folder_path), project_name, experiment_name, local_model_result_folder_path=local_model_result_folder_path)