我的数据集由句子组成。每个句子都有一个可变的长度,并且最初被编码为词汇索引序列,即。形状为 [sentence_len] 的张量。批量大小也是可变的。
我将相似长度的句子分组到桶中,并在必要时进行填充,以使桶中的每个句子达到相同的长度。
我该如何处理句子长度和批量大小都未知的情况?
我的数据提供者会告诉我每批的句子长度是多少,但我不知道如何提供 -> 此时图表已经构建好了。输入用占位符 x = tf.placeholder(tf.int32, shape=[batch_size, Sentence_length], name='x')
表示。我可以将 batch_size
或 sentence_length
更改为 None
,但不能同时更改两者。
更新:事实上,有趣的是,我可以将两者设置为None
,但我得到Converting稀疏IndexedSlices到未知形状的密集张量。这可能会消耗大量内存。
注意:下一层是 embedding_lookup。
我不确定这意味着什么以及如何避免它。我认为这与稍后使用 tf.gather 有关,我需要使用它。 或者还有其他方法可以实现我的需要吗?
谢谢。
最佳答案
不幸的是,除非您提供tf.Variable()
,否则没有解决方法(这在您的情况下是不可能的)到 parameter
的tf.nn.embedding_lookup()
/tf.gather()
。
发生这种情况是因为,当您使用形状 [None, None]
的占位符声明它们时,来自tf.gather()
功能tf.IndexedSlices()
成为 sparse tensor
.
我已经完成了面临这个的项目warning
。我可以告诉你的是,如果有一个 tf.nn.dynamic_rnn()
旁边embedding_lookup
然后将参数命名为 swap_memory
的tf.nn.dynamic_rnn()
至True
。还要避免OOM
或Resource Exhausted error
减小批量大小(测试不同批量大小)。
对此已经有一些很好的解释。请引用以下Stackoverflow问题。
关于python - Tensorflow:可变序列长度和批量大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50644567/