卷积神经网络--猫狗系列之构建模型【ResNet50】

在上一期:卷积神经网络--猫狗系列之下载、导入数据集如果测试成功就说明对数据的预处理工作已经完成,接下来就是构建模型阶段了:

据说建立一个神经网络模型比较简单,只要了解了各层的含义、不同层之间参数的传递等等,那么一个完整的网络模型就可以被容易地构建出来。(这对于我这种初学的同学来说嘎嘎困难哈哈)

不扯了,加载一个预训练模型---ResNet50:

借助torchvision库,能够很容易的获得一组已经训练好的模型,这些模型大多数接收一个称为pretrained的参数,当这个参数为True时,它会下载为ImageNet分类问题调整好的权重。

network1=models.resnet50(weights=models.ResNet50_Weights.DEFAULT)

紧接着,我们需要冻结所有层,所有的权重不会随着训练而更新:

for param in network1.parameters():    param.requires_grad=False

然后!由于这个预训练模型不是专门针对这样猫猫狗狗的二分类问题,所以,我们需要将最后一层的输出特征从1000改为2。(默认是1000类)

首先,我们需要知道最后一层的名字,通过network1查看一下,告诉大家怎么操作:

将network1输在pycharm中,把光标放在这一行,然后快捷键【shift+alt+E】(也可以鼠标选中然后右键专门运行这一行,这其实就是pycharm的交互模式)

得到这样的界面:

【可以知道最后一层是一个全连接层,名为fc。其他的东西以后有时间再分析,就是一些卷积、池化以及激活操作】

所以,我们就要将最后一层替换为输出特征为2的全连接层:

import torch.nn as nnnetwork1.fc=nn.Linear(2048,2)

此时,该层为新的层,所以它的requires_grad=True,这样整个网络仅有这一层可以更新权重。

打印更新后的网络:

该猫猫狗狗的模型构建代码总结:

from torchvision import modelsimport torch.nn as nnimport torch.optim as optim#网络搭建network1=models.resnet50(weights=models.ResNet50_Weights.DEFAULT)for param in network1.parameters():    param.requires_grad=Falsenetwork1.fc=nn.Linear(2048,2)

利用已经训练好的模型主要目的是它能够提取出非常好的特征,最后一层接收前面层提取的特征,然后误差反向传播,仅更新这一层的权重,不断迭代。

【此猫狗系列会继续更】

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

每天都是被迫学习

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值