Tensorflow Conv2D和MaxPool2D原理

原创文章,转载请注明: 转载自慢慢的回味

本文链接地址: Tensorflow Conv2D和MaxPool2D原理

卷积神经网络(CNN)是指在所有网络中,至少优一层使用了卷积运算运算的神经网络,因此命名为卷积神经网络。
那么什么是卷积呢?如果需要卷积一个二位图片,首先定义一个卷积核(kernel),即权重矩阵,它能表面每一次卷积那个方向的值更重要,然后逐步在二维输入数据上“扫描卷积”。当卷积核“滑动”的同时进行卷积:计算权重矩阵和扫描所得的数据矩阵的乘积,求和后得到一个像素输出。
步长(Stride)为每次卷积核移动格数,填充(Padding)为是否对元素数据进行边缘填充。当不填充的时候,即Tensorflow中的VALID选项,卷积后的数据会比输入数据小,而加入合适的填充后,即Tensorflow中的SAME选项,卷积后的数据可以保持和输入数据大小一致。如下图所示:

那么什么是池化呢?池化也称为欠采样或下采样。主要用于特征降维,在保持旋转、平移、伸缩等不变性的前提下,压缩数据和参数的数量,减小过拟合,同时提高模型的容错性。常用的有按均值池化(mean-pooling):更大地保留图像背景信息,按最大值池化(max-pooling):更多的保留纹理信息。如下图所示,池化大大压缩了数据:

原理

以下面的测试程序来讨论Conv2D(卷积)和MaxPool2D(池化)的具体实现原理:
首先定义一个具有1张图,大小为6X6,通道为1个,即输入数据img的shape为[1,6,6,1]。
然后定义过滤器filter,NHWC格式,即批次,高,宽,通道格式,和输入数据是同一个格式。
下图为不同的卷积核对同一图片处理的结果:

测试程序

如下程序和图片示例,一个 3X3 的filter(卷积核的特征是提取图片从左上到右下的特征)在 6X6 的图片上,按照步长 1X1 从左往右,从上往下计算蒙版区域输出结果。
卷积计算:
图例1的卷积计算为:1*1 + 0*-1 + 0*-1 + 0*-1 + 1*1 + 0*-1 + 0*-1 + 0*-1 + 1*1 = 3
图例2的卷积计算为:1*1 + 0*-1 + 0*-1 + 0*-1 + 1*1 + 1*-1 + 0*-1 + 0*-1 + 0*1 = 1

继续阅读“Tensorflow Conv2D和MaxPool2D原理”本作品采用知识共享署名 4.0 国际许可协议进行许可。

Tensorflow 文本分类实例

原创文章,转载请注明: 转载自慢慢的回味

本文链接地址: Tensorflow 文本分类实例

实例学习

了解上文的Embedding和Pooling原理后,就可以理解Tensorflow的示例程序了
1 加载测试数据IMDB imdb
2 对每个样本进行padding操作,补齐到256长的数组(keras.preprocessing.sequence.pad_sequences),完成后为 mX256 的矩阵;
3 创建模型,先使用Embedding把输入的稀疏矩阵进行致密矩阵的映射,完成后为 mX256X16 的矩阵;
4 然后进行Pooling把矩阵降维,完成后为 mX16 的矩阵;
5 最后进行2个全连接操作,完成后分别为 mX16,mX1 的矩阵,由此得到每条评论的结果,好评或差评;
6 通过训练完成神经元参数的设置,然后可以对测试数据进行分类。
继续阅读“Tensorflow 文本分类实例”本作品采用知识共享署名 4.0 国际许可协议进行许可。

Tensorflow Pooling池化原理

原创文章,转载请注明: 转载自慢慢的回味

本文链接地址: Tensorflow Pooling池化原理

池化(Pooling):也称为欠采样或下采样。主要用于特征降维,在保持旋转、平移、伸缩等不变性的前提下,压缩数据和参数的数量,减小过拟合,同时提高模型的容错性。常用的有按均值池化(mean-pooling):更大地保留图像背景信息,按最大值池化(max-pooling):更多的保留纹理信息。

池化原理

Tensorflow的池化(pooling.py)API主要包括1D,2D和3D的平均池化和最大池化。
平均池化通过API math_ops.reduce_mean 完成,最大池化通过API math_ops.reduce_max完成。

测试程序

以下面程序为例(这儿是GlobalMaxPooling2D):
继续阅读“Tensorflow Pooling池化原理”本作品采用知识共享署名 4.0 国际许可协议进行许可。