迁移学习是当前深度学习领域的⼀系列通⽤的解决⽅案,⽽不是⼀个具体的算法模型。我们使用模型在特定任务上收集的知识来解决不同但相关的任务。模型可以从上一个任务中学到的东西中获益,从而更快地学习新任务。
迁移学习方法大致可以分为三类:
(1)基于样本的迁移学习方法
从源域数据集中筛选出部分数据,使得筛选出的部分数据与目标数据概率分布近似 。
(2)基于特征的迁移学习方法
将源域与目标域样本映射到可再生和希尔特空间(RKHS),并最小化二者之间的差异。
(3)基于参数/模型的迁移学习方法
Pre-training:把最后一层替换成自己的分类器,剩下的网络结构当做特征提取器,进行预训练;fine-tuning:把预训练的模型参数作为初始化,更新所有权重;在微调过程中⼀般不建议使⽤过⼤的学习率,通常来说1e-5是⽐较合适的选择。
Pre-training + fine-tuning(预训练+调参) 的迁移学习⽅式是现在深度学习中⼀个⾮常流⾏的迁移学习⽅式,尤其是以图像领域为代表。
示例代码
#加载训练好的模型
checkpoint=torch.load('./ckpt_210.pth')
self.symbol.load_state_dict(checkpoint['net'])
#除了最后的全连接层外所有层权重冻结,仅训练最后的全连接层
#方法一
'''
for par in self.symbol.parameters():
par.requires_grad = False
self.symbol.classifier.weight.requires_grad = True
# 把优化器调整一下,只保留模型中可训练的层
train_layer = [p for p in self.symbol.parameters() if p.requires_grad == True]
self.optimizer = optim.Adam(train_layer, lr=self.lr)
'''
#方法二:
self.optimizer = optim.Adam(self.symbol.classifier.parameters(), lr=self.lr)