【问题标题】:How to merge/concatenate in CNN with same input data如何在具有相同输入数据的 CNN 中合并/连接
【发布时间】:2019-12-20 16:33:13
【问题描述】:

我想用 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

我尝试了 concatenate([model_1, model_2]),我收到了一条消息

A `Concatenate` layer should be called on a list of at least 2 inputs

我尝试了 concatenate([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】:

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

    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'])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-30
      • 2017-09-16
      • 2020-11-27
      • 2021-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-06
      相关资源
      最近更新 更多