柠檬少年|迁移学习—通俗易懂地介绍(常见网络模型pytorch实现)( 二 )
这时, 迁移学习来拯救我了. 因为这个训练好的模型中已经有了一些对图片的理解能力, 而模型最后输出层的作用是分类之前的图片, 对于现在计算价值的任务是用不到的, #所以我将最后一层替换掉, 变为服务于现在这个任务的输出层. #接着只训练新加的输出层, 让理解力保持始终不变. 前面的神经层庞大的参数不用再训练, 节省了我很多时间, 我也在一天时间内, 将这个任务顺利完成.
但并不是所有时候我们都需要迁移学习. 比如神经网络很简单, 相比起计算机视觉中庞大的 CNN 或者语音识别的 RNN, 训练小的神经网络并不需要特别多的时间, 我们完全可以直接重头开始训练. 从头开始训练也是有好处的.
如果固定住之前的理解力, 或者使用更小的学习率来更新借鉴来的模型, 就变得有点像认识一个人时的第一印象, 如果迁移前的数据和迁移后的数据差距很大, 或者说我对于这个人的第一印象和后续印象差距很大, 我还不如不要管我的第一印象, 同理, 这时, 迁移来的模型并不会起多大作用, 还可能干扰我后续的决策.
迁移学习的限制比如说 , 我们不能随意移除预训练网络中的卷积层 。 但由于参数共享的关系 , 我们可以很轻松地在不同空间尺寸的图像上运行一个预训练网络 。 这在卷积层和池化层和情况下是显而易见的 , 因为它们的前向函数(forward function)独立于输入内容的空间尺寸 。 在全连接层(FC)的情形中 , 这仍然成立 , 因为全连接层可被转化成一个卷积层 。 所以当我们导入一个预训练的模型时 , 网络结构需要与预训练的网络结构相同 , 然后再针对特定的场景和任务进行训练 。
常见的迁移学习方式:
- 在权重后训练所有参数
- 在入权重后只训练最后几层参数
- 载入权重后在原网络基础上再添加一层全链接层 , 仅训练最后一个全链接层
使用图像数据进行迁移学习
- 牛津 VGG 模型(~vgg/research/very_deep/)
- 谷歌 Inception模型(models/tree/master/inception)
- 微软 ResNet 模型()
实例:注:如何获取官方的.pth文件 , 以resnet为例子
import torchvision.models.resnet在脚本中输入以上代码 , 将鼠标对住resnet并按ctrl键 , 发现改变颜色 , 点击进入resnet.py脚本 , 在最开始有url , 如下图所示
推荐阅读
- 金戈鐵馬|特朗普力挺铁杆支持者,枪杀两人的少年没错?抗议活动不断发酵
- 开封于七一|育迎宾尚法好少年,借温柔秋风多送法
- 少年|央视要搞选秀,热搜沸了!网友提名他当导师,点赞数第一
- 暖夏少年|2020电脑硬盘销量排行榜:七彩虹加入战局,硬是打倒了金士顿
- 少年一梦|2020畅销手机排行,iPhone无人超越,安卓旗舰全线溃败
- 少年帮|进入倒计时,华为突然宣布,供应链将迎来“洗牌”?
- 艾希大人|竹内结子拍摄杂志封面 柠檬黄上衣青春活力
- 少年帮|纯国产“龙芯”即将来临,正式确认?中科院宣布决定
- 上线|原创央视也搞成团选秀!《上线吧!华彩少年》有哪些优势?粉丝放心了
- 海报|央视首档少年成团选秀节目《上线吧!华彩少年》开始全球招募
