介绍
本文通过解读keras ResNet50 源码,学习ResNet50的实现
为什么学习ResNet
ResNet在卷积神经网络中具有重要意义,大大加深的网络深度、提高准确率,并启发后来更优秀的神经网络
关于ResNet详见:https://www.malaoshi.top/show_1EF5Ka4fKW9A.html
为什么要学习keras ResNet50 源码
ResNet50在各个技术论坛里,在github中有n种实现方式,那为什么要学习 keras ResNet50 源码?
keras是优秀的深度学习框架,有一群优秀的谷歌程序员开发,并且简单易用,已经内置到TensorFlow2中。
功能易实现,框架难开发!通过解读 keras ResNet50 ,学习优秀程序员的思想,学习优秀框架是如何实现的
可以提高对keras的理解,提高对深度学习的理解,提高工程能力
keras ResNet50
以 ResNet50 为例进行分析
网络结构
源码网址
tensorflow2 官方源码:
点击
简化源码:
https://www.malaoshi.top/show_1EF5VZ5GbCLo.html
源码分析 conv1
从源码分析得出 conv1 输出的结果与 ResNet50 的官方网络结构不相同,官方输出的是112x112,在keras 中输出的是114x114
参见:https://www.malaoshi.top/show_1EF5VZ5GbCLo.html ,如下图:
源码分析 max pool
论文网络结构中的 max pool 在conv2_x中,在keras源码单独处理了
源码分析 conv2_1
论文网络结构中的 conv2_x 分 3 个 block,这里介绍第1个:
- conv2_1 输入的维度不大,所以第1层卷积结果维度不变
- 第2层卷积结果维度不变
- 第3层卷积结果升维到(56,56,256),最后一个维度是输入的4倍
- 短路连接(shortcut connection)要升维到(56,56,256),才能做加法运算
源码分析 conv2_2 及其他
conv2_1输出维度 是 conv2_2输入维度,该维度与conv2_2的输出维度相同,所以 短路连接(shortcut connection)不需要升维
源码分析 conv3_1
论文网络结构中的 conv3_x 分 4 个 block,这里介绍第1个
- conv3_1 输入的维度大,所以第1层卷积结果要降维
(28,28,128),注意: 这里与conv2_1不同 - 第2层卷积结果维度不变;
- 第3层卷积结果升维到
(28,28,512),最后一个维度512是 第1层卷积结果(28,28,128)第3个维度128的4倍 - 短路连接(shortcut connection)要将维度调整到(28,28,512),才能做加法运算
源码分析 conv3_2 及其他
conv3_1输出维度 是 conv3_2输入维度,即(28,28,512),该维度与conv3_2的输出维度相同,所以:
- 第1层卷积,要将第3个维度
512降维到128 - 第2层卷积结果维度不变;
- 第3层卷积,将第3个维度
128升维到512,改维度512是 第1层卷积结果·128的4倍 - 短路连接(shortcut connection)不需要升维
源码分析 conv4_x 及其他
与 conv3_x相同






