残差网络ResNet
残差网络ResNet模型架构的选择很重要不是越大越好而是要看函数类的形状是否与目标匹配不同架构可能捕获不同的归纳偏置某些小模型可能比大模型更适合特定任务残差块x为输入f(x)为理想输出f(x)-x为残差ResNet是为了学习x输出f(x)-x【例】输入x为模糊的照片输出f(x)为清晰的照片普通神经网络需要学习如何直接将x变为f(x)而ResNet只需要学习以x为基础加写什么可以变为f(x)也就是(f(x)-x)x所以需要得到f(x)-xResNet的优点1易于实现恒等映射即f(x) x只需要将f(x) - x 0参数全设为0即可2只学差多少比学整体是什么简单得多输入可通过跨层数据线路更快地向前传播ResNet的适用范围1网络够深2输入和输出能直接相加3输出≈输入少量修改大致的组成具体实现残差块的结构use_1x1conv是否用 1×1 卷积调整跳跃连接的维度nn.BatchNorm2dBN批量归一化每层卷积层输出后都需要批量归一化*bn1和bn2分别对应相应的卷积层后有自己独立的一套学习的参数*要确保X和Y的维度一致forward函数整体模型的实现resnet_block 函数构建残差模块first_block 参数这个参数处理的是第一个残差模块的特殊情况# 第一个残差块且不是整个网络的第一模块则需要下采样# 其余块维度不变原因因为 b1 里已经有Conv stride2和MaxPool stride2了输入到b2时已经是56×56。如果b2再下采样图片会缩得太小。所以 b2 只负责保持 64 通道、56×56 的尺寸纯做特征提炼。四个残差模块最后构建net为什么能缓解梯度下降