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