[ MOOC课程学习 ] 人工智能实践:Tensorflow笔记_CH7_1卷积神经网络

卷积神经网络

参考资料:
课程链接
MLNotebook
1. 全连接 NN:每个神经元与前后相邻层的每一个神经元都有连接关系,输入是特征,输出为预测的结果。
2. 待优化的参数过多,容易导致模型过拟合。
3. 在实际应用中,会先对原始图像进行特征提取,把提取到的特征喂给全连接网络,再让全连接网络计算出分类评估值。
4. 卷积是一种有效提取图片特征的方法。一般用一个正方形卷积核,遍历图片上的每一个像素点。图片与卷积核重合区域内相对应的每一个像素值乘卷积核内相对应点的权重,然后求和,再加上偏置后,最后得到输出图片中的一个像素值。
5. 全零填充 Padding: 有时会在输入图片周围进行全零填充Padding,这样可以保证输出图片的尺寸和输入图片一致。

= ( W F + 2 P ) S + 1

W:输入数据体尺寸,
F:卷积层中神经元感知域,
S:步长,
P:零填充的层数

如果用全零填充,也就是 padding=SAME。如果不用全零填充,也就是 padding=VALID。
6. Tensorflow 给出的计算卷积的函数: tf.nn.conv2d()

tf.nn.conv2d(
    input, 
    filter, 
    strides, 
    padding, 
    use_cudnn_on_gpu=True, 
    data_format="NHWC", 
    name=None
)

tf.nn.conv2d

函数中要给出四个信息:对输入图片的描述、对卷积核的描述、对卷积核滑动步长的描述以及是否使用 padding。
1)对输入图片的描述:用 batch 给出一次喂入多少张图片,每张图片的分辨率大小,比如 5 行 5 列,以及这些图片包含几个通道的信息,如果是灰度图则为单通道,参数写 1,如果是彩色图则为红绿蓝三通道,参数写 3。
2)对卷积核的描述:要给出卷积核的行分辨率和列分辨率、通道数以及用了几个卷积核。比如上图描述,表示卷积核行列分辨率分别为 3 行和 3 列,且是1 通道的,一共有 16 个这样的卷积核,卷积核的通道数是由输入图片的通道数决定的,卷积核的通道数等于输入图片的通道数,所以卷积核的通道数也是 1。一共有 16 个这样的卷积核,说明卷积操作后输出图片的深度是 16,也就是输出为 16 通道
3)对卷积核滑动步长的描述:上图第二个参数表示横向滑动步长,第三个参数表示纵向滑动步长。第一个 1 和最后一个 1 这里固定的。这句表示横向纵向都以 1 为步长。
4)是否使用 padding:用的是 VALID。注意这里是以字符串的形式给出 VALID。
7. 池化 Pooling:池化用于减少特征数量,最大值池化可提取图片纹理,均值池化可保留背景特征
Tensorflow 给出了计算池化的函数。最大池化用tf.nn.max_pool函数,平均池化用tf.nn.avg_pool函数。

tf.nn.max_pool(
    value, 
    ksize, 
    strides, 
    padding, 
    data_format="NHWC", 
    name=None
)
tf.nn.avg_pool(
    value,
    ksize,
    strides,
    padding,
    data_format="NHWC",
    name=None
)

池化 Pooling
函数中要给出四个信息,对输入的描述、对池化核的描述、对池化核滑动步长的描述和是否使用 padding。
1)对输入的描述:给出一次输入 batch 张图片、行列分辨率、输入通道的个数。
2)对池化核的描述:只描述行分辨率和列分辨率,第一个和最后一个参数固定是 1。
3)对池化核滑动步长的描述:只描述横向滑动步长和纵向滑动步长,第一个和最后一个参数固定是 1。
4)是否使用 padding:padding 可以是使用零填充 SAME 或者不使用零填充VALID。
8. Dropout
在神经网络训练过程中,为了减少过多参数常使用 dropout 的方法,将一部分神经元按照一定概率从神经网络中舍弃。这种舍弃是临时性的,仅在训练时舍弃一些神经元;在使用神经网络时,会把所有的神经元恢复到神经网络中。比如下面这张图,在训练时一些神经元不参加神经网络计算了。Dropout 可以有效减少过拟合。
dropout

tf.nn.dropout(
    x, 
    keep_prob, 
    noise_shape=None, 
    seed=None, 
    name=None
)

Tensorflow 提供的 dropout 的函数:用 tf.nn.dropout 函数。第一个参数链接上一层的输出,第二个参数给出神经元舍弃的概率。
在实际应用中,常常在前向传播构建神经网络时使用 dropout 来减小过拟合加快模型的训练速度。
dropout一般会放到全连接网络中 。如果在训练参数的过程中, 输出=tf.nn.dropout(上层输出,暂时舍弃神经元的概率),这样就有指定概率的神经元被随机置零,置零的神经元不参加当前轮的参数优化。
9.卷积 NN:借助卷积核(kernel)提取特征后,送入全连接网络。
CNN
卷积神经网络可以认为由两部分组成,一部分是对输入图片进行特征提取,另一部分就是全连接网络,只不过喂入全连接网络的不再是原始图片,而是经过若干次卷积、激活和池化后的特征信息。
卷积神经网络从诞生到现在,已经出现了许多经典网络结构,比如 Lenet-5、Alenet、VGGNet、GoogleNet 和 ResNet 等。每一种网络结构都是以卷积、激活、池化、全连接这四种操作为基础进行扩展。
Lenet-5 是最早出现的卷积神经网络,由 Lecun 团队首先提出,Lenet-5 有效解决了手写数字的识别问题。

猜你喜欢

转载自blog.csdn.net/ranmw1129/article/details/81118844