import os
import sys
sys.path.append("../../../monk/");
import psutil

from pytorch_prototype import prototype



ptf = prototype(verbose=1);
ptf.Prototype("sample-project-1", "sample-experiment-1");


ptf.Default(dataset_path="../../../monk/system_check_tests/datasets/dataset_cats_dogs_train", 
    			model_name="resnet18", freeze_base_network=True, num_epochs=2);




###################################################   Dataset Updates    ######################################################################
ptf.update_input_size(256);
ptf.update_batch_size(6);
ptf.update_shuffle_data(True);
ptf.update_num_processors(psutil.cpu_count());
ptf.update_trainval_split(0.6);
ptf.update_dataset(dataset_path=["../../../monk/system_check_tests/datasets/dataset_cats_dogs_train", 
						"../../../monk/system_check_tests/datasets/dataset_cats_dogs_eval"]);
#################################################################################################################################################









###################################################   Transforms Updates    ######################################################################
# Reset Transforms if required
ptf.reset_transforms();
ptf.reset_transforms(test=True);
# Apply new transforms
ptf.apply_random_horizontal_flip(train=True, val=True);
ptf.apply_normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225], train=True, val=True, test=True);
#################################################################################################################################################


############################################ Auxiliary Functions - List all available transforms #########################################
ptf.List_Transforms()
######################################################################################################################################












#################################################   Model Updates ################################################################################
ptf.update_model_name("resnet50");
ptf.update_use_gpu(True);
ptf.update_use_pretrained(True);
ptf.update_freeze_base_network(True);
ptf.update_freeze_layers(10);
#################################################################################################################################################


############################################ Auxiliary Functions - List all available models #########################################
ptf.List_Models();
######################################################################################################################################






#################################################   Apply additional layers to model ####################################################################
ptf.append_dropout(probability=0.1);
ptf.append_linear(final_layer=True);
######################################################################################################################################


############################################ Auxiliary Functions - List all available layers and activations #########################################
ptf.List_Layers();
ptf.List_Activations();
######################################################################################################################################







################################################# Training Param Updates ##########################################################################
ptf.update_num_epochs(5);
ptf.update_display_progress_realtime(False);    
ptf.update_display_progress(True);
ptf.update_save_intermediate_models(False); 
ptf.update_save_training_logs(True);
#################################################################################################################################################



###################################### Necessary Function to make model and datasetchanges as per updates ###########################################
ptf.Reload();
#################################################################################################################################################








################################################ Update Optimizer #########################################################################
ptf.optimizer_adam(0.001);
#################################################################################################################################################


############################################ Auxiliary Functions - List all available optimizers #########################################
ptf.List_Optimizers();
######################################################################################################################################







################################################ Update Learning rate schedulers #################################################################
ptf.lr_fixed();
#################################################################################################################################################


############################################ Auxiliary Functions - List all available schedulers #########################################
ptf.List_Schedulers();
######################################################################################################################################








################################################ Update Loss #################################################################
ptf.loss_softmax_crossentropy()
#################################################################################################################################################


############################################ Auxiliary Functions - List all available losses #########################################
ptf.List_Losses();
######################################################################################################################################






ptf.Train();






import os
import sys
sys.path.append("../../../monk/");
import psutil

from pytorch_prototype import prototype



ptf = prototype(verbose=1);
ptf.Prototype("sample-project-1", "sample-experiment-1");


ptf.Default(dataset_path="../../../monk/system_check_tests/datasets/dataset_cats_dogs_train", 
    			model_name="resnet18", freeze_base_network=True, num_epochs=2);




###################################################   Dataset Updates    ######################################################################
ptf.update_input_size(256);
ptf.update_batch_size(6);
ptf.update_shuffle_data(True);
ptf.update_num_processors(psutil.cpu_count());
ptf.update_trainval_split(0.6);
ptf.update_dataset(dataset_path=["../../../monk/system_check_tests/datasets/dataset_cats_dogs_train", 
						"../../../monk/system_check_tests/datasets/dataset_cats_dogs_eval"]);
#################################################################################################################################################









###################################################   Transforms Updates    ######################################################################
# Reset Transforms if required
ptf.reset_transforms();
ptf.reset_transforms(test=True);
# Apply new transforms
ptf.apply_random_horizontal_flip(train=True, val=True);
ptf.apply_normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225], train=True, val=True, test=True);
#################################################################################################################################################


############################################ Auxiliary Functions - List all available transforms #########################################
ptf.List_Transforms()
######################################################################################################################################












#################################################   Model Updates ################################################################################
ptf.update_model_name("resnet50");
ptf.update_use_gpu(True);
ptf.update_use_pretrained(True);
ptf.update_freeze_base_network(True);
ptf.update_freeze_layers(10);
#################################################################################################################################################


############################################ Auxiliary Functions - List all available models #########################################
ptf.List_Models();
######################################################################################################################################






#################################################   Apply additional layers to model ####################################################################
ptf.append_dropout(probability=0.1);
ptf.append_linear(final_layer=True);
######################################################################################################################################


############################################ Auxiliary Functions - List all available layers and activations #########################################
ptf.List_Layers();
ptf.List_Activations();
######################################################################################################################################







################################################# Training Param Updates ##########################################################################
ptf.update_num_epochs(5);
ptf.update_display_progress_realtime(False);    
ptf.update_display_progress(True);
ptf.update_save_intermediate_models(False); 
ptf.update_save_training_logs(True);
#################################################################################################################################################



###################################### Necessary Function to make model and datasetchanges as per updates ###########################################
ptf.Reload();
#################################################################################################################################################








################################################ Update Optimizer #########################################################################
ptf.optimizer_adam(0.001);
#################################################################################################################################################


############################################ Auxiliary Functions - List all available optimizers #########################################
ptf.List_Optimizers();
######################################################################################################################################







################################################ Update Learning rate schedulers #################################################################
ptf.lr_fixed();
#################################################################################################################################################


############################################ Auxiliary Functions - List all available schedulers #########################################
ptf.List_Schedulers();
######################################################################################################################################








################################################ Update Loss #################################################################
ptf.loss_softmax_crossentropy()
#################################################################################################################################################


############################################ Auxiliary Functions - List all available losses #########################################
ptf.List_Losses();
######################################################################################################################################






ptf.Train();






###################################################   Dataset Updates    ###################################################################### ################################################################################################################################################# ###################################################   Transforms Updates    ###################################################################### # Reset Transforms if required # Apply new transforms ################################################################################################################################################# ############################################ Auxiliary Functions - List all available transforms ######################################### ###################################################################################################################################### #################################################   Model Updates ################################################################################ ################################################################################################################################################# ############################################ Auxiliary Functions - List all available models ######################################### ###################################################################################################################################### #################################################   Apply additional layers to model #################################################################### ###################################################################################################################################### ############################################ Auxiliary Functions - List all available layers and activations ######################################### ###################################################################################################################################### ################################################# Training Param Updates ########################################################################## ################################################################################################################################################# ###################################### Necessary Function to make model and datasetchanges as per updates ########################################### ################################################################################################################################################# ################################################ Update Optimizer ######################################################################### ################################################################################################################################################# ############################################ Auxiliary Functions - List all available optimizers ######################################### ###################################################################################################################################### ################################################ Update Learning rate schedulers ################################################################# ################################################################################################################################################# ############################################ Auxiliary Functions - List all available schedulers ######################################### ###################################################################################################################################### ################################################ Update Loss ################################################################# ################################################################################################################################################# ############################################ Auxiliary Functions - List all available losses ######################################### ######################################################################################################################################