Keras功能API:将CNN模型与RNN结合起来以查看图像序列

时间:2018-11-26 20:44:54

标签: keras time-series conv-neural-network recurrent-neural-network

因此,我对如何在Keras中将CNN与RNN结合存在一个疑问。在发布问题时,有人指出我这是解决问题的正确方法。显然,我只是忽略了原始代码中的某些内容,这使我回答了自己的问题。

原始问题如下:

您如何在Keras中创建一个模型,该模型以图像序列作为输入,而CNN会“查看”每个单独的图像,并将CNN输出的序列馈送到RNN中?

更清晰地说:

模型一:一个可查看单个图像的CNN。
模型二:一个RNN,位于模型一CNN输出的顺序上。

因此,例如CNN应该看到5张图像,并且CNN的5个输出的序列应该传递给RNN。

输入数据的格式如下:
(图片数,宽度,高度,通道数)=(4000,120,60,1)

1 个答案:

答案 0 :(得分:2)

这个问题的答案如下。

采用这种过于简化的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

请注意,为了便于阅读,省略了激活功能等。

现在剩下的就是结合这三个主要模型。

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...