ResNet网络结构,BN以及迁移学习

网络中的亮点:

  • 超深的网络结构(突破1000层):之前也就十几层
  • 提出residual模块

1.如果简单将卷积层和池化层简单的叠加:

(iteration迭代次数)
ResNet网络结构,BN以及迁移学习_第1张图片
原因:

  1. 梯度消失,梯度爆炸。 如何解决:数据标准化,权重初始化,batch normalization
  2. 退化问题(degradation problem)即:层数越深,错误率反而越大 如何解决:残差结构

下图是ResNet搭建的,实线为验证集的错误率,虚线是训练集的错误率。
可见层数越深,错误率越小,确实解决了degradation problem
ResNet网络结构,BN以及迁移学习_第2张图片

提出residual模块

下面是两种残差结构:
看下面注释:左边适合ResNet-34。,右边适合 ResNet-50/101/152.
ResNet网络结构,BN以及迁移学习_第3张图片

  1. 主分支上经过一系列操作得到的结果和输入特征矩阵相加后再用relu。
  2. 注意:主分支和shortcut的输出特征矩阵shape[C,H,W]必须相同
  3. 右边:1*1的卷积核用来降维和升维。
  4. 左边参数比右边参数多。

ResNet网络结构,BN以及迁移学习_第4张图片
实线和虚线残差结构有什么不同:
是为了保证 从conv2_x 过渡 到 conv3_x(以及后面)
主分支和shortcut的输出特征矩阵shape[C,H,W]必须相同
18和34层的残差结构:
ResNet网络结构,BN以及迁移学习_第5张图片
50和101和152层的残差结构:
ResNet网络结构,BN以及迁移学习_第6张图片

batch normalization

参考文章
**目的:**使我们的一批(batch)feature map满足均值为0,方差为1的分布规律。

对于conv1的输入满足某一分布的特征矩阵,但对于conv2而言输入的feature map就不一定满足某一分布规律了。
ResNet网络结构,BN以及迁移学习_第7张图片
原参数-均值后再除以方差
ResNet网络结构,BN以及迁移学习_第8张图片
看一个例子:
ResNet网络结构,BN以及迁移学习_第9张图片

注意:

  1. 训练的时候将training设为True,验证的时候设为False。在pytorch中可以通过model.train()和model.eval()方法控制
  2. batch_size尽可能大一点。设置越大越接近整个训练集的均值和方差。
  3. 建议bn层放在卷积层(conv)和激活层(relu)中间,且卷积层不要用偏置bias。
  4. ResNet网络结构,BN以及迁移学习_第10张图片

迁移学习

优势:

  1. 能快速训练出一个理想的结果(可能2个epoch就能训练出理想结果)
  2. 当数据集较小时也能训练出理想效果。
    注意:如果使用别人预训练模型参数时,要注意别人的预处理方式。要用和别人一样的预处理方法。
    ResNet网络结构,BN以及迁移学习_第11张图片
    conv1等浅层网络的信息是比较通用的,就可以迁移学习了。
    常见迁移学习方式
  3. 载入权重后训练所有参数(如果最后分类类别不一样,最后一层参数无法载入)
  4. 载入权重后只训练最后几层参数
  5. 载入权重后在原网络基础上再添加一层全连接层,仅训练最后一个全连接层。

学到了什么:

1。import torchvision.models.resnet 再点resnet即可跳到pytorch官方实现的源码
里面有预训练权重可以下载
ResNet网络结构,BN以及迁移学习_第12张图片

2https://download.pytorch.org/models/resnet34-b627a593.pth权重链接直接复制到网址上就可以下载,也可以复制到迅雷(因为很多资源迅雷已经存到它自己的服务器上了)
3.train.py在预处理的时候,要采用与人家预处理的方式一样。迁移学习

ResNet网络结构,BN以及迁移学习_第13张图片
4train.py(迁移学习,如果不使用的话resnet34()直接传参数即可)载入预训练权重后,更改分类数目为5
ResNet网络结构,BN以及迁移学习_第14张图片
注意:修改网络最后一层非线性后,再net.to(device)要不然就会报类似有的变量在gpu,有的在cpu。
5. 在colab上,假的gpu是吧,一轮7min,不过准确率还挺高。在这里插入图片描述5.关于predict.py,要与训练方法一样的标准化处理,准确来说是和val验证集方式一样。

在这里插入图片描述
6. 可以看到预测是tulips概率已经高达0.99
8. 还有个坑以后填:批量预测

你可能感兴趣的:(pytorch深度学习,迁移学习,深度学习)