Tensorflow:可变序列长度和批量大小

时间:2018-06-01 13:28:39

标签: python tensorflow machine-learning

我的数据集由句子组成。每个句子都有一个可变长度,最初编码为一系列词汇索引,即。形状的张量[sentence_len]。批量大小也是可变的。

我将相似长度的句子分组到桶中并在必要时填充,以便将每个句子放入一个桶中达到相同的长度。

我如何处理未知句子长度和批量大小?

我的数据提供商会告诉我每批的句子长度是多少,但我不知道如何提供 - >该图已经在那时构建。输入用占位符x = tf.placeholder(tf.int32, shape=[batch_size, sentence_length], name='x')表示。我可以将batch_sizesentence_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有关,我需要使用它。 或者,有没有其他方法可以实现我的需要?

谢谢。

1 个答案:

答案 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的以下问题。

Tensorflow dense gradient explanation?