使用动态rnn(品红色)时出错:输入的尺寸应匹配:shape [0] = [1,38] vs. shape [1] = [128,512]

时间:2018-05-15 15:33:06

标签: python tensorflow magenta

所以我从magenta运行此代码并做了一些修改:

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是两个{{1}的元组LSTMStateTuplec的形状为[128,512](批量大小和图层大小)。

当我跑步时,我得到:

  

InvalidArgumentError(参见上面的回溯):ConcatOp:输入的维度应该匹配:shape [0] = [1,38] vs. shape [1] = [128,512]

现在我明白这意味着输入h和状态之间不匹配。但是,两个尺寸都必须匹配(1和128,38和512)?我真的不明白为什么会这样。为什么他们必须匹配,因为这是一个充满活力的人。

2 个答案:

答案 0 :(得分:0)

来自dynamic RNN docs

  

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

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

答案 1 :(得分:0)

ConcatOp : Dimensions of inputs should match

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