pytorch 两种冻结层的方式
一、设置requires_grad为False
for
这种方法需要注意的是层名一定要和model中一致,model经过.cuda后往往所用层会添加module.的前缀,会导致后面的冻结无效。
还需要注意的是加上filter:
optimizer
二、使用 torch.no_grad()
这种方式只需要在网络定义中的forward方法中,将需要冻结的层放在 torch.no_grad()下,强力推这种方式。
class
这种方式则是将layer1和layer2定义的层冻结,只训练fc层的参数。
当然还有其它方式,有好的方法欢迎大家讨论。