首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Tensorflow教程-双向的LSTM文本分类

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

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

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]的矩阵。

网络就搭建完了,其他的训练过程的代码可以直接查看公开的代码。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180710G1X85U00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券