【问题标题】:Combining the outputs of multiple models into one model将多个模型的输出组合成一个模型
【发布时间】:2017-08-26 07:30:46
【问题描述】:

我目前正在寻找一种可以将多个模型的输出组合成一个模型的方法,我需要创建一个进行分类的 CNN 网络。

图像被分成几个部分(如颜色所示),每个部分作为某个模型的输入(1,2,3,4)每个模型的结构相同,但每个部分都给出到一个单独的模型,以确保不对整个图像应用相同的权重 - 我试图避免完全权重共享,并保持权重共享本地。然后每个模型执行卷积和最大池化,并生成某种输出,该输出必须馈送到密集层,该密集层从先前模型(模型 1、2、3、4)获取输出并执行分类。

我的问题是可以创建模型 1、2、3、4 并将其连接到全连接层,并在给定输入部分和输出类的情况下训练所有模型 - 无需定义keras中的卷积和池化层?

【问题讨论】:

    标签: classification keras conv-neural-network


    【解决方案1】:

    是的,您可以使用多输入和多输出模型创建此类模型,请参阅 keras documentation 了解更多详细信息。我在这里分享代码示例,希望对您有所帮助

    import numpy as np
    import keras
    from keras.optimizers import SGD
    from keras.models import Sequential, Model
    from keras.layers import Activation, Dense, Dropout, Flatten, Input, Merge, Convolution2D, MaxPooling2D
    
    # Generate dummy data
    train1 = np.random.random((100, 100, 100, 3))
    train2 = np.random.random((100, 100, 100, 3))
    train3 = np.random.random((100, 100, 100, 3))
    train4 = np.random.random((100, 100, 100, 3))
    
    y_train = keras.utils.to_categorical(np.random.randint(10, size=(100, 1)), num_classes=10)
    
    #parallel ip for different sections of image
    inp1 = Input(shape=train1.shape[1:])
    inp2 = Input(shape=train2.shape[1:])
    inp3 = Input(shape=train3.shape[1:])
    inp4 = Input(shape=train4.shape[1:])
    
    # paralle conv and pool layer which process each section of input independently
    conv1 = Conv2D(64, (3, 3), activation='relu')(inp1)
    conv2 = Conv2D(64, (3, 3), activation='relu')(inp2)
    conv3 = Conv2D(64, (3, 3), activation='relu')(inp3)
    conv4 = Conv2D(64, (3, 3), activation='relu')(inp4)
    
    maxp1 = MaxPooling2D((3, 3))(conv1)
    maxp2 =MaxPooling2D((3, 3))(conv2)
    maxp3 =MaxPooling2D((3, 3))(conv3)
    maxp4 =MaxPooling2D((3, 3))(conv4)
    
    # can add multiple parallel conv, pool layes to reduce size
    
    flt1 = Flatten()(maxp1)
    flt2 = Flatten()(maxp2)
    flt3 = Flatten()(maxp3)
    flt4 = Flatten()(maxp4)
    
    mrg = Merge(mode='concat')([flt1,flt2,flt3,flt4])
    
    dense = Dense(256, activation='relu')(mrg)
    
    op = Dense(10, activation='softmax')(dense)
    
    model = Model(input=[inp1, inp2, inp3, inp4], output=op)
    model.compile(optimizer='rmsprop',
                  loss='categorical_crossentropy',
                  metrics=['accuracy'])
    model.fit([train1,train2,train3,train4], y_train,
              nb_epoch=10, batch_size=28)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-24
      • 2019-04-19
      • 2018-08-28
      • 2013-07-16
      • 1970-01-01
      • 1970-01-01
      • 2018-02-18
      • 2015-04-18
      相关资源
      最近更新 更多