From d53b385c432a2349eedbbb01fbd9df3f79569c02 Mon Sep 17 00:00:00 2001 From: "Harle, Antoine (Contracteur)" Date: Mon, 17 Feb 2020 17:32:54 -0500 Subject: [PATCH] MaJ example simple + Suppression Nesterov momentum --- higher/smart_aug/benchmark.py | 45 ++---------------- higher/smart_aug/smart_aug_example.py | 38 ++++----------- higher/smart_aug/test_dataug.py | 66 +++------------------------ higher/smart_aug/transformations.py | 2 +- 4 files changed, 22 insertions(+), 129 deletions(-) diff --git a/higher/smart_aug/benchmark.py b/higher/smart_aug/benchmark.py index 0cff138..71e803b 100644 --- a/higher/smart_aug/benchmark.py +++ b/higher/smart_aug/benchmark.py @@ -19,7 +19,7 @@ optim_param={ 'lr':1e-1, #1e-2/1e-1 (ResNet) 'momentum':0.9, #0.9 'decay':0.0005, #0.0005 - 'nesterov':True, + 'nesterov':False, #False (True: Bad behavior w/ Data_aug) 'scheduler':'cosine', #None, 'cosine', 'multiStep', 'exponential' } } @@ -30,44 +30,6 @@ epochs= 200 dataug_epoch_start=0 nb_run= 3 -# Use available TF (see transformations.py) -''' -tf_names = [ - ## Geometric TF ## - 'Identity', - 'FlipUD', - 'FlipLR', - 'Rotate', - 'TranslateX', - 'TranslateY', - 'ShearX', - 'ShearY', - - ## Color TF (Expect image in the range of [0, 1]) ## - 'Contrast', - 'Color', - 'Brightness', - 'Sharpness', - 'Posterize', - 'Solarize', #=>Image entre [0,1] #Pas opti pour des batch - - ## Bad Tranformations ## - # Bad Geometric TF # - #'BShearX', - #'BShearY', - #'BTranslateX-', - #'BTranslateX-', - #'BTranslateY', - #'BTranslateY-', - - #'BadContrast', - #'BadBrightness', - - #'Random', - #'RandBlend' -] -tf_dict = {k: TF.TF_dict[k] for k in tf_names} -''' tf_config='../config/base_tf_config.json' TF_loader=TF_loader() tf_dict, tf_ignore_mag =TF_loader.load_TF_dict(tf_config) @@ -91,7 +53,7 @@ if __name__ == "__main__": ### Benchmark ### #''' n_inner_iter = 1 - dist_mix = [0.5]#[0.5, 1.0] + dist_mix = [0.5, 1.0] N_seq_TF= [3, 4] mag_setup = [(False, False)] #[(True, True), (False, False)] #(FxSh, Independant) @@ -117,7 +79,8 @@ if __name__ == "__main__": mix_dist=dist, fixed_prob=False, fixed_mag=m_setup[0], - shared_mag=m_setup[1]), + shared_mag=m_setup[1], + TF_ignore_mag=tf_ignore_mag), model).to(device) else: aug_model = Augmented_model(RandAug(TF_dict=tf_dict, N_TF=n_tf), model).to(device) diff --git a/higher/smart_aug/smart_aug_example.py b/higher/smart_aug/smart_aug_example.py index 3358de0..87287df 100644 --- a/higher/smart_aug/smart_aug_example.py +++ b/higher/smart_aug/smart_aug_example.py @@ -2,31 +2,12 @@ """ -from model import * +from LeNet import * from dataug import * from train_utils import * -# Use available TF (see transformations.py) -tf_names = [ - ## Geometric TF ## - 'Identity', - 'FlipUD', - 'FlipLR', - 'Rotate', - 'TranslateX', - 'TranslateY', - 'ShearX', - 'ShearY', - - ## Color TF (Expect image in the range of [0, 1]) ## - 'Contrast', - 'Color', - 'Brightness', - 'Sharpness', - 'Posterize', - 'Solarize', #=>Image entre [0,1] #Pas opti pour des batch -] - +tf_config='../config/base_tf_config.json' +TF_loader=TF_loader() device = torch.device('cuda') #Select device to use @@ -48,19 +29,19 @@ if __name__ == "__main__": }, 'Inner':{ 'optim': 'SGD', - 'lr':1e-2, #1e-2 + 'lr':1e-2, #1e-2/1e-1 (ResNet) 'momentum':0.9, #0.9 + 'decay':0.0005, #0.0005 + 'nesterov':False, #False (True: Bad behavior w/ Data_aug) + 'scheduler':'cosine', #None, 'cosine', 'multiStep', 'exponential' } } #Models model = LeNet(3,10) - #model = ResNet(num_classes=10) - #model = MobileNetV2(num_classes=10) - #model = WideResNet(num_classes=10, wrn_size=32) #Smart_aug initialisation - tf_dict = {k: TF.TF_dict[k] for k in tf_names} + tf_dict, tf_ignore_mag =TF_loader.load_TF_dict(tf_config) model = Higher_model(model) #run_dist_dataugV3 aug_model = Augmented_model( Data_augV5(TF_dict=tf_dict, @@ -68,7 +49,8 @@ if __name__ == "__main__": mix_dist=0.8, fixed_prob=False, fixed_mag=False, - shared_mag=False), + shared_mag=False, + TF_ignore_mag=tf_ignore_mag), model).to(device) print("{} on {} for {} epochs - {} inner_it".format(str(aug_model), device_name, epochs, n_inner_iter)) diff --git a/higher/smart_aug/test_dataug.py b/higher/smart_aug/test_dataug.py index 9532086..1052775 100755 --- a/higher/smart_aug/test_dataug.py +++ b/higher/smart_aug/test_dataug.py @@ -7,58 +7,7 @@ from dataug import * #from utils import * from train_utils import * -# Use available TF (see transformations.py) -''' -tf_names = [ - ## Geometric TF ## - 'Identity', - 'FlipUD', - 'FlipLR', - 'Rotate', - 'TranslateX', - 'TranslateY', - 'ShearX', - 'ShearY', - - #'TranslateXabs', - #'TranslateYabs', - - ## Color TF (Expect image in the range of [0, 1]) ## - 'Contrast', - 'Color', - 'Brightness', - 'Sharpness', - 'Posterize', - 'Solarize', - - #Color TF (Common mag scale) - #'+Contrast', - #'+Color', - #'+Brightness', - #'+Sharpness', - #'-Contrast', - #'-Color', - #'-Brightness', - #'-Sharpness', - #'=Posterize', - #'=Solarize', - - ## Bad Tranformations ## - # Bad Geometric TF # - #'BShearX', - #'BShearY', - #'BTranslateX-', - #'BTranslateX-', - #'BTranslateY', - #'BTranslateY-', - - #'BadContrast', - #'BadBrightness', - - #'Random', - #'RandBlend' -] -''' +postfix='' TF_loader=TF_loader() device = torch.device('cuda') #Select device to use @@ -84,7 +33,7 @@ if __name__ == "__main__": } #Parameters n_inner_iter = 1 - epochs = 20 + epochs = 2 dataug_epoch_start=0 optim_param={ 'Meta':{ @@ -96,7 +45,7 @@ if __name__ == "__main__": 'lr':1e-1, #1e-2/1e-1 (ResNet) 'momentum':0.9, #0.9 'decay':0.0005, #0.0005 - 'nesterov':True, + 'nesterov':False, #False (True: Bad behavior w/ Data_aug) 'scheduler':'cosine', #None, 'cosine', 'multiStep', 'exponential' } } @@ -161,7 +110,6 @@ if __name__ == "__main__": if 'aug_model' in tasks: tf_config='../config/base_tf_config.json' tf_dict, tf_ignore_mag =TF_loader.load_TF_dict(tf_config) - #tf_dict = {k: TF_dict[k] for k in tf_names} torch.cuda.reset_max_memory_allocated() #reset_peak_stats torch.cuda.reset_max_memory_cached() #reset_peak_stats @@ -170,7 +118,7 @@ if __name__ == "__main__": model = Higher_model(model, model_name) #run_dist_dataugV3 aug_model = Augmented_model( Data_augV5(TF_dict=tf_dict, - N_TF=3, + N_TF=1, mix_dist=0.5, fixed_prob=False, fixed_mag=False, @@ -184,10 +132,10 @@ if __name__ == "__main__": inner_it=n_inner_iter, dataug_epoch_start=dataug_epoch_start, opt_param=optim_param, - print_freq=1, + print_freq=20, unsup_loss=1, hp_opt=False, - save_sample_freq=0) + save_sample_freq=None) exec_time=time.perf_counter() - t0 max_allocated = torch.cuda.max_memory_allocated()/(1024.0 * 1024.0) @@ -204,7 +152,7 @@ if __name__ == "__main__": "Param_names": aug_model.TF_names(), "Log": log} print(str(aug_model),": acc", out["Accuracy"], "in:", out["Time"][0], "+/-", out["Time"][1]) - filename = "{}-{} epochs (dataug:{})- {} in_it".format(str(aug_model),epochs,dataug_epoch_start,n_inner_iter) + filename = "{}-{} epochs (dataug:{})- {} in_it".format(str(aug_model),epochs,dataug_epoch_start,n_inner_iter)+postfix with open("../res/log/%s.json" % filename, "w+") as f: try: json.dump(out, f, indent=True) diff --git a/higher/smart_aug/transformations.py b/higher/smart_aug/transformations.py index dc0fc71..4f454f9 100755 --- a/higher/smart_aug/transformations.py +++ b/higher/smart_aug/transformations.py @@ -19,7 +19,7 @@ import kornia import random #TF that don't have use for magnitude parameter. -TF_no_mag={'Identity', 'FlipUD', 'FlipLR', 'Random', 'RandBlend', 'identity', 'flipUD', 'flipLR'} +TF_no_mag={'Identity', 'FlipUD', 'FlipLR', 'Random', 'RandBlend', 'identity', 'flip'} #TF which implemetation doesn't allow gradient propagaition. TF_no_grad={'Solarize', 'Posterize', '=Solarize', '=Posterize', 'posterize','solarize'} #TF for which magnitude should be ignored (Magnitude fixed).