Функциональный API-интерфейс Keras: объединение модели CNN с RNN для просмотра последовательностей изображений - PullRequest
0 голосов
/ 26 ноября 2018

Так что я застрял с вопросом о том, как объединить CNN с RNN в Керасе.Во время публикации вопроса кто-то указал мне, что это правильный подход к проблеме.Видимо, я просто что-то упустил из исходного кода, что заставило меня ответить на мой собственный вопрос.

Исходная проблема заключается в следующем:

Как создать модель в Keras, в которой в качестве входных данных используются последовательности изображений, причем CNN «смотрит» на каждое отдельное изображение и последовательностьвыход CNN подается в RNN?

Чтобы сделать его более понятным:

Модель первая: CNN, которая смотрит на отдельные изображения.
Модель два: RNN, которая в последовательностяхо выходе CNN из модели один.

Так, например, CNN должен видеть 5 изображений, и эта последовательность из 5 выходных сигналов из CNN должна быть передана в RNN.

Входные данные в следующем формате:
(number_of_images, ширина, высота, каналы) = (4000, 120, 60, 1)

1 Ответ

0 голосов
/ 27 ноября 2018

Ответ на этот вопрос заключается в следующем.

Возьмем эту упрощенную модель CNN:

cnn = Sequential()
cnn.add(Conv2D(16, (50, 50), input_shape=(120, 60, 1)))

cnn.add(Conv2D(16, (40, 40)))

cnn.add(Flatten()) # Not sure if this if the proper way to do this.

Тогда есть простая модель RNN:

rnn = Sequential()

rnn = GRU(64, return_sequences=False, input_shape=(120, 60))

, которая должна быть подключена к плотной сети:

dense = Sequential()
dense.add(Dense(128))
dense.add(Dense(64))

dense.add(Dense(1)) # Model output

Обратите внимание, что функции активации и тому подобное были оставлены для удобства чтения.

Теперь все, что осталось, - это объединить эти 3 основные модели.

main_input = Input(shape=(5, 120, 60, 1)) # Data has been reshaped to (800, 5, 120, 60, 1)

model = TimeDistributed(cnn)(main_input) # this should make the cnn 'run' 5 times?
model = rnn(model) # combine timedistributed cnn with rnn
model = dense(model) # add dense

Тогда наконец

final_model = Model(inputs=main_input, outputs=model)

final_model.compile...
final_model.fit...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...