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 结合起来查看图像序列的主要内容,如果未能解决你的问题,请参考以下文章