冻结训练的理解与使用

冻结训练的作用:当我们已有部分预训练权重,这部分预训练权重所应用的那部分网络是通用的,如骨干网络,那么我们可以先冻结这部分权重的训练,将更多的资源放在训练后面部分的网络参数,这样使得时间和资源利用都能得到很大改善。然后后面的网络参数训练一段时间之后再解冻这些被冻结的部分,这时再全部一起训练。

参考知乎帖子:https://www.zhihu.com/question/311095447/answer/589307812

#------------------------------------#
#   冻结一定部分训练
#------------------------------------#
for param in model.backbone.parameters():
	param.requires_grad = False #冻结骨干网络,这部分网络有与训练权重
optimizer = optim.Adam(filter(lambda p: p.requires_grad, net.parameters()), lr=0.1)
# compute loss 
# loss.backward()
# optmizer.step()
# 解冻
for param in model.backbone.parameters():
    param.requires_grad = True
	optimizer.add_param_group({'params': param})
# compute loss 
# loss.backward()
# optmizer.step()

这里的例子来自yolov3的一个实现,网上其他人那看到的冻结训练,在优化器中通过添加一个filter把冻结了的那部分参数给过滤了,如上面所示。

你可能感兴趣的:(深度学习,深度学习)