[英]Tensorflow tf.keras.layers.Reshape RNN/LSTM
我有一個包含多個變量的數據集,我正在嘗試重塑以輸入 LSTM 神經網絡,但我在重塑層時遇到了困難,但沒有成功。
我的數據集的形狀為 (1921535, 6),每 341 個時間步對應一個樣本。 我想在 (23, 341, 6) 中重塑,並將其放入 Model 中。 在我的代碼下面。
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 層的 output 有 4 個維度(您的 3 個維度加上批量維度),但 LSTM 需要 3 個維度。
我已經使用帶有 tf.reshape 的 Lambda 層解決了這個問題,我不知道為什么,但我不能使用 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)
])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.