Source code for mltk.core.training_results

from typing import Tuple, List
from .model.model_utils import KerasModel 



[docs]class TrainingResults: """Container for the model training results"""
[docs] def __init__(self, mltk_model, keras_model:KerasModel, training_history): self.mltk_model = mltk_model """The MltkModel uses for training""" self.keras_model:KerasModel = keras_model """The trained KerasModel""" self.epochs:List[int] = training_history.epoch """List of integers corresponding to each epoch""" self.params:dict = training_history.params """Dictionary of parameters uses for training""" self.history = {} """Dictionary of metrics recorded for each epoch""" for key, value in training_history.history.items(): if isinstance(value, list): self.history[key] = [float(x) for x in value] else: self.history[key] = value
@property def model_archive_path(self) -> str: """File path to model archive which contains the model training output including trained model file""" return self.mltk_model.archive_path
[docs] def asdict(self) -> dict: """Return the results as a dictionary""" return dict( epochs=self.epochs, params=self.params, history=self.history )
[docs] def get_best_metric(self) -> Tuple[str, float]: """Return the best metric from training Returns: Tuple(Name of metric, best metric value) """ max_val_metrics = ['accuracy'] min_val_metrics = [ 'mse', 'mean_squared_error', 'mae', 'mean_absolute_error', 'mape', 'mean_absolute_percentage_error', 'msle', 'mean_squared_logarithmic_error' ] for metric in max_val_metrics: val_metric = f'val_{metric}' if val_metric in self.history: return val_metric, max(self.history[val_metric]) if metric in self.history: return metric, max(self.history[metric]) for metric in min_val_metrics: val_metric = f'val_{metric}' if val_metric in self.history: return val_metric, min(self.history[val_metric]) if metric in self.history: return metric, min(self.history[metric]) return None, 0
def __str__(self) -> str: name, value = self.get_best_metric() return f'Best training {name} = {value}'