簡體   English   中英

Tensorflow tf.keras.layers.Reshape RNN/LSTM

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM