仅是个人笔记,代码学习资源来源B站博主霹雳吧啦Wz的个人空间_哔哩哔哩_bilibili
一、理论知识
1. 深
之前的网络没有很深是因为多级连乘会梯度消失或梯度爆炸,后面层的反馈对前面层无作用
使用BN 和 relu sigmoid会加剧梯度消失/爆炸
resnet可以通过残差块搭建深层次网络
原因??还是没懂。
2. 残差块
结构图如下:
右图1*1卷积先降维度后升维度,减小参数量
resnet各种网络结构都是
输入-----conv------pool-------- 一系列残差块 --------- pool------- 全连接 ----- 输出
上述两种残差块,每个又可以分为两种:
resnet18 34所用:
resnet50 ......更深的网络 所用:
3. 使用Batch Normalization
全部使用BN 不再使用 dropout
所有样本 在同一个通道上的放在一起,然后标准化处理
BN(详见超链接)
顺序是 卷积+BN+relu
4. 参数配置
conv2_x 、 conv3_x 、 conv4_x 、 conv5_x
输出和输入相比都是特征图大小减半、通道数翻倍
以resnet50 中conv2_x为例:
下面这两种残差块都有使用: 第一个残差块使用右图,导致特征图减半;
其余两个残差块使用左图,特征图大小不变
经过conv2_x中三个残差块,最终特征图减半,通道数翻倍。
具体怎么构建的网络看代码,也不用自己搭建,调用现成的,大概懂就行。
二、代码实现
基本流程同前面3个
1. 预训练模型的 transformers
要使用预训练模型的权重必须使用其相同的数据预处理transformers;
pytorch官网搜索模型名称(resnet)查看有关信息
- 官方给的示例1:
训练的时候是批量如何处理?待解决。。。。
对一张图片进行预测时使用上述示例方法
- 官方给的示例2:
- 个人查阅(详情见超链接):
博文给的示例代码如下:
transforms = transforms.Compose([
transforms.Resize((224, 224)),
# 1. 将所有图像重塑为 224x224(尽管某些模型可能需要不同的尺寸)
transforms.ToTensor(),
# 2. 将图像值转换为 0 和 1 之间的
transforms.Normalize(mean=[0.485, 0.456, 0.406],
# 3. [0.485, 0.456, 0.406] 的平均值(跨每个颜色通道)
std=[0.229, 0.224, 0.225])
# 4. [0.229, 0.224, 0.225] 的标准偏差(跨每个颜色通道),
])