并行DenseNet

时间:2018-04-20 01:55:51

标签: deep-learning keras conv-neural-network

我从https://github.com/flyyufelix/cnn_finetune获取代码并对其进行了重新设计,以便现在有两个并行的DenseNet-121,每个模型的最后一个全局平均值集合后的图层被移除。

两个模型都是这样连接在一起的:

print("Begin model 1")
    model = densenet121_model(img_rows=img_rows, img_cols=img_cols, color_type=channel, num_classes=num_classes)
    print("Begin model 2")
    model2 = densenet121_nw_model(img_rows=img_rows, img_cols=img_cols, color_type=channel, num_classes=num_classes)

    mergedOut = Add()([model.output,model2.output])
    #mergedOut = Flatten()(mergedOut)    
    mergedOut = Dense(num_classes, name='cmb_fc6')(mergedOut)
    mergedOut = Activation('softmax', name='cmb_prob')(mergedOut)

    newModel = Model([model.input,model2.input], mergedOut)

    adam = Adam(lr=1e-3, decay=1e-6, amsgrad=True)
    newModel.compile(optimizer=adam, loss='categorical_crossentropy', metrics=['accuracy'])

    # Start Fine-tuning
    newModel.fit([X_train,X_train], Y_train,
              batch_size=batch_size,
              nb_epoch=nb_epoch,
              shuffle=True,
              verbose=1,
              validation_data=([X_valid,X_valid],Y_valid)
              )

第一个模型的图层被冻结,并且平行的模型可以在第一个模型的基础上学习额外的特征,从而提高准确性。

然而,即使在100个时代, 训练准确率几乎达到100%,但验证浮动率约为9%。

我不太确定可能是什么原因以及如何解决它,考虑到我已经从SGD更改了优化器(相同的概念,2个密集网络,第一个训练在ImageNet上,第二个没有权重开始相同的结果)到亚当(2个密集网,都在图像网上预先训练过。)

Epoch 101/1000
1000/1000 [==============================] - 1678s 2s/step - loss: 0.0550 - acc: 0.9820 - val_loss: 12.9906 - val_acc: 0.0900
Epoch 102/1000
1000/1000 [==============================] - 1703s 2s/step - loss: 0.0567 - acc: 0.9880 - val_loss: 12.9804 - val_acc: 0.1100

0 个答案:

没有答案