专栏首页编程CNN之文本分类之网络结构

CNN之文本分类之网络结构

本文主要是基于Yoon Kim的Convolutional Neural Networks for Sentence Classification,用中文重新梳理一遍。

模型

这篇文章使用的模型如下图所示。

第一层网络是词嵌入层,用来将文本转换成低维度的向量;第二层是卷积层,使用多个卷积核;第三层是max-pool最大池化层,产出一个长的feature向量,添加dropout;最后是softmax层,进行分类。

网络构建-源码解读

init函数

参数解读为:

sequence_length – 句子的长度,可以取所有句子的最长长度,其余不足长度的打pad。

num_classes – 分类类别数量

vocab_size – 词典的大小,embedding层的向量维度为 [vocabulary_size, embedding_size].

embedding_size – 每个词的维度

filter_sizes – 卷积核的尺寸,如[3,4,5], 如大小为3的卷积核的维度为3*embedding_size,对于每个卷积核,可以有num_filters个

num_filters – 每个size的卷积核的数量

定义输入占位符

首先定义输入数据

tf.placeholder:创建一个占位符,这样我们在训练网络或者测试的时候可以给网络喂数据。[None, sequence_length]是输入的数据维度,None表示输入的数据量不确定,可以为任意值。一般为一批数据的大小。

dropout_keep_prob为dropout层选择一个神经元的概率。在使用网络预测时,禁掉这个参数,直接赋值为1.

词嵌入层

网络定义的第一层为词嵌入层,用来将词映射成低纬度的向量标示。

tf.device("/cpu:0") :操作在CPU上。一般情况下,tensorflow会尝试在GPU上执行计算,如果GPU有的话。但是目前词嵌入还没有GPU支持的版本,如果设定为GPU会报错。

tf.name_scope :创建一个叫“embedding”的命名空间,他下面的所有操作都在这个命名空间下,在tensorBoar读网络时能更有层次感。

卷积层

现在开始构建卷积层+最大池化层。这里使用不同尺寸的卷积核。最终将不同尺度的feature merge成一个大的向量。

W是卷积核的矩阵,h是经过非线性校正之后的卷积计算结果。 VALID padding意思是我们使用窄卷积,不对边界padding,产出 [1, sequence_length - filter_size + 1, 1, 1]. 最大池化的时候使用一个特定的核可以只产出一维特征,最终产出[batch_size, 1, 1, num_filters],最终将所有卷积的结果组合成一个大的向量,[batch_size, num_filters_total],tf.reshape=-1,进行尺度方向扭转。

Dropout层

Dropout层在一定的概率下随机的选择某些神经元“失活”,但是权重参数等保存。一般训练时设为0.5,预测时设为1.

Scores and Predictions

使用dropout之后,max-pool计算完的特征,我们可以通过矩阵计算并选择最大值产出预测结果。同时,我们可以使用softmax将原始结果进行归一化,但是这并不会改变最终的预测。

Loss and Accuracy

使用已经计算的score可以得到损失值。loss是对网络损失的衡量,我们的目标是最小化它。在分类中常用交叉损失。

对于准确率,我们也定义以个表达式,它是跟踪训练和测试的有效衡量标准。

可视化

下图是整个网的络结构。

这里,我们介绍了网络结构及每层结构的输入输出以及执行的计算,下一篇文章我们会介绍训练过程。

Implementing a CNN for Text Classification in TensorFlow

Convolutional Neural Networks for Sentence Classification

本文来自企鹅号 - 全球大搜罗媒体

我来说两句

0 条评论
登录 后参与评论

相关文章

  • CNN入门讲解:什么是采样层

    各位看官老爷们 好久不见 这里是波波给大家带来的CNN卷积神经网络入门讲解 每周我将给大家带来绝对原创,脑洞大开,幽默风趣的深度学习知识点入门讲解 希望大家多多...

    企鹅号小编
  • 卷积神经网络的前向传播算法详解

    这篇干货 我们在CNN的模型基础上,看看CNN的前向传播算法是什么样子的。重点会和传统的DNN比较讨论。 CNN结构回顾 CNN的结构,包括输出层,若干的卷积层...

    企鹅号小编
  • 形象理解卷积神经网络(二)——卷积神经网络在图像识别中的应用

    卷积神经网络之父YannLeCuu在1988年提出卷积神经网络时,将这种网络命名为LeNet。现在的卷积神经网络都是基于类似LeNet的网络构架。下图是一个简单...

    企鹅号小编
  • 目标检测算法之SSD

    作者:叶 虎 编辑:祝鑫泉 前言 目标检测近年来已经取得了很重要的进展,主流的算法主要分为两个类型:(1)two-stage方法,如R-CNN系算法,其主...

    机器学习算法工程师
  • 【论文详解】目标检测算法之SSD 深入详解

    目标检测近年来已经取得了很重要的进展,主流的算法主要分为两个类型:(1)two-stage方法,如R-CNN系算法,其主要思路是先通过启发式方法(selecti...

    小草AI
  • 深度学习以及卷积基础

    作者:石文华 编辑:龚 赛 介 绍 ? 深度学习是机器学习的一个分支,是基于数据来学习表示数据的一组算法。下面我们列出最受欢迎的一些深度学习算法。 卷...

    机器学习算法工程师
  • keras中的卷积层&池化层的用法

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

    砸漏
  • 【从零学习OpenCV 4】图像卷积

    过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门书籍《从零学习OpenCV 4》。为了更让小伙伴更早的了解最新版的OpenCV 4,小白与出版社沟...

    小白学视觉
  • 卷积神经网络学习路线(七)| 经典网络回顾之AlexNet

    开篇的这张图代表ILSVRC历年的Top-5错误率,我会按照以上经典网络出现的时间顺序对他们进行介绍,同时穿插一些其他的经典CNN网络。

    BBuf
  • 卷积神经网络学习路线(五)| 卷积神经网络参数设置,提高泛化能力?

    这是卷积神经网络学习路线的第五篇文章,主要为大家介绍一下卷积神经网络的参数设置,调参技巧以及被广泛应用在了哪些领域,希望可以帮助到大家。

    BBuf

扫码关注云+社区

领取腾讯云代金券