冻结训练与解冻训练
- 原理
- 为什么进行冻结训练
- 区别
- 参考
原理
大部分深度学习框架(例如pytorch和tensorflow)都提供了一些比较经典,且预训练好的网络模型(resnet、alexnet等),这些训练好的网络模型有较好的泛化性能。简而言之就是能拿来即用,而且针对大部分常见的任务(检测、分割、识别等)有比较不错的效果。
我们只要确定任务的类别,然后把这些别人(通常是DL大神)训练好的模型拿过来,换成自己的数据,调整一下参数,再训练一遍。就能省去从头开始训练自己模型的冗杂过程,从而节省大量的时间。
并且在自己训练数据不够充足的情况下,把这些网络模型作为自己的骨干网络,就相当于已经在coco、imagenet等主流数据集上训练过很多个epoch,从而能有效地提高自己网络的性能。
以上过程又被称为迁移学习(transfer learning)或者微调(fine tuning),总感觉深度学习有关的词汇都那么高级且玄学呢😓
详见这里(pytorch官方中文文档)
为什么进行冻结训练
根据以上迁移学习的思想,因为神经网络主干特征提取部分(上述网络模型)所提取到的特征是通用的,我们冻结起来训练可以加快训练效率,也可以防止权值被破坏,而且前人花很大精力训练出来的模型在大概率上会比你自己从零开始搭的模型要强悍,没有必要重复造轮子。
区别
在冻结阶段,模型的主干被冻结了,特征提取网络不发生改变。占用的显存较小,仅对网络进行微调。
在解冻阶段,模型的主干不被冻结了,特征提取网络会发生改变。占用的显存较大,网络所有的参数都会发生改变。
参考
https://blog.csdn.net/weixin_44791964/article/details/107517428?utm_term=%E8%A7%A3%E5%86%BB%E5%90%8E%E8%AE%AD%E7%BB%83&utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2allsobaiduweb~default-0-107517428&spm=3001.4430