如何在CNN中使用相同的输入数据进行合并/连接

问题描述 投票:0回答:1

我想用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).
keras merge concat
1个回答
0
投票

我已经对您的代码进行了一些更改,它现在必须可以运行,但是如果再次出现任何错误,请发表评论并告诉我,它将与您在一起。

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'])
© www.soinside.com 2019 - 2024. All rights reserved.