卷积神经网络
1.卷积神经网络算法概述
卷积神经网络(Convolutional Neural Network,CNN)最开始是为了解决图像识别问题被设计而来的,CNN使用图像的原始像素作为输入,训练时可以自动提取图像特征;卷积神经网络的三个基本要点是:局部连接,权值共享和降采样。其中局部连接和权值共享降低了参数量,减少了模型复杂度;而降采样则进一步降低了输出参数量,并赋予模型对轻度畸变的容忍性,提高了模型的泛化能力。
1.1 局部连接
传统神经网络使用矩阵乘法建立输入与输出的连接关系。参数矩阵的每一个单独的参数都描述了一个输入单元与一个输出单元间的交互。卷积网络通过使核的大小远小于输入的大小来达到稀疏连接的目的。
如果有m个输入和n个输出,矩阵乘法需要mn个参数。如果限制每一个输出拥有的连接数为k,那么稀疏的连接方法只需kn个参数。
1.2 权值共享
在卷积层中每个神经元连接数据窗的权重是固定的,每个神经元只关注一个特性。神经元就是图像处理中的滤波器,比如边缘检测专用的Sobel滤波器,即卷积层的每个滤波器都会有自己所关注一个图像特征,比如垂直边缘,水平边缘,颜色,纹理等等,这些所有神经元加起来就好比就是整张图像的特征提取器集合。
1.3 降采样
池化层一般在卷积层之后使用,池化层的每个单元概括了前一层的一个小区域,常见的方法有mean-pooling,max-pooling和stochastic pooling。
池化运算
在卷积神经网络中,我们经常会碰到池化操作,而池化层往往在卷积层后面,通过池化来降低卷积层输出的特征向量,同时改善结果(不易出现过拟合)。
通常采样指的是下采样,也就是对信号的抽取 。 连续-〉离散
- 一般池化(General Pooling)
池化作用于图像中不重合的区域(这与卷积操作不同)。
最常见的池化操作为平均池化mean pooling和最大池化max pooling:
平均池化:计算图像区域的平均值作为该区域池化后的值。
最大池化:选图像区域的最大值作为该区域池化后的值。
参考:https://blog.csdn.net/kebu12345678/article/details/54923118/
Text-CNN的原理
TextCNN 是利用卷积神经网络对文本进行分类的算法。
TextCNN主要过程分为四部,也可以说是四个层。
Embedding(文本向量化):将文本中的每个词语转换成相同维度的词向量。
Convolution(卷积层):通过不同卷积核的大小kernel_size = (1,2,3,4,5)做卷积运算。
MaxPooling(池化层):
FullConnection and Softmax(全连接层):全连接的 softmax 层,输出每个类别的概率。
Text CNN 的tf实现:
代码:
#TextCNN
conv1_weights = tf.get_variable(
"weight",
[FILTER_SIZE, EMBEDDING_SIZE, 1, NUM_FILTERS],
initializer=tf.truncated_normal_initializer(stddev=0.1))
tf.nn.conv2d(
self.embedded_chars_expanded,
conv1_weights,
strides=[1, 1, 1, 1],
padding="VALID")
tf.nn.max_pool(
h,
ksize=[1, SEQUENCE_LENGTH - FILTER_SIZE + 1, 1, 1],
strides=[1, 1, 1, 1],
padding='VALID')
Text-CNN中, filter 是矩形, 矩形的长度有好几种, 一般取 (2,3,4), 而矩形的宽度是定长的, 同 word 的 embedding_size 相同. 每种尺寸都配有 NUM_FILTERS 个数目.
Text-CNN 的 kernel 依旧是长方形, 将整个feature_map 映射到一个点上. 一步到位, 只有一个池化层.
参考:https://blog.csdn.net/chuchus/article/details/77847476