我不知道这个错误是如何产生的。我正在尝试将输入格式更改为RNN,并打印出原始版本(有效)和修改版本(崩溃)中的张量。
功能:
LABEL= Tensor("concat_1:0", shape=(?, 2), dtype=float32, device=/device:CPU:0) (?, 2)
inputs=Tensor("concat:0", shape=(?, 8), dtype=float32, device=/device:CPU:0)
x=[<tf.Tensor 'split:0' shape=(?, 1) dtype=float32>,
<tf.Tensor 'split:1' shape=(?, 1) dtype=float32>,
<tf.Tensor 'split:2' shape=(?, 1) dtype=float32>,
<tf.Tensor 'split:3' shape=(?, 1) dtype=float32>,
<tf.Tensor 'split:4' shape=(?, 1) dtype=float32>,
<tf.Tensor 'split:5' shape=(?, 1) dtype=float32>,
<tf.Tensor 'split:6' shape=(?, 1) dtype=float32>,
<tf.Tensor 'split:7' shape=(?, 1) dtype=float32>]
last outputs=Tensor("rnn/rnn/basic_lstm_cell/mul_23:0", shape=(?, 3), dtype=float32)
PREDICTION Tensor("add:0", shape=(?, 2), dtype=float32)
LOSS Tensor("mean_squared_error/value:0", shape=(), dtype=float32)
BROKEN:
X= 5 Tensor("Const:0", shape=(49, 10), dtype=float32, device=/device:CPU:0)
labels= Tensor("Const_5:0", shape=(49, 10), dtype=float32)
OUTPUTS Tensor("rnn/rnn/basic_lstm_cell/mul_14:0", shape=(49, 5), dtype=float32)
PREDICTIONS Tensor("add:0", shape=(49, 10), dtype=float32)
LABELS Tensor("Const_5:0", shape=(49, 10), dtype=float32)
LOSS Tensor("mean_squared_error/value:0", shape=(), dtype=float32)
以下是模型的代码,每个代码都相同:
lstm_cell = rnn.BasicLSTMCell(LSTM_SIZE, forget_bias=1.0)
outputs, _ = tf.nn.static_rnn(lstm_cell, x, dtype=tf.float32)
outputs = outputs[-1]
print('-->OUTPUTS', outputs)
weight = tf.Variable(tf.random_normal([LSTM_SIZE, N_OUTPUTS]))
bias = tf.Variable(tf.random_normal([N_OUTPUTS]))
predictions = tf.matmul(outputs, weight) + bias
print('-->PREDICTIONS', predictions)
print('-->LABELS', labels)
loss = tf.losses.mean_squared_error(labels, predictions)
print('-->LOSS', loss)
train_op = tf.contrib.layers.optimize_loss(loss=loss, global_step=tf.train.get_global_step(), learning_rate=0.01, optimizer="SGD")
eval_metric_ops = {"rmse": tf.metrics.root_mean_squared_error(labels, predictions)}
答案 0 :(得分:0)
TL; DR :在投放之前使用x = tf.split( x, 10, axis = -1 )
拆分x
。
<强> TS; WM 强>:
错误可能发生在tf.nn_static_rnn()
,代码的第二行(如果您发布了错误行号,那可能会很好):
outputs, _ = tf.nn.static_rnn(lstm_cell, x, dtype=tf.float32)
“破损”版本尝试输入形状为(49,10)的张量,而工作版本正在输入一个8个张量的列表,形状为(?,1)。文档说:
输入:输入的长度为T的列表,每个都是形状张量[batch_size,input_size]或这些元素的嵌套元组。
在上一行中,您使用tf.contrib.rnn.BasicLSTMCell.__init__()
定义lstm_cell
(可能是因为您的代码中省略了导入行),其中num_units
参数由{{1}填充(再次,从代码中省略):
LSTM_SIZE
所以你必须把你的鸭子连成一排。 lstm_cell = rnn.BasicLSTMCell(LSTM_SIZE, forget_bias=1.0)
必须是(batch_size,1)张量的列表,您可以使用tf.split()
来实现:
x
我假设10是您尝试提供的数据的长度,只是基于您粘贴的输出。