【问题标题】:Error using dynamic rnn (magenta) : Dimensions of inputs should match: shape[0] = [1,38] vs. shape[1] = [128,512]使用动态 rnn(洋红色)时出错:输入的尺寸应匹配:shape[0] = [1,38] vs. shape[1] = [128,512]
【发布时间】:2018-05-15 15:33:06
【问题描述】:

所以我从洋红色运行这段代码并进行了一些修改:

outputs, final_state = tf.nn.dynamic_rnn(
                self.cell,
                m_seq,
                sequence_length=lens,
                initial_state=initial_state,
                swap_memory=swap_memory,
                parallel_iterations=parallel_iterations)

其中self.cell 是具有两层的 MultiRNN 单元,m_seq 是一个热长度向量,形状为 [1,38],state 是两个 LSTMStateTuplec 的元组和h 具有形状 [128,512](批量大小和层大小)。

当我运行它时,我得到:

InvalidArgumentError(有关回溯,请参见上文):ConcatOp:输入的尺寸应匹配:shape[0] = [1,38] vs. shape[1] = [128,512]

现在我明白这意味着输入 m_seq 和状态不匹配。但是,两个维度都必须匹配(1 和 128、38 和 512)吗?我真的不明白为什么会这样。为什么它们必须完全匹配,因为这是一个动态 rnn。

【问题讨论】:

    标签: python tensorflow magenta


    【解决方案1】:

    来自dynamic RNN docs

    前两个维度必须在所有输入中匹配,否则排名和其他形状组件可能会有所不同。

    所以输入维度必须匹配,即使它是动态 RNN。

    【讨论】:

    • 指的是输入。我们只有一个输入,因此所有输入的维度都匹配。问题在于输入形状和状态形状之间。如果我遗漏了什么,请告诉我
    • 你指的是state还是initial_state?
    • 我指的是 intial_state
    【解决方案2】:

    ConcatOp : Dimensions of inputs should match

    我相信这回答了我的问题。批量大小(第一个参数)必须匹配,但第二个(序列长度)不需要匹配,因为它是一个动态 RNN。在任何情况下,都可以使用占位符来采用不同的批量大小。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-10
      • 2017-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多