Module monk.gluon.finetune.level_6_params_main
Expand source code
from gluon.finetune.imports import *
from system.imports import *
from gluon.finetune.level_5_state_base import finetune_state
class prototype_params(finetune_state):
'''
Main class for all parameters in expert mode
Args:
verbose (int): Set verbosity levels
0 - Print Nothing
1 - Print desired details
'''
def __init__(self, verbose=1):
super().__init__(verbose=verbose);
###############################################################################################################################################
def Dataset_Params(self, dataset_path=False, path_to_csv=False, delimiter=",", split=0.9,
input_size=224, batch_size=16, shuffle_data=True, num_processors=psutil.cpu_count()):
'''
Set all dataset params
Args:
dataset_path (str, list): Path to Dataset folder
1) Single string if validation data does not exist
2) List [train_path, val_path] in case of separate train and val data
path_to_csv (str, list): Path to csv file pointing towards images
1) Single string if validation data does not exist
2) List [train_path, val_path] in case of separate train and val data
delimiter (str): Delimiter for csv file
split (float): Indicating train validation split
Division happens as follows:
train - total dataset * split * 100
val - total dataset * (1-split) * 100
batch_size (int): Set batch size for dataset
shuffle_data (bool): If True then data is shuffled before sampling into batches
num_processors (int): Max CPUs for data sampling
Returns:
None
'''
if(self.system_dict["states"]["eval_infer"]):
if(not self.system_dict["dataset"]["params"]["input_size"]):
self.system_dict = set_input_size(input_size, self.system_dict);
if(not self.system_dict["dataset"]["params"]["num_workers"]):
self.system_dict = set_num_processors(num_processors, self.system_dict);
self.system_dict = set_dataset_test_path(self.system_dict, dataset_path, path_to_csv, delimiter);
self.custom_print("Dataset Details");
self.custom_print(" Test path: {}".format(self.system_dict["dataset"]["test_path"]));
self.custom_print(" CSV test path: {}".format(self.system_dict["dataset"]["csv_test"]));
self.custom_print("");
self.custom_print("Dataset Params");
self.custom_print(" Input Size: {}".format(self.system_dict["dataset"]["params"]["input_size"]));
self.custom_print(" Processors: {}".format(self.system_dict["dataset"]["params"]["num_workers"]));
if("csv" in self.system_dict["dataset"]["params"]["dataset_test_type"]):
self.custom_print(" Delimiter: {}".format(self.system_dict["dataset"]["params"]["test_delimiter"]));
self.custom_print("");
else:
self.system_dict = set_input_size(input_size, self.system_dict);
self.system_dict = set_batch_size(batch_size, self.system_dict);
self.system_dict = set_data_shuffle(shuffle_data, self.system_dict);
self.system_dict = set_num_processors(num_processors, self.system_dict);
self.system_dict = set_dataset_train_path(self.system_dict, dataset_path, split, path_to_csv, delimiter);
self.custom_print("Dataset Details");
self.custom_print(" Train path: {}".format(self.system_dict["dataset"]["train_path"]));
self.custom_print(" Val path: {}".format(self.system_dict["dataset"]["val_path"]));
self.custom_print(" CSV train path: {}".format(self.system_dict["dataset"]["csv_train"]));
self.custom_print(" CSV val path: {}".format(self.system_dict["dataset"]["csv_val"]));
self.custom_print("");
self.custom_print("Dataset Params");
self.custom_print(" Input Size: {}".format(self.system_dict["dataset"]["params"]["input_size"]));
self.custom_print(" Batch Size: {}".format(self.system_dict["dataset"]["params"]["batch_size"]));
self.custom_print(" Data Shuffle: {}".format(self.system_dict["dataset"]["params"]["train_shuffle"]));
self.custom_print(" Processors: {}".format(self.system_dict["dataset"]["params"]["num_workers"]));
if("val" not in self.system_dict["dataset"]["dataset_type"]):
self.custom_print(" Train-val split: {}".format(self.system_dict["dataset"]["params"]["train_val_split"]));
if("csv" in self.system_dict["dataset"]["dataset_type"]):
self.custom_print(" Delimiter: {}".format(self.system_dict["dataset"]["params"]["delimiter"]));
self.custom_print("");
###############################################################################################################################################
###############################################################################################################################################
def Model_Params(self, model_name="resnet18_v1", freeze_base_network=True, use_gpu=True, use_pretrained=True, model_path=False):
'''
Set all model params
Args:
model_name (str): Select from available models. Check via List_Models() function
freeze_base_network (bool): If set as True, then base network's weights are freezed (cannot be trained)
use_gpu (bool): If set as True, uses GPU
use_pretrained (bool): If set as True, use weights trained on imagenet and coco like dataset
Else, use randomly initialized weights
model_path (str): Path to custom model weights for initialization.
Returns:
None
'''
if(self.system_dict["states"]["copy_from"]):
msg = "Cannot set model params in Copy-From mode.\n";
raise ConstraintError(msg)
if(model_path):
self.system_dict = set_model_path(model_path, self.system_dict)
else:
self.system_dict = set_model_name(model_name, self.system_dict);
self.system_dict = set_pretrained(use_pretrained, self.system_dict);
self.system_dict = set_device(use_gpu, self.system_dict);
self.system_dict = set_freeze_base_network(freeze_base_network, self.system_dict);
self.custom_print("Model Params");
self.custom_print(" Model name: {}".format(self.system_dict["model"]["params"]["model_name"]));
self.custom_print(" Use Gpu: {}".format(self.system_dict["model"]["params"]["use_gpu"]));
self.custom_print(" Use pretrained: {}".format(self.system_dict["model"]["params"]["use_pretrained"]));
self.custom_print(" Freeze base network: {}".format(self.system_dict["model"]["params"]["freeze_base_network"]));
self.custom_print("");
###############################################################################################################################################
###############################################################################################################################################
def Training_Params(self, num_epochs=10, display_progress=True, display_progress_realtime=True,
save_intermediate_models=True, intermediate_model_prefix="intermediate_model_", save_training_logs=True):
'''
Set all training params
Args:
num_epochs (int): Number of epochs to train the network
display_progress (bool): If True, displays summary post every epoch
display_progress_realtime (bool): If True, displays progress for every iteration in the epoch
save_intermediate_models (bool): If True, saves model weight post every epoch
intermediate_model_prefix (str): Appends a prefix to intermediate weights
save_training_logs (bool): If True, saves all training and validation metrics. Required for comparison.
Returns:
None
'''
if(save_intermediate_models):
if(not os.access(self.system_dict["model_dir"], os.W_OK)):
msg = "Folder \"{}\" has no read access".format(self.system_dict["model_dir"])
msg += "Cannot save Intermediate models";
raise ConstraintError(msg);
self.system_dict = set_num_epochs(num_epochs, self.system_dict);
self.system_dict = set_display_progress_realtime(display_progress_realtime, self.system_dict);
self.system_dict = set_display_progress(display_progress, self.system_dict);
self.system_dict = set_save_intermediate_models(save_intermediate_models, self.system_dict);
self.system_dict = set_save_training_logs(save_training_logs, self.system_dict);
self.system_dict = set_intermediate_model_prefix(intermediate_model_prefix, self.system_dict);
self.custom_print("Training params");
self.custom_print(" Num Epochs: {}".format(self.system_dict["hyper-parameters"]["num_epochs"]));
self.custom_print("");
self.custom_print("Display params");
self.custom_print(" Display progress: {}".format(self.system_dict["training"]["settings"]["display_progress"]));
self.custom_print(" Display progress realtime: {}".format(self.system_dict["training"]["settings"]["display_progress_realtime"]));
self.custom_print(" Save Training logs: {}".format(self.system_dict["training"]["settings"]["save_training_logs"]));
self.custom_print(" Save Intermediate models: {}".format(self.system_dict["training"]["settings"]["save_intermediate_models"]));
if(self.system_dict["training"]["settings"]["save_intermediate_models"]):
self.custom_print(" Intermediate model prefix: {}".format(self.system_dict["training"]["settings"]["intermediate_model_prefix"]));
self.custom_print("");
###############################################################################################################################################
Classes
class prototype_params (verbose=1)
-
Main class for all parameters in expert mode
Args
verbose
:int
- Set verbosity levels 0 - Print Nothing 1 - Print desired details
Expand source code
class prototype_params(finetune_state): ''' Main class for all parameters in expert mode Args: verbose (int): Set verbosity levels 0 - Print Nothing 1 - Print desired details ''' def __init__(self, verbose=1): super().__init__(verbose=verbose); ############################################################################################################################################### def Dataset_Params(self, dataset_path=False, path_to_csv=False, delimiter=",", split=0.9, input_size=224, batch_size=16, shuffle_data=True, num_processors=psutil.cpu_count()): ''' Set all dataset params Args: dataset_path (str, list): Path to Dataset folder 1) Single string if validation data does not exist 2) List [train_path, val_path] in case of separate train and val data path_to_csv (str, list): Path to csv file pointing towards images 1) Single string if validation data does not exist 2) List [train_path, val_path] in case of separate train and val data delimiter (str): Delimiter for csv file split (float): Indicating train validation split Division happens as follows: train - total dataset * split * 100 val - total dataset * (1-split) * 100 batch_size (int): Set batch size for dataset shuffle_data (bool): If True then data is shuffled before sampling into batches num_processors (int): Max CPUs for data sampling Returns: None ''' if(self.system_dict["states"]["eval_infer"]): if(not self.system_dict["dataset"]["params"]["input_size"]): self.system_dict = set_input_size(input_size, self.system_dict); if(not self.system_dict["dataset"]["params"]["num_workers"]): self.system_dict = set_num_processors(num_processors, self.system_dict); self.system_dict = set_dataset_test_path(self.system_dict, dataset_path, path_to_csv, delimiter); self.custom_print("Dataset Details"); self.custom_print(" Test path: {}".format(self.system_dict["dataset"]["test_path"])); self.custom_print(" CSV test path: {}".format(self.system_dict["dataset"]["csv_test"])); self.custom_print(""); self.custom_print("Dataset Params"); self.custom_print(" Input Size: {}".format(self.system_dict["dataset"]["params"]["input_size"])); self.custom_print(" Processors: {}".format(self.system_dict["dataset"]["params"]["num_workers"])); if("csv" in self.system_dict["dataset"]["params"]["dataset_test_type"]): self.custom_print(" Delimiter: {}".format(self.system_dict["dataset"]["params"]["test_delimiter"])); self.custom_print(""); else: self.system_dict = set_input_size(input_size, self.system_dict); self.system_dict = set_batch_size(batch_size, self.system_dict); self.system_dict = set_data_shuffle(shuffle_data, self.system_dict); self.system_dict = set_num_processors(num_processors, self.system_dict); self.system_dict = set_dataset_train_path(self.system_dict, dataset_path, split, path_to_csv, delimiter); self.custom_print("Dataset Details"); self.custom_print(" Train path: {}".format(self.system_dict["dataset"]["train_path"])); self.custom_print(" Val path: {}".format(self.system_dict["dataset"]["val_path"])); self.custom_print(" CSV train path: {}".format(self.system_dict["dataset"]["csv_train"])); self.custom_print(" CSV val path: {}".format(self.system_dict["dataset"]["csv_val"])); self.custom_print(""); self.custom_print("Dataset Params"); self.custom_print(" Input Size: {}".format(self.system_dict["dataset"]["params"]["input_size"])); self.custom_print(" Batch Size: {}".format(self.system_dict["dataset"]["params"]["batch_size"])); self.custom_print(" Data Shuffle: {}".format(self.system_dict["dataset"]["params"]["train_shuffle"])); self.custom_print(" Processors: {}".format(self.system_dict["dataset"]["params"]["num_workers"])); if("val" not in self.system_dict["dataset"]["dataset_type"]): self.custom_print(" Train-val split: {}".format(self.system_dict["dataset"]["params"]["train_val_split"])); if("csv" in self.system_dict["dataset"]["dataset_type"]): self.custom_print(" Delimiter: {}".format(self.system_dict["dataset"]["params"]["delimiter"])); self.custom_print(""); ############################################################################################################################################### ############################################################################################################################################### def Model_Params(self, model_name="resnet18_v1", freeze_base_network=True, use_gpu=True, use_pretrained=True, model_path=False): ''' Set all model params Args: model_name (str): Select from available models. Check via List_Models() function freeze_base_network (bool): If set as True, then base network's weights are freezed (cannot be trained) use_gpu (bool): If set as True, uses GPU use_pretrained (bool): If set as True, use weights trained on imagenet and coco like dataset Else, use randomly initialized weights model_path (str): Path to custom model weights for initialization. Returns: None ''' if(self.system_dict["states"]["copy_from"]): msg = "Cannot set model params in Copy-From mode.\n"; raise ConstraintError(msg) if(model_path): self.system_dict = set_model_path(model_path, self.system_dict) else: self.system_dict = set_model_name(model_name, self.system_dict); self.system_dict = set_pretrained(use_pretrained, self.system_dict); self.system_dict = set_device(use_gpu, self.system_dict); self.system_dict = set_freeze_base_network(freeze_base_network, self.system_dict); self.custom_print("Model Params"); self.custom_print(" Model name: {}".format(self.system_dict["model"]["params"]["model_name"])); self.custom_print(" Use Gpu: {}".format(self.system_dict["model"]["params"]["use_gpu"])); self.custom_print(" Use pretrained: {}".format(self.system_dict["model"]["params"]["use_pretrained"])); self.custom_print(" Freeze base network: {}".format(self.system_dict["model"]["params"]["freeze_base_network"])); self.custom_print(""); ############################################################################################################################################### ############################################################################################################################################### def Training_Params(self, num_epochs=10, display_progress=True, display_progress_realtime=True, save_intermediate_models=True, intermediate_model_prefix="intermediate_model_", save_training_logs=True): ''' Set all training params Args: num_epochs (int): Number of epochs to train the network display_progress (bool): If True, displays summary post every epoch display_progress_realtime (bool): If True, displays progress for every iteration in the epoch save_intermediate_models (bool): If True, saves model weight post every epoch intermediate_model_prefix (str): Appends a prefix to intermediate weights save_training_logs (bool): If True, saves all training and validation metrics. Required for comparison. Returns: None ''' if(save_intermediate_models): if(not os.access(self.system_dict["model_dir"], os.W_OK)): msg = "Folder \"{}\" has no read access".format(self.system_dict["model_dir"]) msg += "Cannot save Intermediate models"; raise ConstraintError(msg); self.system_dict = set_num_epochs(num_epochs, self.system_dict); self.system_dict = set_display_progress_realtime(display_progress_realtime, self.system_dict); self.system_dict = set_display_progress(display_progress, self.system_dict); self.system_dict = set_save_intermediate_models(save_intermediate_models, self.system_dict); self.system_dict = set_save_training_logs(save_training_logs, self.system_dict); self.system_dict = set_intermediate_model_prefix(intermediate_model_prefix, self.system_dict); self.custom_print("Training params"); self.custom_print(" Num Epochs: {}".format(self.system_dict["hyper-parameters"]["num_epochs"])); self.custom_print(""); self.custom_print("Display params"); self.custom_print(" Display progress: {}".format(self.system_dict["training"]["settings"]["display_progress"])); self.custom_print(" Display progress realtime: {}".format(self.system_dict["training"]["settings"]["display_progress_realtime"])); self.custom_print(" Save Training logs: {}".format(self.system_dict["training"]["settings"]["save_training_logs"])); self.custom_print(" Save Intermediate models: {}".format(self.system_dict["training"]["settings"]["save_intermediate_models"])); if(self.system_dict["training"]["settings"]["save_intermediate_models"]): self.custom_print(" Intermediate model prefix: {}".format(self.system_dict["training"]["settings"]["intermediate_model_prefix"])); self.custom_print("");
Ancestors
- gluon.finetune.level_5_state_base.finetune_state
- gluon.finetune.level_4_evaluation_base.finetune_evaluation
- gluon.finetune.level_3_training_base.finetune_training
- gluon.finetune.level_2_model_base.finetune_model
- gluon.finetune.level_1_dataset_base.finetune_dataset
- system.base_class.system
Methods
def Dataset_Params(self, dataset_path=False, path_to_csv=False, delimiter=',', split=0.9, input_size=224, batch_size=16, shuffle_data=True, num_processors=4)
-
Set all dataset params
Args
dataset_path
:str
,list
- Path to Dataset folder 1) Single string if validation data does not exist 2) List [train_path, val_path] in case of separate train and val data
path_to_csv
:str
,list
- Path to csv file pointing towards images 1) Single string if validation data does not exist 2) List [train_path, val_path] in case of separate train and val data
delimiter
:str
- Delimiter for csv file
split
:float
- Indicating train validation split Division happens as follows: train - total dataset * split * 100 val - total dataset * (1-split) * 100
batch_size
:int
- Set batch size for dataset
shuffle_data
:bool
- If True then data is shuffled before sampling into batches
num_processors
:int
- Max CPUs for data sampling
Returns
None
Expand source code
def Dataset_Params(self, dataset_path=False, path_to_csv=False, delimiter=",", split=0.9, input_size=224, batch_size=16, shuffle_data=True, num_processors=psutil.cpu_count()): ''' Set all dataset params Args: dataset_path (str, list): Path to Dataset folder 1) Single string if validation data does not exist 2) List [train_path, val_path] in case of separate train and val data path_to_csv (str, list): Path to csv file pointing towards images 1) Single string if validation data does not exist 2) List [train_path, val_path] in case of separate train and val data delimiter (str): Delimiter for csv file split (float): Indicating train validation split Division happens as follows: train - total dataset * split * 100 val - total dataset * (1-split) * 100 batch_size (int): Set batch size for dataset shuffle_data (bool): If True then data is shuffled before sampling into batches num_processors (int): Max CPUs for data sampling Returns: None ''' if(self.system_dict["states"]["eval_infer"]): if(not self.system_dict["dataset"]["params"]["input_size"]): self.system_dict = set_input_size(input_size, self.system_dict); if(not self.system_dict["dataset"]["params"]["num_workers"]): self.system_dict = set_num_processors(num_processors, self.system_dict); self.system_dict = set_dataset_test_path(self.system_dict, dataset_path, path_to_csv, delimiter); self.custom_print("Dataset Details"); self.custom_print(" Test path: {}".format(self.system_dict["dataset"]["test_path"])); self.custom_print(" CSV test path: {}".format(self.system_dict["dataset"]["csv_test"])); self.custom_print(""); self.custom_print("Dataset Params"); self.custom_print(" Input Size: {}".format(self.system_dict["dataset"]["params"]["input_size"])); self.custom_print(" Processors: {}".format(self.system_dict["dataset"]["params"]["num_workers"])); if("csv" in self.system_dict["dataset"]["params"]["dataset_test_type"]): self.custom_print(" Delimiter: {}".format(self.system_dict["dataset"]["params"]["test_delimiter"])); self.custom_print(""); else: self.system_dict = set_input_size(input_size, self.system_dict); self.system_dict = set_batch_size(batch_size, self.system_dict); self.system_dict = set_data_shuffle(shuffle_data, self.system_dict); self.system_dict = set_num_processors(num_processors, self.system_dict); self.system_dict = set_dataset_train_path(self.system_dict, dataset_path, split, path_to_csv, delimiter); self.custom_print("Dataset Details"); self.custom_print(" Train path: {}".format(self.system_dict["dataset"]["train_path"])); self.custom_print(" Val path: {}".format(self.system_dict["dataset"]["val_path"])); self.custom_print(" CSV train path: {}".format(self.system_dict["dataset"]["csv_train"])); self.custom_print(" CSV val path: {}".format(self.system_dict["dataset"]["csv_val"])); self.custom_print(""); self.custom_print("Dataset Params"); self.custom_print(" Input Size: {}".format(self.system_dict["dataset"]["params"]["input_size"])); self.custom_print(" Batch Size: {}".format(self.system_dict["dataset"]["params"]["batch_size"])); self.custom_print(" Data Shuffle: {}".format(self.system_dict["dataset"]["params"]["train_shuffle"])); self.custom_print(" Processors: {}".format(self.system_dict["dataset"]["params"]["num_workers"])); if("val" not in self.system_dict["dataset"]["dataset_type"]): self.custom_print(" Train-val split: {}".format(self.system_dict["dataset"]["params"]["train_val_split"])); if("csv" in self.system_dict["dataset"]["dataset_type"]): self.custom_print(" Delimiter: {}".format(self.system_dict["dataset"]["params"]["delimiter"])); self.custom_print("");
def Model_Params(self, model_name='resnet18_v1', freeze_base_network=True, use_gpu=True, use_pretrained=True, model_path=False)
-
Set all model params
Args
model_name
:str
- Select from available models. Check via List_Models() function
freeze_base_network
:bool
- If set as True, then base network's weights are freezed (cannot be trained)
use_gpu
:bool
- If set as True, uses GPU
use_pretrained
:bool
- If set as True, use weights trained on imagenet and coco like dataset Else, use randomly initialized weights
model_path
:str
- Path to custom model weights for initialization.
Returns
None
Expand source code
def Model_Params(self, model_name="resnet18_v1", freeze_base_network=True, use_gpu=True, use_pretrained=True, model_path=False): ''' Set all model params Args: model_name (str): Select from available models. Check via List_Models() function freeze_base_network (bool): If set as True, then base network's weights are freezed (cannot be trained) use_gpu (bool): If set as True, uses GPU use_pretrained (bool): If set as True, use weights trained on imagenet and coco like dataset Else, use randomly initialized weights model_path (str): Path to custom model weights for initialization. Returns: None ''' if(self.system_dict["states"]["copy_from"]): msg = "Cannot set model params in Copy-From mode.\n"; raise ConstraintError(msg) if(model_path): self.system_dict = set_model_path(model_path, self.system_dict) else: self.system_dict = set_model_name(model_name, self.system_dict); self.system_dict = set_pretrained(use_pretrained, self.system_dict); self.system_dict = set_device(use_gpu, self.system_dict); self.system_dict = set_freeze_base_network(freeze_base_network, self.system_dict); self.custom_print("Model Params"); self.custom_print(" Model name: {}".format(self.system_dict["model"]["params"]["model_name"])); self.custom_print(" Use Gpu: {}".format(self.system_dict["model"]["params"]["use_gpu"])); self.custom_print(" Use pretrained: {}".format(self.system_dict["model"]["params"]["use_pretrained"])); self.custom_print(" Freeze base network: {}".format(self.system_dict["model"]["params"]["freeze_base_network"])); self.custom_print("");
def Training_Params(self, num_epochs=10, display_progress=True, display_progress_realtime=True, save_intermediate_models=True, intermediate_model_prefix='intermediate_model_', save_training_logs=True)
-
Set all training params
Args
num_epochs
:int
- Number of epochs to train the network
display_progress
:bool
- If True, displays summary post every epoch
display_progress_realtime
:bool
- If True, displays progress for every iteration in the epoch
save_intermediate_models
:bool
- If True, saves model weight post every epoch
intermediate_model_prefix
:str
- Appends a prefix to intermediate weights
save_training_logs
:bool
- If True, saves all training and validation metrics. Required for comparison.
Returns
None
Expand source code
def Training_Params(self, num_epochs=10, display_progress=True, display_progress_realtime=True, save_intermediate_models=True, intermediate_model_prefix="intermediate_model_", save_training_logs=True): ''' Set all training params Args: num_epochs (int): Number of epochs to train the network display_progress (bool): If True, displays summary post every epoch display_progress_realtime (bool): If True, displays progress for every iteration in the epoch save_intermediate_models (bool): If True, saves model weight post every epoch intermediate_model_prefix (str): Appends a prefix to intermediate weights save_training_logs (bool): If True, saves all training and validation metrics. Required for comparison. Returns: None ''' if(save_intermediate_models): if(not os.access(self.system_dict["model_dir"], os.W_OK)): msg = "Folder \"{}\" has no read access".format(self.system_dict["model_dir"]) msg += "Cannot save Intermediate models"; raise ConstraintError(msg); self.system_dict = set_num_epochs(num_epochs, self.system_dict); self.system_dict = set_display_progress_realtime(display_progress_realtime, self.system_dict); self.system_dict = set_display_progress(display_progress, self.system_dict); self.system_dict = set_save_intermediate_models(save_intermediate_models, self.system_dict); self.system_dict = set_save_training_logs(save_training_logs, self.system_dict); self.system_dict = set_intermediate_model_prefix(intermediate_model_prefix, self.system_dict); self.custom_print("Training params"); self.custom_print(" Num Epochs: {}".format(self.system_dict["hyper-parameters"]["num_epochs"])); self.custom_print(""); self.custom_print("Display params"); self.custom_print(" Display progress: {}".format(self.system_dict["training"]["settings"]["display_progress"])); self.custom_print(" Display progress realtime: {}".format(self.system_dict["training"]["settings"]["display_progress_realtime"])); self.custom_print(" Save Training logs: {}".format(self.system_dict["training"]["settings"]["save_training_logs"])); self.custom_print(" Save Intermediate models: {}".format(self.system_dict["training"]["settings"]["save_intermediate_models"])); if(self.system_dict["training"]["settings"]["save_intermediate_models"]): self.custom_print(" Intermediate model prefix: {}".format(self.system_dict["training"]["settings"]["intermediate_model_prefix"])); self.custom_print("");