代码之家  ›  专栏  ›  技术社区  ›  AaronDT

使用分类报告评估Keras模型

  •  0
  • AaronDT  · 技术社区  · 7 年前

    问题是:

    在训练期间,我的模特表现得很好。然而,来自sklearn的分类报告的结果显示精确度、召回率和f1几乎处处为零。我做错了什么,把训练成绩和推理能力搞得如此不匹配?(我将Keras与TensorFlow后端一起使用。)

    我的代码:

    valiation_split

    train_datagen = ImageDataGenerator(
    rescale=1. / 255, validation_split=0.15)
    
    train_generator = train_datagen.flow_from_directory(
    train_data_dir,
    target_size=(img_height, img_width),
    batch_size=batch_size,
    class_mode='categorical', subset="training")
    
    validation_generator = train_datagen.flow_from_directory(
    train_data_dir,
    target_size=(img_height, img_width),
    batch_size=batch_size,
    class_mode='categorical', subset="validation", shuffle=False)
    

    我准备好了 shuffle=False

    接下来,我对我的模型进行如下训练:

    history = model.fit_generator(
        train_generator,
        steps_per_epoch=nb_train_samples // batch_size,
        epochs=epochs,
        validation_data=validation_generator,
        validation_steps=nb_validation_samples // batch_size,
        verbose=1)
    

    表现不错:

    Epoch 1/5
    187/187 [==============================] - 44s 233ms/step - loss: 0.7835 - acc: 0.6744 - val_loss: 1.2918 - val_acc: 0.6079
    Epoch 2/5
    187/187 [==============================] - 42s 225ms/step - loss: 0.7578 - acc: 0.6901 - val_loss: 1.2962 - val_acc: 0.6149
    Epoch 3/5
    187/187 [==============================] - 40s 216ms/step - loss: 0.7535 - acc: 0.6907 - val_loss: 1.3426 - val_acc: 0.6061
    Epoch 4/5
    187/187 [==============================] - 41s 217ms/step - loss: 0.7388 - acc: 0.6977 - val_loss: 1.2866 - val_acc: 0.6149
    Epoch 5/5
    187/187 [==============================] - 41s 217ms/step - loss: 0.7282 - acc: 0.6960 - val_loss: 1.2988 - val_acc: 0.6297
    

    https://github.com/keras-team/keras/issues/2607#issuecomment-302365916

    validation_steps_per_epoch = np.math.ceil(validation_generator.samples / validation_generator.batch_size)
    
    predictions = model.predict_generator(validation_generator, steps=validation_steps_per_epoch)
    # Get most likely class
    predicted_classes = np.argmax(predictions, axis=1) 
    
    true_classes = validation_generator.classes
    class_labels = list(validation_generator.class_indices.keys())  
    

    最后,我使用以下方法输出分类报告:

    from sklearn.metrics import classification_report
    report = classification_report(true_classes, predicted_classes, target_names=class_labels)
    print(report)    
    

    结果全是零(见平均值)。以下内容):

                       precision    recall  f1-score   support
          micro avg       0.01      0.01      0.01      2100
          macro avg       0.01      0.01      0.01      2100
       weighted avg       0.01      0.01      0.01      2100
    
    0 回复  |  直到 7 年前
    推荐文章