freeze部分parameter,paddle的batch_size比tf小很多
Created by: niuox
Resenet50的网络,输入tensor大小是(batch_size, 30,3,224,224)用于做视频分类,表示帧数是30,image大小是3 * 224 * 224。
freeze全部参数(freeze部分参数情况相同),单卡情况下paddle能支持的batch_size最大为4,而tensorflow能支持的batch_size可以达到32;如果finetune所有参数,两者能支持的最大batch_size相同。
paddle fluid版本是1.5.0,freeze部分参数或者全部参数的写法如下,试过parameter.stop_grdient=True和parameter.trinable=False两种写法,情况相同
def fronzen_layers(self, prog):
print "start logging"
for _idx, param in enumerate(prog.global_block().iter_parameters()):
_trainable = True
if param.persistable and _idx < 100:
_trainable = False
param.stop_gradient = _trainable
#param.trainable = _trainable
print ("trainable", _idx, _trainable)
print ("param", _idx, param)
print "end logging"
tensorflow部分,使用的是keras框架,tf后端,tf版本是1.11.0,代码片段如下:
cnn_base = ResNet50(weights='imagenet', include_top=False)
cnn_out = GlobalAveragePooling2D()(cnn_base.output)
resnet = Model(input=cnn_base.input, output=cnn_out)
print "layers number is ", len(resnet.layers)
for layer in resnet.layers[:100]:
layer.trainable = False
for layer in resnet.layers[100:]:
layer.trainable = True
看到有pytorch也有类似问题,但是好像解决了: https://discuss.pytorch.org/t/high-gpu-memory-demand-for-pytorch/669/3 https://github.com/pytorch/pytorch/pull/859 请看下是我的调用方式问题还是说目前paddle不支持