У меня проблема с вводом в виде последовательности изображений и выводом в виде последовательности меток, которые соответствуют каждому кадру в изображении.Формат ввода показан ниже:
Цель: Прогнозировать список меток [label 0, label 1, label 2, label 3]
на основе спискапоследовательность ввода [img 0, img 1, img 2, img 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?
Вот мой код:
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 , она не выглядитздесь задействовано «принуждение учителя», как показано в этом уроке .
Есть ли способ использовать преимущества CNN для кодирования пространственной информации и LSTM для кодирования временной информации одновременно?Как комбинация CNN и кодера-декодера LSTM ?
Любые входные данные приветствуются!Большое спасибо!