1616# yapf: disable
1717add_arg ('batch_size' , int , 256 , "Minibatch size." )
1818add_arg ('num_layers' , int , 50 , "How many layers for SE-ResNeXt model." )
19- add_arg ('parallel_exe' , bool , True , "Whether use ParallelExecutor to train." )
19+ add_arg ('with_mem_opt' , bool , True , "Whether to use memory optimization or not." )
20+ add_arg ('parallel_exe' , bool , True , "Whether to use ParallelExecutor to train or not." )
2021
21- def train_paralle_do (learning_rate ,
22+ def train_paralle_do (args ,
23+ learning_rate ,
2224 batch_size ,
2325 num_passes ,
2426 init_model = None ,
@@ -74,13 +76,12 @@ def train_paralle_do(learning_rate,
7476 momentum = 0.9 ,
7577 regularization = fluid .regularizer .L2Decay (1e-4 ))
7678
77- opts = optimizer .minimize (avg_cost )
78- fluid .memory_optimize (fluid .default_main_program ())
79+ inference_program = fluid .default_main_program ().clone (for_test = True )
7980
80- inference_program = fluid . default_main_program (). clone ( )
81- with fluid . program_guard ( inference_program ) :
82- inference_program = fluid .io . get_inference_program (
83- [ avg_cost , acc_top1 , acc_top5 ] )
81+ opts = optimizer . minimize ( avg_cost )
82+ if args . with_mem_opt :
83+ fluid .memory_optimize ( fluid . default_main_program ())
84+ fluid . memory_optimize ( inference_program )
8485
8586 place = fluid .CUDAPlace (0 )
8687 exe = fluid .Executor (place )
@@ -153,7 +154,8 @@ def train_paralle_do(learning_rate,
153154 os .makedirs (model_path )
154155 fluid .io .save_persistables (exe , model_path )
155156
156- def train_parallel_exe (learning_rate ,
157+ def train_parallel_exe (args ,
158+ learning_rate ,
157159 batch_size ,
158160 num_passes ,
159161 init_model = None ,
@@ -190,7 +192,10 @@ def train_parallel_exe(learning_rate,
190192 regularization = fluid .regularizer .L2Decay (1e-4 ))
191193
192194 opts = optimizer .minimize (avg_cost )
193- fluid .memory_optimize (fluid .default_main_program ())
195+
196+ if args .with_mem_opt :
197+ fluid .memory_optimize (fluid .default_main_program ())
198+ fluid .memory_optimize (test_program )
194199
195200 place = fluid .CUDAPlace (0 )
196201 exe = fluid .Executor (place )
@@ -199,13 +204,8 @@ def train_parallel_exe(learning_rate,
199204 if init_model is not None :
200205 fluid .io .load_persistables (exe , init_model )
201206
202- import paddle .dataset .flowers as flowers
203-
204- #train_reader = paddle.batch(reader.train(), batch_size=batch_size)
205- #test_reader = paddle.batch(reader.test(), batch_size=batch_size)
206-
207- train_reader = paddle .batch (flowers .train (), batch_size = batch_size )
208- test_reader = paddle .batch (flowers .test (), batch_size = batch_size )
207+ train_reader = paddle .batch (reader .train (), batch_size = batch_size )
208+ test_reader = paddle .batch (reader .test (), batch_size = batch_size )
209209 feeder = fluid .DataFeeder (place = place , feed_list = [image , label ])
210210
211211 train_exe = fluid .ParallelExecutor (use_cuda = True , loss_name = avg_cost .name )
@@ -300,7 +300,8 @@ def train_parallel_exe(learning_rate,
300300 # layers: 50, 152
301301 layers = args .num_layers
302302 method = train_parallel_exe if args .parallel_exe else train_parallel_do
303- method (learning_rate = 0.1 ,
303+ method (args ,
304+ learning_rate = 0.1 ,
304305 batch_size = batch_size ,
305306 num_passes = 120 ,
306307 init_model = None ,
0 commit comments