发布于2020-01-15 21:30 阅读(1118) 评论(0) 点赞(7) 收藏(4)
我正在使用word2vec作为输入来构建LSTM模型。我正在使用tensorflow框架。我已经完成了词的嵌入部分,但是我坚持使用LSTM部分。
这里的问题是我的句子长度不同,这意味着我必须填充或使用具有指定序列长度的dynamic_rnn。我和他们两个都在挣扎。
填充。填充的混乱之处在于我何时进行填充。我的模特像
word_matrix = model.wv.syn0
X = tf.placeholder(tf.int32,shape)
数据= tf.placeholder(tf.float32,shape)
data = tf.nn.embedding_lookup(word_matrix,X)
然后,我将word_matrix的单词索引序列馈入X。我担心如果将零填充到馈入X的序列中,那么我会错误地继续馈送不必要的输入(在这种情况下为word_matrix [0])。
因此,我想知道0填充的正确方法是什么。如果您让我知道如何使用张量流实现它,那将是很好的。
以下是我的代码。
X = tf.placeholder(tf.int32)
labels = tf.placeholder(tf.int32, [None, numClasses])
length = tf.placeholder(tf.int32)
data = tf.placeholder(tf.float32, [None, None, numDimensions])
data = tf.nn.embedding_lookup(word_matrix, X)
lstmCell = tf.contrib.rnn.BasicLSTMCell(lstmUnits, state_is_tuple=True)
lstmCell = tf.contrib.rnn.DropoutWrapper(cell=lstmCell, output_keep_prob=0.25)
initial_state=lstmCell.zero_state(batchSize, tf.float32)
value, _ = tf.nn.dynamic_rnn(lstmCell, data, sequence_length=length,
initial_state=initial_state, dtype=tf.float32)
我在这部分上很挣扎,以至于任何帮助将不胜感激。
先感谢您。
Tensorflow不支持可变长度的Tensor。因此,当您声明张量时,list / numpy数组应具有统一的形状。
从第一部分开始,我了解到您已经能够在序列长度的最后一个时间步中填充零。理想情况应该是这样。批量大小为4,最大序列长度为10和50个隐藏单位的查找方法如下->
[4,10,50]
将是整个批次的大小,但是在内部,当您尝试可视化填充时,它的形状可能像这样->
`[[5+5pad,50],[10,50],[8+2pad,50],[9+1pad,50]`
每个填充代表隐藏长度为50张量的序列长度为1。除零外,其他所有内容均已填充。看看这个问题,并且这其中更多地了解垫手动如何。
出于不希望在填充序列上进行计算的确切原因,将使用动态rnn。该tf.nn.dynamic_rnn API将确保通过传递的sequence_length
参数。
对于上面的示例,该参数将为:[5,10,8,9]
对于上面的示例。您可以通过将每个批处理组件的非零实体相加来计算它。一种简单的计算方法是:
data_mask = tf.cast(data, tf.bool)
data_len = tf.reduce_sum(tf.cast(data_mask, tf.int32), axis=1)
并通过tf.nn.dynamic_rnn
api 传递:
tf.nn.dynamic_rnn(lstmCell, data, sequence_length=data_len, initial_state=initial_state)
作者:黑洞官方问答小能手
链接:https://www.pythonheidong.com/blog/article/223744/eda041c29d9ad2d10454/
来源:python黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 python黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-1
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!