如何为ConvLSTM2D模型重构多变量时间序列数据



我使用的数据形状为(1000, 5, 7)。我将其重塑为(1000, 5, 7, 1)以满足ConvLSTM2D的需要。当用这个训练模型时,我得到了错误:

ValueError: Input 0 of layer "sequential_90" is incompatible with the layer: expected shape=(None, None, 5, 7, 1), found shape=(None, 5, 7, 1)

错误信息清晰。然而,我不知道如何重塑我的数据。

这是我使用的模型

model = Sequential()
model.add(ConvLSTM2D(filters=40, kernel_size=(3, 3), input_shape=(None, 5, 7, 1), padding='same', return_sequences=True))
model.add(BatchNormalization())
model.add(ConvLSTM2D(filters=40, kernel_size=(3, 3), padding='same', return_sequences=True))
model.add(BatchNormalization())
model.add(ConvLSTM2D(filters=40, kernel_size=(3, 3), padding='same', return_sequences=True))
model.add(BatchNormalization())
model.add(Conv3D(filters=1, kernel_size=(3, 3, 3), activation='softmax', padding='same', data_format='channels_last'))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
#model.summary()

如文档所述,您需要一个5D张量(samples, time, rows, cols, channels)。下面是您需要的数据形状的示例:

import tensorflow as tf
model = tf.keras.Sequential()
model.add(tf.keras.layers.ConvLSTM2D(filters=40, kernel_size=(3, 3), input_shape=(None, 5, 7, 1), padding='same', return_sequences=True))
model.add(tf.keras.layers.BatchNormalization())
model.add(tf.keras.layers.ConvLSTM2D(filters=40, kernel_size=(3, 3), padding='same', return_sequences=True))
model.add(tf.keras.layers.BatchNormalization())
model.add(tf.keras.layers.ConvLSTM2D(filters=40, kernel_size=(3, 3), padding='same', return_sequences=True))
model.add(tf.keras.layers.BatchNormalization())
model.add(tf.keras.layers.Conv3D(filters=1, kernel_size=(3, 3, 3), padding='same', data_format='channels_last'))
model.add(tf.keras.layers.GlobalAveragePooling3D())
model.add(tf.keras.layers.Dense(7, activation='softmax'))

model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
model.summary()
samples = 1
timesteps = 1
rows = 5
cols = 7 
channels = 1
model(tf.random.normal((samples, timesteps, rows, cols, channels))).shape

最新更新