Ответ на этот вопрос заключается в следующем.
Возьмем эту упрощенную модель 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...