我想用Keras连接具有相同输入数据的两个模型。
如何合并或连接两个模型?
我使用Keras,我想创建函数(def conbination():)
def conbination():
model_1 = Sequential()
model_1.add(Conv2D(filters=32, kernel_size=3, input_shape=input_shape))
model_1.add(Activation('relu'))
model_1.add(MaxPooling2D(pool_size=(64, 1)))
model_1.add(Flatten())
model_2 = Sequential()
model_2.add(Conv2D(filters=32, kernel_size=3, input_shape=input_shape))
model_2.add(Activation('relu'))
model_2.add(MaxPooling2D(pool_size=(1, 64)))
model_2.add(Flatten())
concat = concatenate([model_1 , model_2])
merged_model = Sequential()
merged_model.add(concat)
# merged_model.add(Activation('relu'))
merged_model.add(Dense(512))
merged_model.add(Activation('relu'))
merged_model.add(Dense(128))
merged_model.add(Activation('relu'))
# model.add(Dropout(0.5))
merged_model.add(Dense(num_classes, activation='softmax'))
merged_model.compile(loss='categorical_crossentropy',
optimizer='Adam', # sgd, #,
metrics=['accuracy'])
return merged_model
我尝试连接([model_1,model_2]),并收到一条消息
A `Concatenate` layer should be called on a list of at least 2 inputs
我尝试连接([model_1.output,model_2.output]),并收到一条消息
The added layer must be an instance of class Layer. Found:
Tensor("concatenate/concat:0", shape=(?, 8064), dtype=float32).
我已经对您的代码进行了一些更改,它现在必须可以运行,但是如果再次出现任何错误,请发表评论并告诉我,它将与您在一起。
from keras import Model , Sequential
from keras.layers.core import Dense, Activation
from keras.layers import Conv2D, Conv1D, MaxPooling2D, Reshape, Concatenate, Dropout , MaxPooling1D, Flatten
from keras.layers import Dense, Input
from keras.optimizers import Adam
model_1_in = input_shape_1
model_1 = Conv2D(32, kernel_size= 3, activation='relu')(model_1_in)
model_1 = MaxPooling1D(pool_size= (64,1))(model_1)
model_1 = Flatten()(model_1)
model_2_in = input_shape_2
model_2 = Conv2D(32, kernel_size= 3, activation='relu')(model_2_in)
model_2 = MaxPooling1D(pool_size= (1,64))(model_2)
model_2 = Flatten()(model_2)
concat = Concatenate()([model_1, model_2])
output = Dense(512, activation='relu')(concat)
output = Dense(128, activation='relu')(output)
output = Dense(9, activation='softmax')(output)
merged_model = Model(inputs=[model_1_in, model_2_in], outputs=[output])
merged_model.compile(loss='categorical_crossentropy', optimizer='Adam',metrics=['accuracy'])