【发布时间】:2026-01-02 16:55:01
【问题描述】:
我有一个问题,输入为图像序列,输出为标签序列,这些标签对应于图像中的每一帧。输入格式如下图:
目标:根据输入序列[img 0, img 1, img 2, img 3] 的列表预测标签列表[label 0, label 1, label 2, label 3]。训练模型的输出应该是:
P([label 0, label 1, label 2, label 3]/[img 0, img 1, img 2, img 3]).
label 0 依赖于img 0,也与img 1, img 2 and img 3 相关。其他标签也取决于输入序列中的所有图像。因此,这使得目标标签同时依赖于每幅图像中的空间信息和时间信息。
因此,我计划使用卷积神经网络 (CNN) 对每个 img 的空间信息进行编码。同时,如何用 LSTM 编码 img 序列的时间信息?
这是我的代码:
from keras.models import Sequential, Model
from keras.layers import Dense, Conv2D, LSTM, Flatten, TimeDistributed, RepeatVector
from keras.layers.normalization import BatchNormalization
def cnn_lstm():
model = Sequential()
# CNN module
model.add(TimeDistributed(Conv2D(filters = 8,
kernel_size = (2, 2),
padding = 'same',
activation='relu',
name = 'Conv_1'),
input_shape = (None, img_height, img_width, channels)))
model.add(TimeDistributed(BatchNormalization(name='BN_1')))
model.add(TimeDistributed(MaxPooling2D()))
model.add(TimeDistributed(Conv2D(filters = 8,
kernel_size = (2, 2),
padding = 'same',
activation='relu',
name = 'Conv_2')))
model.add(TimeDistributed(BatchNormalization(name='BN_2')))
model.add(TimeDistributed(MaxPooling2D()))
# Flatten all features from CNN before inputing them into LSTM
model.add(TimeDistributed(Flatten()))
# LSTM module
model.add(LSTM(50))
model.add(RepeatVector(output_seq_length))
model.add(LSTM(50, return_sequences=True, name = 'decoder'))
model.add(TimeDistributed(Dense(nb_classes, activation='softmax')))
model.compile(loss='categorical_crossentropy', optimizer='rmsprop', metrics=['accuracy'])
return model
在此示例中为output_seq_length = 4 和nb_classes = 4。
我的模型能达到我的预期吗?
如果是 seq2seq 问题,看起来并不涉及“教师强迫”,如 tutorial 所示。
有没有办法同时利用 CNN 编码空间信息和 LSTM 编码时间信息?像 CNN 和编码器-解码器 LSTM 的组合?
欢迎任何意见!非常感谢!
【问题讨论】:
标签: python keras deep-learning lstm convolutional-neural-network