21
21
import paddle .dataset .wmt16 as wmt16
22
22
23
23
24
- def simple_fc_net ():
25
- reader = fluid .layers .open_recordio_file (
26
- filename = './mnist.recordio' ,
27
- shapes = [[- 1 , 784 ], [- 1 , 1 ]],
28
- lod_levels = [0 , 0 ],
29
- dtypes = ['float32' , 'int64' ])
30
- img , label = fluid .layers .read_file (reader )
24
+ def simple_fc_net (use_feed ):
25
+ if use_feed :
26
+ img = fluid .layers .data (name = 'image' , shape = [784 ], dtype = 'float32' )
27
+ label = fluid .layers .data (name = 'label' , shape = [1 ], dtype = 'int64' )
28
+ else :
29
+ reader = fluid .layers .open_recordio_file (
30
+ filename = './mnist.recordio' ,
31
+ shapes = [[- 1 , 784 ], [- 1 , 1 ]],
32
+ lod_levels = [0 , 0 ],
33
+ dtypes = ['float32' , 'int64' ])
34
+ img , label = fluid .layers .read_file (reader )
31
35
hidden = img
32
36
for _ in xrange (4 ):
33
37
hidden = fluid .layers .fc (
@@ -42,13 +46,18 @@ def simple_fc_net():
42
46
return loss
43
47
44
48
45
- def fc_with_batchnorm ():
46
- reader = fluid .layers .open_recordio_file (
47
- filename = './mnist.recordio' ,
48
- shapes = [[- 1 , 784 ], [- 1 , 1 ]],
49
- lod_levels = [0 , 0 ],
50
- dtypes = ['float32' , 'int64' ])
51
- img , label = fluid .layers .read_file (reader )
49
+ def fc_with_batchnorm (use_feed ):
50
+ if use_feed :
51
+ img = fluid .layers .data (name = 'image' , shape = [784 ], dtype = 'float32' )
52
+ label = fluid .layers .data (name = 'label' , shape = [1 ], dtype = 'int64' )
53
+ else :
54
+ reader = fluid .layers .open_recordio_file (
55
+ filename = './mnist.recordio' ,
56
+ shapes = [[- 1 , 784 ], [- 1 , 1 ]],
57
+ lod_levels = [0 , 0 ],
58
+ dtypes = ['float32' , 'int64' ])
59
+ img , label = fluid .layers .read_file (reader )
60
+
52
61
hidden = img
53
62
for _ in xrange (1 ):
54
63
hidden = fluid .layers .fc (
@@ -135,7 +144,9 @@ def bottleneck_block(input, num_filters, stride, cardinality, reduction_ratio):
135
144
return fluid .layers .elementwise_add (x = short , y = scale , act = 'relu' )
136
145
137
146
138
- def SE_ResNeXt152Small (batch_size = 2 ):
147
+ def SE_ResNeXt152Small (batch_size = 2 , use_feed = False ):
148
+ assert not use_feed , "SE_ResNeXt doesn't support feed yet"
149
+
139
150
img = fluid .layers .fill_constant (
140
151
shape = [batch_size , 3 , 224 , 224 ], dtype = 'float32' , value = 0.0 )
141
152
label = fluid .layers .fill_constant (
@@ -185,30 +196,28 @@ def check_network_convergence(self,
185
196
memory_opt = True ,
186
197
iter = 10 ,
187
198
batch_size = None ,
188
- allow_op_delay = False ):
199
+ allow_op_delay = False ,
200
+ feed_dict = {}):
189
201
main = fluid .Program ()
190
202
startup = fluid .Program ()
191
203
with fluid .program_guard (main , startup ):
192
- loss = method ()
204
+ loss = method (use_feed = len ( feed_dict ) > 0 )
193
205
adam = fluid .optimizer .Adam ()
194
206
adam .minimize (loss )
195
207
if memory_opt :
196
208
fluid .memory_optimize (main )
197
209
198
- exe = fluid .ParallelExecutor (
199
- loss_name = loss .name ,
200
- use_cuda = True ,
201
- allow_op_delay = allow_op_delay )
210
+ exe = fluid .ParallelExecutor (loss_name = loss .name , use_cuda = True )
202
211
if batch_size is not None :
203
212
batch_size *= fluid .core .get_cuda_device_count ()
204
213
begin = time .time ()
205
- first_loss , = exe .run ([loss .name ])
214
+ first_loss , = exe .run ([loss .name ], feed_dict = feed_dict )
206
215
first_loss = numpy .array (first_loss )
207
216
208
217
for i in xrange (iter ):
209
- exe .run ([])
218
+ exe .run ([], feed_dict = feed_dict )
210
219
211
- last_loss , = exe .run ([loss .name ])
220
+ last_loss , = exe .run ([loss .name ], feed_dict = feed_dict )
212
221
end = time .time ()
213
222
214
223
if batch_size is not None :
@@ -242,9 +251,19 @@ def test_simple_fc(self):
242
251
self .check_network_convergence (simple_fc_net )
243
252
self .check_network_convergence (simple_fc_net , allow_op_delay = True )
244
253
254
+ img = numpy .zeros (shape = [32 , 784 ], dtype = 'float32' )
255
+ label = numpy .ones (shape = [32 , 1 ], dtype = 'int64' )
256
+ self .check_network_convergence (
257
+ simple_fc_net , feed_dict = {"image" : img ,
258
+ "label" : label })
259
+
245
260
def test_batchnorm_fc (self ):
246
261
self .check_network_convergence (fc_with_batchnorm )
247
- self .check_network_convergence (fc_with_batchnorm , allow_op_delay = True )
262
+ img = numpy .zeros (shape = [32 , 784 ], dtype = 'float32' )
263
+ label = numpy .ones (shape = [32 , 1 ], dtype = 'int64' )
264
+ self .check_network_convergence (
265
+ fc_with_batchnorm , feed_dict = {"image" : img ,
266
+ "label" : label })
248
267
249
268
250
269
class TestResnet (TestParallelExecutorBase ):
@@ -400,7 +419,8 @@ def data_to_tensor(data_list, name_list, input_dict, place):
400
419
import transformer_model
401
420
402
421
403
- def transformer ():
422
+ def transformer (use_feed ):
423
+ assert not use_feed , "transfomer doesn't support feed yet"
404
424
return transformer_model .transformer (
405
425
ModelHyperParams .src_vocab_size + 1 ,
406
426
ModelHyperParams .trg_vocab_size + 1 , ModelHyperParams .max_length + 1 ,
0 commit comments