我的数据集由句子组成。每个句子都有一个可变长度,最初编码为一系列词汇索引,即。形状的张量[sentence_len]。批量大小也是可变的。
我将相似长度的句子分组到桶中并在必要时填充,以便将每个句子放入一个桶中达到相同的长度。
我如何处理未知句子长度和批量大小?
我的数据提供商会告诉我每批的句子长度是多少,但我不知道如何提供 - >该图已经在那时构建。输入用占位符x = tf.placeholder(tf.int32, shape=[batch_size, sentence_length], name='x')
表示。我可以将batch_size
或sentence_length
转为None
,但不能同时转为。{/ p>
更新:事实上,有趣的是,我可以将它们都设置为None
,但我得到Converting sparse IndexedSlices to a dense Tensor of unknown shape. This may consume a large amount of memory.
注意:下一层是embedding_lookup。
我不确定这意味着什么以及如何避免它。我假设它与稍后使用tf.gather
有关,我需要使用它。
或者,有没有其他方法可以实现我的需要?
谢谢。
答案 0 :(得分:0)
很遗憾,除非您向tf.Variable()
/ parameter
的{{1}}提供tf.nn.embedding_lookup()
(在您的情况下不可行),否则此处没有解决方法。
发生这种情况的原因是,当您使用形状为tf.gather()
的占位符声明它们时,[None, None]
函数tf.gather()
成为sparse tensor
。
我已经完成了面向此tf.IndexedSlices()
的项目。我可以告诉您,如果warning
旁边有tf.nn.dynamic_rnn()
,则将embedding_lookup
的{{1}}参数设为swap_memory
。另外,为避免tf.nn.dynamic_rnn()
或True
缩小批量(针对不同的批量大小进行测试)。
对此有一些很好的解释。请参阅Stackoverflow的以下问题。