使用动态 rnn (洋红色)时出错:输入的尺寸应匹配:形状 [0] = [1,38] 与形状 [1] = [128,51



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

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是两个LSTMStateTuple的元组,ch具有形状[128,512](批量大小和层大小)。

当我运行这个时,我得到:

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

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

来自动态 RNN 文档:

前两个维度必须在所有输入中匹配,但除此之外,等级和其他形状组件可能会有所不同。

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

ConcatOp : 输入的维度应匹配

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

相关内容

  • 没有找到相关文章

最新更新