所以我从洋红色运行这段代码,并进行了一些修改:
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
的元组,c
和h
具有形状[128,512](批量大小和层大小)。
当我运行这个时,我得到:
InvalidArgumentError (参见上面的回溯): ConcatOp : 输入的维度应匹配:shape[0] = [1,38] vs. shape[1] = [128,512]
现在我明白这意味着输入m_seq
和状态不匹配。但是,两个维度是否必须匹配(1 和 128、38 和 512)?我真的不明白为什么会这样,即。为什么它们必须匹配,因为这是一个动态 RNN。
来自动态 RNN 文档:
前两个维度必须在所有输入中匹配,但除此之外,等级和其他形状组件可能会有所不同。
因此,即使它是动态 RNN,输入维度也必须匹配。
ConcatOp : 输入的维度应匹配
我相信这回答了我的问题。批处理大小(第一个参数)必须匹配,但第二个参数(序列长度)不需要匹配,因为它是动态 RNN。在任何情况下,都可以使用占位符来采用不同的批次大小。