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

Posted

技术标签:

【中文标题】Keras 功能 API:将 CNN 模型与 RNN 结合起来查看图像序列【英文标题】:Keras functional API: Combine CNN model with a RNN to to look at sequences of images 【发布时间】:2019-04-28 13:12:05 【问题描述】:

所以我遇到了一个问题,即如何在 Keras 中将 CNN 与 RNN 结合起来。在发布问题时,有人指出这是解决问题的正确方法。显然我只是忽略了原始代码中的一些东西,这让我回答了我自己的问题。

原来的问题如下:

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

为了更清楚:

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

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

输入数据格式如下: (number_of_images, width, height, channels) = (4000, 120, 60, 1)

【问题讨论】:

你可以简单地采用reshape操作:***.com/a/63789979/10375049 【参考方案1】:

这个问题的答案如下。

采用这个过度简化的 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...

【讨论】:

第二个代码块中,必须是rnn.add(GRU(64, return_sequences=False, input_shape=(120, 60)) 您能解释一下您在 main_input 行进行的数据重塑吗? 你能发布如何重塑 input_shape 吗?

以上是关于Keras 功能 API:将 CNN 模型与 RNN 结合起来查看图像序列的主要内容,如果未能解决你的问题,请参考以下文章

Keras:如何将 CNN 模型与决策树连接起来

Keras:CNN模型不是在学习

验证码是怎么被机器识别的?Keras+CNN模型验证码识别详解

将 CNN 模型代码从 Keras 转换为 Pytorch

Keras深度学习实战——使用卷积神经网络实现性别分类

小白学习kears教程四Keras基于数字数据集建立基础的CNN模型