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

标签 python tensorflow machine-learning

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

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

我该如何处理句子长度和批量大小都未知的情况?

我的数据提供者会告诉我每批的句子长度是多少,但我不知道如何提供 -> 此时图表已经构建好了。输入用占位符 x = tf.placeholder(tf.int32, shape=[batch_size, Sentence_length], name='x') 表示。我可以将 batch_sizesentence_length 更改为 None,但不能同时更改两者。

更新:事实上,有趣的是,我可以将两者设置为None,但我得到Converting稀疏IndexedSlices到未知形状的密集张量。这可能会消耗大量内存。注意:下一层是 embedding_lookup。

我不确定这意味着什么以及如何避免它。我认为这与稍后使用 tf.gather 有关,我需要使用它。 或者还有其他方法可以实现我的需要吗?

谢谢。

最佳答案

不幸的是,除非您提供tf.Variable(),否则没有解决方法(这在您的情况下是不可能的)到 parametertf.nn.embedding_lookup()/tf.gather() 。 发生这种情况是因为,当您使用形状 [None, None] 的占位符声明它们时,来自tf.gather()功能tf.IndexedSlices()成为 sparse tensor .

我已经完成了面临这个的项目warning 。我可以告诉你的是,如果有一个 tf.nn.dynamic_rnn()旁边embedding_lookup然后将参数命名为 swap_memorytf.nn.dynamic_rnn()True 。还要避免OOMResource Exhausted error减小批量大小(测试不同批量大小)。

对此已经有一些很好的解释。请引用以下Stackoverflow问题。

Tensorflow dense gradient explanation?

关于python - Tensorflow:可变序列长度和批量大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50644567/

相关文章:

python - 使用python的pandas处理aws dynamodb数据

python - 在 64 位操作系统上 CPU 使用率高的原因是什么?

tensorflow - 为什么要在 CPU 而不是 GPU 上进行预处理?

tensorflow - 如何解释 CNN 中的 model.summary() 输出?

tensorflow - Keras CNN 对四个以上类别的过度拟合

python - 如何使用 Tensorflow Optimizer 而不重新计算强化学习程序中的激活,从而在每次迭代后返回控制?

python - 使用 mongodb 与 hyperopt 进行并行评估不起作用

python - tf.norm 错误 ValueError : 'ord' must be a supported vector norm, 来自

machine-learning - 如何在 Infer.NET 的 BPM 中包含更多结果?

python - pytorch 模型中的参数如何不是叶子并且在计算图中?