张量流 tf.keras.layers.Reshape RNN/LSTM

Tensorflow tf.keras.layers.Reshape RNN/LSTM

我有一个包含多个变量的数据集,我正在尝试重塑以输入 LSTM 神经网络,但我在重塑层上遇到困难但没有成功。

我的数据集的形状为 (1921535, 6),每 341 个时间步对应一个样本。我想重塑 (23, 341, 6) 并将其提供给模型。在我的代码下面。

def df_to_dataset(dataframe, batch_size):
   dataframe = dataframe.copy()
   labels = dataframe.pop('target')
   ds = tf.data.Dataset.from_tensor_slices((dict(dataframe), labels))
   ds = ds.batch(batch_size)
   return ds

max_length = 341
batch_size = 23

train_ds = df_to_dataset(data, batch_size * max_length)

model = tf.keras.Sequential([
   tf.keras.layers.Reshape((batch_size, max_length, 6), input_shape=(batch_size * max_length, 6)),
   tf.keras.layers.LSTM(40, return_sequences=True),
   tf.keras.layers.LSTM(40),
   tf.keras.layers.Dense(1)
   ])

当我 运行 代码时,我收到以下错误:

InvalidArgumentError: Input to reshape is a tensor with 54901 values, but the requested shape has 369075894 [Op:Reshape]

提前致谢

我无法重现你的错误:

max_length = 341
batch_size = 23

model = tf.keras.Sequential([
   tf.keras.layers.Reshape((batch_size, max_length, 6), input_shape=(batch_size * max_length, 6)),
   tf.keras.layers.LSTM(40, return_sequences=True),
   tf.keras.layers.LSTM(40),
   tf.keras.layers.Dense(1)
   ])

您的代码不正确:您的 Reshape 层的输出有 4 个维度(您的 3 个 dims 加上批次维度),但 LSTM 需要 3 个 dims。

我已经解决了使用 Lambda 层和 tf.reshape 的问题,我不知道为什么,但我不能使用重塑层。

model = tf.keras.Sequential([
   tf.keras.layers.Lambda(lambda x: tf.reshape(x, (-1, max_length, 6)),
   tf.keras.layers.LSTM(40, return_sequences=True),
   tf.keras.layers.LSTM(40),
   tf.keras.layers.Dense(1)
   ])