目录

前言

三、卷积神经网络CNN——层层搭建

1.卷积层Convalution:特征提取

2.池化层pooling:减小数学量、降低维度且防止过拟合

3.Flatten层:用来将输入“压平”,即把多维的输入一维化

4.全连接层Dense:对先前卷积中提取的特征的非线性组合

5.dropout层:防止过拟合


前言

       上一篇了解了卷积神经网络结构,本章将分享“如何层层搭建卷积神经网络CNN”。

三、卷积神经网络CNN——层层搭建

1.卷积层Convalution:特征提取

卷积的基本操作原理:

卷积核kernel在image原始图像(感受页)上滑动,对应元素相乘后相加得到第一个output图(feature map)。

如何跑一个卷积神经网络 卷积神经网络怎么搭建_cnn

 创建卷积层:如果卷积层是网络的第一个层级,则包含input_shape参数;不是则不包含。

from keras.layers import Conv2D
Conv2D(filters, kernel_size, strides, padding, activation='relu', input_shape)

filters: 过滤器数量

kernel_size:指定卷积核的大小

strides: 卷积步伐stride,如果不指定任何值,则strides设为1

padding: 选项包括'valid'和'same',就是我们认为的扩充图片, 在图片外围补充一些像素点,把这些像素点初始化为0。

默认值为'valid'。

valid:是不填充,直接计算输出

same:是填充,填充大小, p = (f-1)/2;

如何跑一个卷积神经网络 卷积神经网络怎么搭建_如何跑一个卷积神经网络_02

 

padding的用途:

  (1)保持边界信息,如果没有加padding的话,输入图片最边缘的像素点信息只会被卷积核操作一次,但是图像中间的像素点会被扫描到很多遍,那么就会在一定程度上降低边界信息的参考程度,但是在加入padding之后,在实际处理过程中就会从新的边界进行操作,就从一定程度上解决了这个问题。

  (2)可以利用padding对输入尺寸有差异图片进行补齐,使得输入图片尺寸一致。

  (3)卷积神经网络的卷积层加入Padding,可以使得卷积层的输入维度和输出维度一致。

  (4)卷积神经网络的池化层加入Padding,一般都是保持边界信息和(1)所述一样。

activation: 通常为'relu',如果不指定任何值,则不应用任何激活函数,通常应该向网络中每个卷积层添加一个Relu激活函数。

 input_shape: 指定输入的高度、宽度和深度=(image_width ,image_height ,color channels)

2.池化层pooling:减小数学量、降低维度且防止过拟合

常用的方法是选取局部区域的最大值或者平均值。

创建池化层:

from keras.layers import MaxPooling2D
MaxPooling2D(pool_size, strides, padding)

pool_size:指定池化窗口高度和宽度的数字

strides:垂直和水平stride,默认参数为pool_size

padding:选项包括'valid'和'same',默认参数为'valid'

3.Flatten层:用来将输入“压平”,即把多维的输入一维化

常用在卷积层到全连接层的过渡。

创建Flatten层:

layers.Flatten()

4.全连接层Dense:对先前卷积中提取的特征的非线性组合

创建全连接层:当dense层是输入层时还需要有input_shape参数

keras.layers.Dense(units, activation=None, use_bias=True, kernel_initializer='glorot_uniform', bias_initializer='zeros', kernel_regularizer=None, bias_regularizer=None, activity_regularizer=None, kernel_constraint=None, bias_constraint=None)
  1. units:代表该层的输出维度或神经元个数, units解释为神经元个数为了方便计算参数量,解释为输出维度为了方便计算维度。
  2. use_bias=True:布尔值,该层是否使用偏置向量b
  3. kernel_initializer:初始化w权重
  4. bias_initializer:初始化b权重
  5. kernel_regularizer:施加在权重w上的正则项
  6. bias_regularizer:施加在偏置向量b上的正则项
  7. activity_regularizer:施加在输出上的正则项
  8. kernel_constraint:施加在权重w上的约束项
  9. bias_constraint:施加在偏置b上的约束项

(1)当全连接层为输入层时,要包含input_shape,用'sigmoid'激活函数

(2)当全连接层为中间层时,用'sigmoid'激活函数

(3)当全连接层为输出层时,用'softmax'激活函数

5.dropout层:防止过拟合

Dropout将在训练过程中每次更新参数时按一定概率(rate)随机断开输入神经元

rate:0~1的浮点数,控制需要断开的神经元的比例

noise_shape:整数张量,为将要应用在输入上的二值Dropout mask的shape,例如你的输入为(batch_size, timesteps, features),并且你希望在各个时间步上的Dropout mask都相同,则可传入noise_shape=(batch_size, 1, features)。

seed:整数,使用的随机数种子

创建dropout层:

keras.layers.core.Dropout(rate, noise_shape=None, seed=None)

以上就是卷积神经网络CNN框架层的创建方式,也可以采用Model.add()方式添加层。