在搭建双向BIRNN模型的时候,调用tensorflow自动展开函数bidirectional_dynamic_rnn(cell_fw, cell_bw, data, dtype=tf.float32)时候出现异常:InvalidArgumentError (see above for traceback): ConcatOp : Dimensions of inputs should match: shape[0] = [5,60] vs. shape[1] = [100,10]
[[node bidirectional_rnn/bw/bw/while/lstm_cell/concat (defined at F:/Python/NLP/BiRNN.py:28) = ConcatV2[N=2, T=DT_FLOAT, Tidx=DT_INT32, _device="/job:localhost/replica:0/task:0/device:CPU:0"](bidirectional_rnn/bw/bw/while/TensorArrayReadV3, bidirectional_rnn/bw/bw/while/Switch_4:1, bidirectional_rnn/bw/bw/while/lstm_cell/split/split_dim)]]
下面就来看下tensorflow中已经集成的 tf.nn.bidirectional_dynamic_rnn() 函数。似乎双向的暂时只有这一个动态的RNN方法,不过想想也能理解,这种结构暂时也只会在encoder端出现,无论你的输入是pad到了定长或者是不定长的,动态RNN都是可以处理的。具体的定义如下:
tf.nn.bidirectional_dynamic_rnn(
cell_fw,
cell_bw,
inputs,
sequence_length=None,