2017-06-22 181 views
2

我正在尝试合并两个网络。我可以通过执行以下操作做到这一点:Keras - 合并图层 - Keras 2.0

merged = Merge([CNN_Model, RNN_Model], mode='concat') 

但我得到一个警告:

merged = Merge([CNN_Model, RNN_Model], mode='concat') 
__main__:1: UserWarning: The `Merge` layer is deprecated and will be removed after 08/2017. Use instead layers from `keras.layers.merge`, e.g. `add`, `concatenate`, etc. 

所以,我想这一点:

merged = Concatenate([CNN_Model, RNN_Model]) 
model = Sequential() 
model.add(merged) 

,并得到这个错误:

ValueError: The first layer in a Sequential model must get an `input_shape` or `batch_input_shape` argument. 

任何人都可以给我如何的语法我会得到这个工作?

+0

您能否给我们提供一个完整的模型定义? –

回答

1

不要对具有分支的模型使用顺序模型。

使用功能API:

from keras.models import Model 

你就在使用Concatenate层,但你必须通过“张量”来了。而你首先创建它,然后你输入张量称呼它(这就是为什么有两个括号):

concatOut = Concatenate()([CNN_Model.output,RNN_Model.output]) 

为了创建一个模型出来的,你需要从输入定义到输出的路径:

model = Model([CNN_Model.input, RNN_Model.input], concatOut) 

This answer assumes your existing models have only one input and output each.

+0

这真是太棒了,如果我想为这个模型添加更多图层呢?我试过这个:'model.add(Dense(22,activation ='softmax',name ='final_dense'))'它给了我'AttributeError:'Model'对象没有属性'add'' – Kevin

+0

创建图层并给它输入以获得输出:'denseOut = Dense(22,activation ='softmax',name ='final_dense')(concatOut)'---你的模型就像'model = Model([CNN_Model.input ,RNN_Model.input],denseOut)' –