【问题标题】:Tensorflow: variable sequence length AND batch sizeTensorflow:可变序列长度和批量大小
【发布时间】:2018-11-11 15:55:00
【问题描述】:

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

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

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

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

更新:事实上,有趣的是,我可以将两者都设置为None,但我得到Converting sparse IndexedSlices to a dense Tensor of unknown shape. This may consume a large amount of memory.注意:下一层是embedding_lookup。

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

谢谢。

【问题讨论】:

  • 那么你的问题到底是什么?您可以将占位符声明为您已告知的 [None,None] 形状。你能再澄清一下这个问题吗?
  • 当然。更新的问题。

标签: python tensorflow machine-learning


【解决方案1】:

不幸的是,这里没有解决方法,除非您向tf.nn.embedding_lookup()/tf.gather()parameter 提供tf.Variable()(在您的情况下这是不可能的)。 发生这种情况是因为,当您使用形状为 [None, None] 的占位符声明它们时,从 tf.gather() 函数 tf.IndexedSlices() 变为 sparse tensor

我已经完成了面对这个warning 的项目。我可以告诉你的是,如果embedding_lookup 旁边有一个tf.nn.dynamic_rnn(),那么将tf.nn.dynamic_rnn() 的名为swap_memory 的参数设置为True。还要避免OOMResource Exhausted error 使批大小更小(测试不同的批大小)。

对此已经有了一些很好的解释。请参考以下 Stackoverflow 问题。

Tensorflow dense gradient explanation?

【讨论】:

    猜你喜欢
    • 2018-02-07
    • 2017-12-22
    • 2017-11-27
    • 2019-01-04
    • 1970-01-01
    • 2018-10-10
    • 1970-01-01
    • 2016-04-12
    • 2019-02-06
    相关资源
    最近更新 更多