diff --git a/LRC/dataset/download.sh b/LRC/dataset/download_cifar.sh similarity index 100% rename from LRC/dataset/download.sh rename to LRC/dataset/download_cifar.sh diff --git a/LRC/dataset/download_imagenet.sh b/LRC/dataset/download_imagenet.sh new file mode 100644 index 0000000000000000000000000000000000000000..947b8900bd944759437a55c20fb32bca4a1b9380 --- /dev/null +++ b/LRC/dataset/download_imagenet.sh @@ -0,0 +1,40 @@ +set -e +if [ "x${IMAGENET_USERNAME}" == x -o "x${IMAGENET_ACCESS_KEY}" == x ];then + echo "Please create an account on image-net.org." + echo "It will provide you a pair of username and accesskey to download imagenet data." + read -p "Username: " IMAGENET_USERNAME + read -p "Accesskey: " IMAGENET_ACCESS_KEY +fi + +root_url=http://www.image-net.org/challenges/LSVRC/2012/nnoupb +valid_tar=ILSVRC2012_img_val.tar +train_tar=ILSVRC2012_img_train.tar +train_folder=train/ +valid_folder=val/ + +echo "Download imagenet training data..." +mkdir -p ${train_folder} +wget -nd -c ${root_url}/${train_tar} +tar xf ${train_tar} -C ${train_folder} + +cd ${train_folder} +for x in `ls *.tar` +do + filename=`basename $x .tar` + mkdir -p $filename + tar -xf $x -C $filename + rm -rf $x +done +cd - + +echo "Download imagenet validation data..." +mkdir -p ${valid_folder} +wget -nd -c ${root_url}/${valid_tar} +tar xf ${valid_tar} -C ${valid_folder} + +echo "Download imagenet label file: val_list.txt & train_list.txt" +label_file=ImageNet_label.tgz +label_url=http://imagenet-data.bj.bcebos.com/${label_file} +wget -nd -c ${label_url} +tar zxf ${label_file} + diff --git a/LRC/model.py b/LRC/model.py index b98def2ae42ed7b01244d7bebbfe24d4033e200b..ca79be01513ded39d5965f3a00360af5dd9000c5 100644 --- a/LRC/model.py +++ b/LRC/model.py @@ -93,7 +93,8 @@ class Cell(): dropout_implementation='upscale_in_train') s = h3 + h4 out += [s] - return fluid.layers.concat([out[i] for i in self._concat], axis=1) + concat_ = fluid.layers.concat([out[i] for i in self._concat], axis=1, name=name+'concat') + return concat_ def AuxiliaryHeadCIFAR(input, num_classes, aux_name='auxiliary_head'): @@ -337,7 +338,7 @@ class NetworkCIFAR(object): return lrc_loss_mean def AuxiliaryHeadImageNet(input, num_classes, aux_name='auxiliary_head'): - relu_a = fluid.layers.relu(input, inplace=True) + relu_a = fluid.layers.relu(input, inplace=False) #relu_a.persistable = True #print(relu_a) pool_a = fluid.layers.pool2d(relu_a, 5, 'avg', pool_stride=2) @@ -405,10 +406,11 @@ def Stem0Conv(input, C_out): bias_attr=ParamAttr( initializer=Constant(0.), name='stem0.1.bias'), moving_mean_name='stem0.1.running_mean', - moving_variance_name='stem0.1.running_var') - relu_a = fluid.layers.relu(bn_a, inplace=True) + moving_variance_name='stem0.1.running_var', + act='relu') + #relu_a = fluid.layers.relu(bn_a,inplace=True) conv_b = fluid.layers.conv2d( - relu_a, + bn_a, C_out, 3, padding=1, @@ -428,7 +430,7 @@ def Stem0Conv(input, C_out): return bn_b def Stem1Conv(input, C_out): - relu_a = fluid.layers.relu(input, inplace=True) + relu_a = fluid.layers.relu(input,inplace=False) conv_a = fluid.layers.conv2d( relu_a, C_out, diff --git a/LRC/reader_imagenet.py b/LRC/reader_imagenet.py index 657786903536c5ba4abc73cb22da01e3c814a98d..b8d28aafd140a96935905604a2106bb2ac1db9fc 100644 --- a/LRC/reader_imagenet.py +++ b/LRC/reader_imagenet.py @@ -140,7 +140,7 @@ def train(args): :rtype: callable """ - return reader_creator_filepath(args.data, 'train.txt', True) + return reader_creator_filepath(args.data, 'debug.txt', True) def test(args): diff --git a/LRC/train_imagenet.py b/LRC/train_imagenet.py index 688160e15597c43ff193b2c9856f739509db6b73..17e548637796d90a689355bfb2666d5f23ed649e 100644 --- a/LRC/train_imagenet.py +++ b/LRC/train_imagenet.py @@ -163,14 +163,19 @@ def train(model, args, im_shape, steps_one_epoch, num_gpu): # return os.path.exists(os.path.join(args.pretrained_model, var.name)) # fluid.io.load_vars(exe, args.pretrained_model, main_program=train_prog, predicate=if_exist) - + #build_strategy = fluid.BuildStrategy() + #build_strategy.enable_inplace = False + #build_strategy.memory_optimize = False + train_fetch_list = [loss_train] + + fluid.memory_optimize(train_prog, skip_opt_set=set(train_fetch_list)) exec_strategy = fluid.ExecutionStrategy() - exec_strategy.num_threads = 1 + #exec_strategy.num_threads = 1 train_exe = fluid.ParallelExecutor( - main_program=train_prog, - use_cuda=True, - loss_name=loss_train.name, - exec_strategy=exec_strategy) + main_program=train_prog, + use_cuda=True, + loss_name=loss_train.name, + exec_strategy=exec_strategy) train_batch_size = args.batch_size test_batch_size = 256 @@ -182,8 +187,7 @@ def train(model, args, im_shape, steps_one_epoch, num_gpu): test_py_reader.decorate_paddle_reader(test_reader) fluid.clip.set_gradient_clip(fluid.clip.GradientClipByGlobalNorm(args.grad_clip), program=train_prog) - train_fetch_list = [loss_train] - fluid.memory_optimize(train_prog, skip_opt_set=set(train_fetch_list)) + print(train_prog.to_string(True)) def save_model(postfix, main_prog): model_path = os.path.join(args.save_model_path, postfix)