将输入传递给 tf.nn.static_rnn

Passing input to tf.nn.static_rnn

根据文档,static_rnn 的第二个参数应设置为 "a length T list of inputs, each a Tensor of shape [batch_size, input_size], or a nested tuple of such elements."

我将列列表传递给 static_rnn,但我得到 ValueError: linear is expecting 2D arguments。所以input_size不可能是1。input_size和T到底指的是什么?为什么 input_size 不能是 1?

我突然想到 static_rnn 可能需要一个矩阵包含单热向量的列表。在这种情况下,input size 将是词汇表的长度。但是,如果 static_rnn 需要单热向量,文档会这样说,对吗?

input_size表示特征个数,可以是1,比如在普通的时间序列预测中。你得到这个错误,很可能是因为你的张量是 [batch_size],而不是 [batch_size, 1]

因此,您不必对特征进行单热编码(尽管您可以),只需设置正确的输入张量等级即可。

示例代码:

n_inputs = 1
n_neurons = 5
X0 = tf.placeholder(dtype=tf.float32, shape=[None, n_inputs])
X1 = tf.placeholder(dtype=tf.float32, shape=[None, n_inputs])
basic_cell = tf.nn.rnn_cell.BasicRNNCell(num_units=n_neurons)
output_seqs, states = tf.nn.static_rnn(basic_cell, [X0, X1], dtype=tf.float32)
Y0, Y1 = output_seqs