[英]Keras ValueError: Dimensions must be equal, but are 6 and 9 for '{{node Equal}}
[英]ValueError: Dimensions must be equal RNN - Keras
我正在构建一个具有不同 X 和 Y 长度的 RNN 模型。
从 NLP 我知道这应该是可能的(即 - 如果你有一个翻译模型,你将不会有相同长度的输入句子/单词和输出句子/单词......)
不幸的是,这对我不起作用,我收到以下错误:
ValueError: Dimensions must be equal, but are 3 and 405 for '{{node mean_absolute_error/sub}} = Sub[T=DT_FLOAT](sequential_47/time_distributed_46/Reshape_1, IteratorGetNext:1)' with input shapes: [?,3,1], [?,405,1].
(下面的完整错误)
我也在网上查了一下,发现 Chollet 本人似乎参与了这个帖子,并在 2021 年将其关闭,但那里的最后一条评论(2019 年)没有解决,并且和我有同样的问题。
我正在使用 google colab,因此很确定这不是旧版本的问题( tf.__version__ ==> 2.8.2
和tf.keras.__version__ ==> 2.8.0
我的模型是:
model_gru = Sequential()
model_gru.add(GRU(75, return_sequences=True,input_shape=(train_X.shape[1], train_X.shape[2])))# , unroll=True))
model_gru.add(GRU(units=30, return_sequences=True))
model_gru.add(TimeDistributed(Dense(1)))
model_gru.compile(loss='mae', optimizer='adam')
model_gru.summary()
gru_history = model_gru.fit(train_X, train_y, epochs=30, batch_size=64, validation_data=(test_X, test_y), shuffle=False)
知道如何解决这个问题吗?
完整错误:
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-212-1b00467cbad2> in <module>()
----> 1 gru_history = model_gru.fit(train_X, train_y, epochs=30, batch_size=64, validation_data=(test_X, test_y), shuffle=False, callbacks=[callback])
1 frames
/usr/local/lib/python3.7/dist-packages/keras/utils/traceback_utils.py in error_handler(*args, **kwargs)
65 except Exception as e: # pylint: disable=broad-except
66 filtered_tb = _process_traceback_frames(e.__traceback__)
---> 67 raise e.with_traceback(filtered_tb) from None
68 finally:
69 del filtered_tb
/usr/local/lib/python3.7/dist-packages/tensorflow/python/framework/func_graph.py in autograph_handler(*args, **kwargs)
1145 except Exception as e: # pylint:disable=broad-except
1146 if hasattr(e, "ag_error_metadata"):
-> 1147 raise e.ag_error_metadata.to_exception(e)
1148 else:
1149 raise
ValueError: in user code:
File "/usr/local/lib/python3.7/dist-packages/keras/engine/training.py", line 1021, in train_function *
return step_function(self, iterator)
File "/usr/local/lib/python3.7/dist-packages/keras/engine/training.py", line 1010, in step_function **
outputs = model.distribute_strategy.run(run_step, args=(data,))
File "/usr/local/lib/python3.7/dist-packages/keras/engine/training.py", line 1000, in run_step **
outputs = model.train_step(data)
File "/usr/local/lib/python3.7/dist-packages/keras/engine/training.py", line 860, in train_step
loss = self.compute_loss(x, y, y_pred, sample_weight)
File "/usr/local/lib/python3.7/dist-packages/keras/engine/training.py", line 919, in compute_loss
y, y_pred, sample_weight, regularization_losses=self.losses)
File "/usr/local/lib/python3.7/dist-packages/keras/engine/compile_utils.py", line 201, in __call__
loss_value = loss_obj(y_t, y_p, sample_weight=sw)
File "/usr/local/lib/python3.7/dist-packages/keras/losses.py", line 141, in __call__
losses = call_fn(y_true, y_pred)
File "/usr/local/lib/python3.7/dist-packages/keras/losses.py", line 245, in call **
return ag_fn(y_true, y_pred, **self._fn_kwargs)
File "/usr/local/lib/python3.7/dist-packages/keras/losses.py", line 1457, in mean_absolute_error
return backend.mean(tf.abs(y_pred - y_true), axis=-1)
ValueError: Dimensions must be equal, but are 3 and 405 for '{{node mean_absolute_error/sub}} = Sub[T=DT_FLOAT](sequential_47/time_distributed_46/Reshape_1, IteratorGetNext:1)' with input shapes: [?,3,1], [?,405,1].
RNN 单元需要相同长度的输入和标签。
RNN 为每个相应的输入生成一个输出。 无论您使用的是 RNN、GRU、LSTM 等,RNN 都会接收您的序列,然后从序列中的第一个元素开始,它会生成输出和隐藏状态。 它存储输出,然后传递隐藏状态和序列中的下一个元素,并生成下一个输出和新的隐藏状态。 一旦为序列中的所有元素完成此操作,它将为您提供每个时间步的输出和最终的隐藏状态。 所以输入的长度和标签的长度必须相同。
RNN 翻译的工作原理是对输入进行编码,然后将编码后的状态传递给解码器,该解码器按顺序对其进行解码。 即使用 RNN 的翻译不是由单个 RNN 完成整个工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.