0

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

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] 的一个热长度向量,并且是具有形状 [128,512](批量大小和层大小)state的两个元组。LSTMStateTuplech

当我运行它时,我得到:

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

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

4

2 回答 2

0

ConcatOp :输入的尺寸应该匹配

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

于 2018-05-15T17:19:07.363 回答
0

来自动态 RNN 文档

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

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

于 2018-05-15T15:38:23.313 回答