Tensorflow教程-卷积神经网络分类

“ 再小的你,也有自己的个性”

通过阅读本文,您能学到:

1、利用卷积神经网络进行分类。

源代码

https://github.com/PrivateThink/tensorflow_tutorial/blob/master/13.py

卷积神经网络不管在计算机视觉还是自然语言处理领域,都是比较经典的模型,特别是在图像处理领域。今天的教程只讲实践,不讲理论,有关于卷积神经网络的理论知识请自行查询。

数据准备

在上面程序中,设置了一些参数,参数的意义已在程序中进行注释。load_data_and_labels函数获取处理好的数据,该函数的代码可以在公开的github上查看。

利用tensorflow自带的词典处理器VocabularyProcessor处理文本,fit方法将文本作为语料进行词典的相关操作,format方法将文本转为序列,获取词典的大小。最后将数据集按照8:2分割训练集和测试集。

模型构建

定义占位符

上述定义了输入占位符、输出占位符、dropout,另外,定义了L2正则化。

嵌入层

嵌入层将词汇索引映射到低维向量表示,首先设置嵌入层的输入变量的大小为[vocab_size, embedding_size]vocab_size是词典的大小,embedding_size是词向量维度的大小。经过embedding_lookup方法输出的结果为shape=[None,sequence_length,embedding_size]。因为卷积的输入要四维的,所以利用expand_dims拓展最后一维为1,得到的结果为shape=[None,sequence_length,embedding_size,1]。

卷积

首先定义卷积的大小filter_shape,在sequence_length方向上的窗口移动的大小为filter_size,在维度上embedding_size方向上窗口移动大小为embedding_size,因为在embedding_size方向上就是移动一个词的大小,一个词的大小映射为embedding_size大小的词向量。1为输入通道的大小,num_filters为输出通道的大小。经过卷积以后,再进行最大池化操作。

全连接层

将池化层输出的结果进行展开,然后进行dropout操作,然后将权重和偏置进行L2正则化。

定义损失函数,准确率,优化器等。

训练

在上述程序中,将数据分割成batchsize大小的数据进行训练,每一个epoch进进行训练和测试的准确率和损失大小的输出。

今天的教程就讲完了,具体细节可以查看公开的源代码。

  • 发表于:
  • 原文链接:https://kuaibao.qq.com/s/20180704G1SMIB00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券