python - 如何为 ConvLSTM2D 模型 reshape 多元时间序列数据

标签 python tensorflow keras conv-neural-network lstm

我使用的数据形状为(1000, 5, 7)。我已将其 reshape 为 (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)

错误信息很清楚。但是,我不知道如何 reshape 我的数据。

这是我正在使用的模型

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()

最佳答案

作为docs状态,您需要一个 5D 张量(样本、时间、行、列、 channel )。以下是您需要的数据形状的示例:

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

关于python - 如何为 ConvLSTM2D 模型 reshape 多元时间序列数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72822576/

相关文章:

tensorflow - 在序列模型中使用填充时,Keras 验证准确性是否有效/可靠?

python - 如何向keras添加自定义指标? (平均绝对误差百分比)

python - Conda 4.03 更新 MD5 和不匹配

python - 图像的牛眼图

python - 在 Keras 中复制 RegisterGradient 和 gradient_override_map

tensorflow - 使用 TPU 在 Google Colab 上训练目标检测模型

python - 复制特定层的权重 - keras

python - 替换文本中的字符串并忽略某些部分

Python如何在处理完类对象后释放内存?

tensorflow - 失败前提条件错误 : Attempting to use uninitialized value Adam/lr