第三课第二章 神经网络文本分类(一)

神经网络文本分类(一)

01 基于卷积神经网络的文本分类模型详解

1.1什么是卷积神经网络

卷积神经网络(Convolutional Neural Networks, CNN)是一类包含卷积计算且具有深度结构的前馈神经网络(Feedforward Neural Networks),是深度学习(deep learning)的代表算法之一。卷积神经网络具有表征学习(representation learning)能力,能够按其阶层结构对输入信息进行平移不变分类(shift-invariant classification),因此也被称为“平移不变人工神经网络(Shift-Invariant Artificial Neural Networks, SIANN)”
理解“卷积”参考博客《最容易理解的对卷积(convolution)的解释》
在神经网络模型中常见的二维卷积操作如下:
在这里插入图片描述

1x1+0x0+0x1+1x0+1x1+0x0+1x1+1x0+1x1 = 4

故神经网络中卷积相当于将滤子中的元素与原始输入对应位置的元素进行元素相乘再加总的操作。而一个滤子可以通过某种特定的数字排列,从而突出某种特征模式,滤出特定的特征,凸显出图片中某些特征的输出。
如何在keras中使用自己定制的滤子呢?
可以可以通过定制kernel, 输入给定的矩阵实现

  • 因为一般输入的滤子都是一个2-D矩阵,所以首先需要将数据复制到一个4-D的矩阵
def my_init(shape,dtype=None):
    new_mat = np.zeros((shape[0],shape[1],3,3))
    for i in range(shape[0]):
        for j in range(shape[1]):
            new_mat[:,:,i,j] = filter_mat
    return np.array(new_mat,dtype=dtype)
  • 其次,定义一个简单的保函一个2D卷积层的网络模型,激活函数均使用线性函数,防止变形
model = Sequential()
model.add(Covn2(depth,
                kernel_size=kernel_size,
                input_size=input_size,
                padding='same',
                activation='linear',
                data_format='channels_last',
                kernel_initializer=my_init,
                name='Conv'))
model.add(Dense(1,activation='linear'))
model.compile(loss='mse',optimizer='sgd')
model.summary()
  • 抽取该模型的卷积层输出:
inX = model.input
outputs = [layes.output for layer in model.layers if layer.name='Conv']
functions = [K.function([inX],[out]) for out in outputs]
layer_outs = [func([img_data.reshape(1,raw,col,depth)]) for func in functions]
activationLayer = layer_outs[0][0]

具体可参考Keras中文文档《编写你自己的 Keras 层》

1.2卷积神经网络模型中的一些概念

  • 步长(Strides)指水平滑动和垂直滑动步长值,各个神经网络框架中都不同的设置方式。
  • 池化(Pooling)即池化层也称下采样层,会压缩输入的特征图,一方面减少了特征,导致了参数减少,进而简化了卷积网络计算时的复杂度;另一方面保持了特征的某种不变性(旋转、平移、伸缩等)。池化操作主要有两种,一种是平均池化(Average Pooling),即对邻域内的特征点求平均;另一种是最大池化(Max Pooling),即对邻域内的特征点取最大。简而言之,池化就是去除杂余信息,保留关键信息。池化能池化能有效压缩信息的维度, 提取局部范围内最“突出” 的信息。如图
    在这里插入图片描述
  • 补齐(Padding)为了保障CNN的输出维度是否保持与输入矩阵大小一致。
  • 拉平(Flatten)就是将高维度数据拉至一维,为了让卷积层的输出能被下游的全连接层接受,Keras中对于Conv2D的结果拉平可以通过Flatten / GlobalMaxPooling函数。
    在这里插入图片描述

1.3一维卷积神经网络应用于文字

实际中把一句话可以看作是以一个单词索引下表表示的列表,因为索引没有重要的意义,因此当把每个单词都映射到致密空间后(即通过嵌入层生成词向量),我们就可以使用卷积网络了。
在这里插入图片描述

1.4 二维卷积神经网络应用于文字

二维卷积可以在更多的单词的嵌入层维度上进行卷积操作。比如在相邻的两个词一段的局部词向量之间进行卷积,但卷积结果的一个多维的数据,因此需要用reshape调整维度后,再进行后续的池化等操作。
在这里插入图片描述
二维卷积网络的主要差异在于:

  • 嵌入层的输出直接使用Reshape“明确“将维度修改为4D后在输入卷积层
  • 卷积层使用的滤子是2D滤子, 可以将相邻的元素合并处理后输出

注意:
Conv1D:输入输出都是3D

  • 输入: (样本, 步, 频道)
  • 输出: (样本, 新步数, 滤子数)

Conv2D: 输入输出都是4D
输入: (样本, 行, 列, 频道)
输出: (样本, 新行数, 新列数,滤子数)

在这里插入图片描述
后续持续更新……
原创不易,如果觉得不错,点个赞吧!
学习参考:
1.卷积神经网络-百度百科
2.微专业《深度学习工程师(实战)》

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值