“ 再小的你,也有自己的个性”
通过阅读本文,您能学到:
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进进行训练和测试的准确率和损失大小的输出。
今天的教程就讲完了,具体细节可以查看公开的源代码。
领取专属 10元无门槛券
私享最新 技术干货