冻结训练的理解与使用

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

参考知乎帖子: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把冻结了的那部分参数给过滤了,如上面所示。

### 强化学习中训练参数冻结的方法 在强化学习领域,尤其是涉及深度神经网络作为函数逼近器的情况下,有时会采用参数冻结的技术来稳定训练过程或提高特定部分的效果。当提到参数冻结时,通常是指在网络的一部分停止更新权重,而其他部分继续正常反向传播并调整其参数。 对于某些复杂的环境或者多阶段的任务来说,可以先让一部分网络充分学习到稳定的特征表示之后再解冻其余层来进行端到端的学习[^1]。这种做法有助于防止早期学到的知识被后期剧烈变化所破坏,并且能够加速收敛速度以及提升最终性能表现。 具体实现上可以通过设置优化器忽略指定范围内的变量梯度计算达到目的;也可以通过修改模型结构本身的方式,在不需要更新的部分设定为不可训练状态。以下是使用PyTorch框架下简单示例: ```python import torch.nn as nn from torchvision import models class CustomModel(nn.Module): def __init__(self, num_classes=10): super(CustomModel, self).__init__() # 加载预训练好的ResNet模型 resnet = models.resnet50(pretrained=True) # 冻结所有卷积层的参数 for param in resnet.parameters(): param.requires_grad_(False) # 替换最后一层全连接层以适应新的分类任务 fc_in_features = resnet.fc.in_features resnet.fc = nn.Linear(fc_in_features, num_classes) self.model = resnet def forward(self, x): return self.model(x) ``` 在这个例子中,除了最后新加入的一层外,整个ResNet都被设为了不参梯度下降的过程,即实现了所谓的“参数冻结”。 ### 应用场景 参数冻结技术广泛应用于迁移学习场景之中,尤其是在处理不同但相关联的数据集之间的时候非常有用。例如在一个已经很好地理解了自然图像特性的大型数据集上的预训练模型基础上,针对某个更具体的子类目(比如只关注某种动物),只需要微调少量新增加出来的类别识别相关的参数即可获得不错的结果,而不必重新从头开始训练全部参数,从而节省了大量的时间和资源开销[^2]。 另外,在连续控制问题里也经常看到类似的技巧——先固定住感知模块(负责提取输入观测的状态信息)直到它能可靠工作为止,然后再放开动作决策部分去探索最优行为策略。这不仅提高了整体系统的稳定性,也有助于解决高维空间内难以直接求导的问题。
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值