验证和预测VGG19模型的准确性没有提高

时间:2020-11-06 11:32:12

标签: python tensorflow machine-learning keras vgg-net

您好,我正在使用VGG19从kaggle数据集(https://www.kaggle.com/c/diabetic-retinopathy-detection)中的图像中检测出糖尿病性视网膜病变,我已经用高斯滤波器对图像进行了预处理,并将它们的大小调整为224 x 224 x 3,然后通过他们将其转换为带有训练图像= 5760和验证图像= 640的vgg19模型。我得到的训练准确度为100%,但验证准确度未超过60%,模型完成后的预测准确度为50%。 这是我的模型代码:

    for count in range(6):
    print("*************************************************************************************************")
    print("******************************************************Fold " + str(count))

    trainDirectory = "Folds/Fold" + str(count) + "-Train"
    testDirectory = "Folds/Fold" + str(count) + "-Test"
    trdata = ImageDataGenerator()
    traindata = trdata.flow_from_directory(class_mode = 'binary' , batch_size= 64, directory= trainDirectory , target_size=(224, 224))
    tsdata = ImageDataGenerator()
    testdata = tsdata.flow_from_directory(class_mode = 'binary' , batch_size=64, directory= testDirectory, target_size=(224, 224))

    from keras.applications.vgg19 import VGG19
    vggmodel = VGG19(weights='imagenet', include_top=True, input_shape=(224, 224, 3))

    for layers in (vggmodel.layers)[:19]:
        layers.trainable = False

    X = vggmodel.layers[-2].output
    predictions = Dense(1, activation="sigmoid")(X)
    model_final = Model(vggmodel.input, predictions)

    opt = keras.optimizers.Adam(learning_rate=0.0001)
    model_final.compile(loss="binary_crossentropy", optimizer=opt,
                        metrics=["accuracy"])

    from keras.callbacks import ModelCheckpoint, EarlyStopping
    checkpoint = ModelCheckpoint("vgg19_1.h5", monitor='val_accuracy', verbose=1, save_best_only=True,
                                 save_weights_only=False, mode='auto', period=1)
    early = EarlyStopping(monitor='val_accuracy', min_delta=0, patience=50, verbose=1, mode='auto')
    h = model_final.fit_generator(generator=traindata, steps_per_epoch= int(5760 / 64), epochs= 10 , validation_data=testdata,
                              validation_steps= int(640 / 64) , callbacks=[checkpoint, early])

    modelHistory.append(h.history)
    model_final.save_weights("vgg19_1.h5")
    model_final.save('vgg19_1.h5')
    model = load_model('vgg19_1.h5')

    model.compile(optimizer=opt, loss='binary_crossentropy', metrics=['accuracy'])


    predict_datagen = ImageDataGenerator()

    predict_generator = predict_datagen.flow_from_directory(
        "Validation",
        class_mode= None,
        target_size=(224, 224),
    )

    pred = model.predict_generator(predict_generator)

    y_pred = np.argmax(pred, axis=1)
    print('Confusion Matrix')
    print(confusion_matrix(predict_generator.classes, y_pred))
    print('Classification Report')
    target_names = ['0', '1']
    print(classification_report(predict_generator.classes, y_pred, target_names=target_names))

    l = len(y_pred)
    acc = sum([y_pred[i]==predict_generator.classes[i] for i in range(l)])/l
    print(acc)
    predictedAccuracy.append(acc)

这是我得到的准确性: enter image description here

这是精度/损耗的图 enter image description here

0 个答案:

没有答案