没有为任何变量LSTM自动编码器提供梯度



我正在尝试构建一个LSTM编码器。我正在MNIST数据集上测试它,以在实际数据集上使用它之前检查任何错误。我的代码:

import tensorflow as tf
from tensorflow import keras as K
from tensorflow.keras.datasets import mnist
from tensorflow.keras import layers
(x_train, y_train), (x_test, y_test) = mnist.load_data()
encoder_input = K.Input(shape=(x_train.shape[1], x_train.shape[2]))
layer1 = layers.LSTM(
units=64, return_sequences=True
)(encoder_input)
layer2, state1, state2 = layers.LSTM(
units=128, return_state=True,
)(layer1)
hidden_representations = layers.Dense(1024)(layer2)
encoder_state = [state1, state2]
rep_vec = layers.RepeatVector(n=x_train.shape[1])(hidden_representations)
decode_l1 = layers.LSTM(units=128, 
return_sequences=True)(rep_vec,
initial_state=encoder_state)
decode_l2 = layers.LSTM(units=64, return_sequences=True)(decode_l1)
decoder_out = layers.TimeDistributed(
layers.Dense(units=x_train.shape[2], activation="sigmoid")
)(decode_l2)
AE = K.Model(inputs=encoder_input, outputs=[decoder_out, 
hidden_representations])

到目前为止,一切看起来都很好,总结给了我正确的维度,当我在训练前尝试预测时,我得到了正确的输出。但是,一旦我试图将模型与我的数据相匹配,我就会收到以下错误消息:

AE.fit(x_train)
OUT:
ValueError: in user code:
/usr/local/lib/python3.7/dist-packages/tensorflow/python/keras/engine/training.py:855 train_function  *
return step_function(self, iterator)
/usr/local/lib/python3.7/dist-packages/tensorflow/python/keras/engine/training.py:845 step_function  **
outputs = model.distribute_strategy.run(run_step, args=(data,))
/usr/local/lib/python3.7/dist-packages/tensorflow/python/distribute/distribute_lib.py:1285 run
return self._extended.call_for_each_replica(fn, args=args, kwargs=kwargs)
/usr/local/lib/python3.7/dist-packages/tensorflow/python/distribute/distribute_lib.py:2833 call_for_each_replica
return self._call_for_each_replica(fn, args, kwargs)
/usr/local/lib/python3.7/dist-packages/tensorflow/python/distribute/distribute_lib.py:3608 _call_for_each_replica
return fn(*args, **kwargs)
/usr/local/lib/python3.7/dist-packages/tensorflow/python/keras/engine/training.py:838 run_step  **
outputs = model.train_step(data)
/usr/local/lib/python3.7/dist-packages/tensorflow/python/keras/engine/training.py:799 train_step
self.optimizer.minimize(loss, self.trainable_variables, tape=tape)
/usr/local/lib/python3.7/dist-packages/tensorflow/python/keras/optimizer_v2/optimizer_v2.py:530 minimize
return self.apply_gradients(grads_and_vars, name=name)
/usr/local/lib/python3.7/dist-packages/tensorflow/python/keras/optimizer_v2/optimizer_v2.py:630 apply_gradients
grads_and_vars = optimizer_utils.filter_empty_gradients(grads_and_vars)
/usr/local/lib/python3.7/dist-packages/tensorflow/python/keras/optimizer_v2/utils.py:76 filter_empty_gradients
([v.name for _, v in grads_and_vars],))
ValueError: No gradients provided for any variable: ['lstm_63/lstm_cell_63/kernel:0', 'lstm_63/lstm_cell_63/recurrent_kernel:0', 'lstm_63/lstm_cell_63/bias:0', 'lstm_64/lstm_cell_64/kernel:0', 'lstm_64/lstm_cell_64/recurrent_kernel:0', 'lstm_64/lstm_cell_64/bias:0', 'dense_27/kernel:0', 'dense_27/bias:0', 'lstm_65/lstm_cell_65/kernel:0', 'lstm_65/lstm_cell_65/recurrent_kernel:0', 'lstm_65/lstm_cell_65/bias:0', 'lstm_66/lstm_cell_66/kernel:0', 'lstm_66/lstm_cell_66/recurrent_kernel:0', 'lstm_66/lstm_cell_66/bias:0', 'time_distributed_15/kernel:0', 'time_distributed_15/bias:0'].

我正在Google Colab上运行此代码。我一直在寻找类似的问题,但似乎没有一个能解决我的问题。

您需要将x_train和y_train传递到fit语句中。

AE.fit(x_train, y_train)

否则,就没有可供训练的预期输出。

最新更新