我有一个问题,输入作为图像序列,输出作为标签序列,这与图像中的每一帧相对应。输入格式如下图所示:
目标:根据输入序列列表[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
,并且与{
因此,我计划使用卷积神经网络(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
和{
我的模型能达到我的预期吗?
如果它是一个seq2seq问题,那么它看起来并没有涉及到“教师强迫”,如本文tutorial所示。在
有没有一种方法可以利用CNN编码空间信息和LSTM同时编码时间信息?就像CNN和编解码器LSTM的组合?在
欢迎任何意见!非常感谢你!在
您的模型很可能可以工作,但是您可以通过使用Bidirectional包装器来两种方式累积信息来改进LSTMs。您也不希望压缩第一个LSTM,并在标记每个图像时返回序列。在
CNN和LSTM的结合?Keras有一个ConvLSTM2D层,它将对输入和递归组件应用卷积。在
相关问题 更多 >
编程相关推荐