cnn stride and padding_Tensorflow学习笔记- 模型建立与训练篇(CNN)

这次就用Keras实现下CNN

一. 预备知识——CNN[1]

1. 二维互相关(cross-correlation)运算:计算

属于输入数组, 属于卷积窗口,n和m取决于窗口的大小。
  • 核数组(卷积核或过滤器)的形状决定卷积窗口的形状。

在二维互相关运算中,卷积窗口从输入数组的左上方开始,按从左往右、从上往下的顺序,依次在输入数组上滑动,每滑动到一个位置,计算出窗口对应位置的卷积,从而得到输出数组。

2. 二维卷积层:在对输入数组和窗口做二维互关运算后,加上一个偏移量得到

  • 特征图(feature map):卷积层输出的数组,即输入在空间维度上某一级的表征
  • 感受野(receptive field):影响元素 的前向计算的所有可能输入区域(可能大于输入的实际尺寸)
  • 填充(padding):在输入高和宽的两侧填充元素,通常设置 来使输入和输出具有相同的高和宽
是奇数,我们会在高的两侧分别填充 行; 是偶数,一种可能是在输入的顶端一侧填充 行,而在底端一侧填充
卷积神经网络经常使用奇数高和宽的卷积核
  • 步幅(stride):每次滑动的行数和列数
一般来说,当高上步幅为 ,宽上步幅为 时,输出形状为
如果设置 ,那么输出形状将简化为
更进一步,如果输入的高和宽能分别被高和宽上的步幅整除,那么输出形状将是

3. 池化层(pooling):直接计算池化窗口内元素的最大值或者平均值,为了缓解卷积层对位置的过度敏感性

二. Keras实现CNN[2]

class 

f6af82c41facbae89543e67eae9e1966.png
示例代码中的 CNN 结构图示 - https://tf.wiki/zh_hans/basic/models.html#cnn

可以加入 Dropout 层防止过拟合

Dropout 层:在前向传播的时候,让某个神经元的激活值以一定的概率p停止工作[3]

tf.keras.applications中有一些预定义好的经典卷积神经网络结构:VGG16、VGG19、ResNet、MobileNet,可以直接调用(参数已经预定义好),也可以自定义初始化变量,常用参数:

  • input_shape:输入张量的形状,默认 ,一般不低于
  • include_top:在网络的最后是否包含全连接层,默认True;
  • weights:预训练权值,默认'imagenet'(当前模型载入在 ImageNet 数据集上预训练的权值),可设为None;
  • classes:分类数,默认1000,修改该参数需要include_top参数为True且weights参数为None;
如果某些层的训练时和测试时层的行为不同,需要手动设置训练状态:tf.keras.backend.set_learning_phase(True)

例子:使用 MobileNetV2 网络在 tf_flowers 五分类数据集上进行训练:

import 

参考

  1. ^卷积神经网络 https://zh.d2l.ai/chapter_convolutional-neural-networks/index.html
  2. ^TensorFlow 模型建立与训练  https://tf.wiki/zh_hans/basic/models.html#cnn
  3. ^深度学习中Dropout原理解析 https://blog.csdn.net/program_developer/article/details/80737724


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部