“ 再小的你,也有自己的个性”
通过阅读本文,您能学到:
1、利用双向循环神经网络进行文本分类。
源代码:
https://github.com/PrivateThink/tensorflow_tutorial/blob/master/15.py
在
Tensorflow教程-循环神经网络文本分类
中,讲述了利用单向的LSTM进行文本分类,单向的神经网络只能根据前面的信息推出后面的信息,但是只看前面的词是远远不够的,举个简单的例子:
我今天生病了,我想___一天。
在上面这句话中,如果只根据“生病了”,可以推出我想“去医院”,“休息”,“请假”等。如果根据后面的“一天”,就可以把范围缩小了,选择“请假”的概率就会变大。
为了利用后面的信息,可以利用双向的循环神经网络解决问题。今天的教程就是利用双向的LSTM进行文本分类,单向的LSTM的文本分类可以参考Tensorflow教程-循环神经网络文本分类。
定义输入占位符和标签占位符,sequence_length是序列的长度,在这里表示文本句子的长度,num_classes是文本的类别数。
嵌入层的作用是将为[None,sequence_length]的输入序列映射成[None,sequence_length,embedding_size]的嵌入层,vocab_size是词典的大小,embedding_size是将文本映射成嵌入序列的维度大小。
定义权重和偏置,这里有个注意的地方,2 * num_hidden代表的是向前和向后的LSTM输出一共有两个输出。
接下来就是定义网络最终的部分,双向的LSTM神经网络。
上述定义向前的和向后的LSTM神经单元,利用DropoutWrapper进行dropout包装。然后用bidirectional_dynamic_rnn将两个LSTM结合起来得到输出结果,因为输入结果是outputs是有向前和向后的LSTM输出的结果,所以利用concat方法进行连接。
另外,因为输出只需要最后输出的结果,所以output_rnn[:,-1,:]获得shape等于[None,2 * num_hidden]的矩阵。
网络就搭建完了,其他的训练过程的代码可以直接查看公开的代码。
领取专属 10元无门槛券
私享最新 技术干货