predict_generator 生成的混淆矩阵精度和 evaluate_generator 返回精度相差巨大

在进行深度学习时,我采用flow_from_directory()进行数据集构建,我们可以采用evaluate_generator()函数可得到测试精度和损失率。使用predict_generator()函数可得到混淆矩阵。但在得到混淆矩阵时发现混淆矩阵与测试精度不符,甚至相差巨大。经过几天的辛苦查询,我终于发现居然是下面这个原因。同时附上代码和图片。

数据生成

flow_from_directory()的参数shuffle的意思是布尔值,是否随机打乱数据,默认为True,就是在使用时随机打乱数据,那么将会导致预测标签和真实标签位置对不上,因此一定要设置为"shuffle=False",这样才会得到正确的混淆矩阵。

#数据生成
test_generator = test_datagen.flow_from_directory(
 test_dir,
 target_size=(128, 128),
 batch_size=20,
 class_mode='categorical',
 shuffle=False)#这里一定要设置成False,如果设置成True就会出现文中提到的现象

测试精度

test_loss,test_acc = model.evaluate_generator(test_generator,steps=50)
print('test acc:', test_acc)
print('test loss:', test_loss)

混淆矩阵

import numpy as np
from keras.preprocessing.image import ImageDataGenerator
from keras.models import load_model
labels= test_generator.class_indices #查看类别的label
test_generator.reset()
pred=model.predict_generator(test_generator,verbose=1) #然后直接用predict_geneorator 可以进行预测   
predicted_class_indices=np.argmax(pred,axis=1) # 输出每个图像的预测类别    
true_label=test_generator.classes#测试集的真实类别
   
import pandas as pd
table=pd.crosstab(predicted_class_indices,true_label,colnames=['predict'],rownames=['label'])#画出混淆矩阵
print(table)

  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值