解读keras ResNet50源码

介绍

本文通过解读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 为例进行分析

网络结构

源码网址

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个:

  1. conv2_1 输入的维度不大,所以第1层卷积结果维度不变
  2. 第2层卷积结果维度不变
  3. 第3层卷积结果升维到(56,56,256),最后一个维度是输入的4倍
  4. 短路连接(shortcut connection)要升维到(56,56,256),才能做加法运算

源码分析 conv2_2 及其他

conv2_1输出维度 是 conv2_2输入维度,该维度与conv2_2的输出维度相同,所以 短路连接(shortcut connection)不需要升维

源码分析 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),才能做加法运算

源码分析 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倍
  4. 短路连接(shortcut connection)不需要升维

源码分析 conv4_x 及其他

与 conv3_x相同