源自github用户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不支持
源自github用户sneaxiy:
您是先调用的optimizer.minimize再freeze参数,还是先freeze参数再调用的optimizer.minimize? 需要先freeze再调用optimizer.minimize。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
您是先调用的optimizer.minimize再freeze参数,还是先freeze参数再调用的optimizer.minimize? 需要先freeze再调用optimizer.minimize。
两种都试了,都不可以
源自github用户sneaxiy:
与用户线下讨论,通过stop_gradient = True
的方式满足了用户需求。
登录 后才可以发表评论