我使用keras数据增强来执行图像分类(十级图像)。最后一次训练时期的结果如下:
Epoch 50/50
4544/4545 [============================>.] - ETA: 0s - loss: 0.7628 - acc: 0.7359 loss: 0.762710434054
New learning rate: 0.00214407973866
4545/4545 [==============================] - 115s - loss: 0.7627 - acc: 0.7360 - val_loss: 0.5563 - val_acc: 0.8124
然后通过以下方式评估训练模型:
scores = model.evaluate_generator(test_generator,1514) #1514 testing images
print("Accuracy = ", scores[1])
它导致以下结果:
('Accuracy = ', 0.80713342132152621)
准确性与上一次训练时期的准确性不完全相同。我不明白其中的差异,即使它是微不足道的。
此外,model.predict_generator给出了完全不同的结果,如下所示:
array([[ 4.98306963e-06, 1.83774697e-04, 5.49453034e-05, ...,
9.25193787e-01, 7.74697517e-04, 5.79946618e-06],
[ 2.06657965e-02, 2.35974863e-01, 2.66802781e-05, ...,
2.16283044e-03, 8.42395966e-05, 2.46680051e-04],
[ 1.40222355e-05, 1.22740224e-03, 7.52218883e-04, ...,
3.76749843e-01, 3.85622412e-01, 6.47417846e-06],
...,
[ 9.94064331e-01, 1.30184961e-03, 1.08694976e-05, ...,
1.25828717e-06, 2.29093766e-05, 9.01326363e-04],
[ 7.10375488e-01, 2.01397449e-01, 3.10241080e-06, ...,
3.66877168e-10, 1.66322934e-05, 1.93767438e-08],
[ 8.13350256e-04, 2.67575349e-04, 6.79878794e-05, ...,
8.63052785e-01, 9.70983761e-04, 8.54507030e-04]], dtype=float32)
我不知道矩阵代表什么,以及model.evaluate_generator和model.predict_generator之间有什么区别。
注意,所得阵列的形状为1514×10。该阵列应该是每组测试图像的预测概率。如果是这样,如何根据结果计算混淆矩阵?
答案 0 :(得分:16)
df1['B'] = df1['A'].where(df1.A < df2.A, df2.A)
获取您的测试数据并为您提供输出。
predict_generator
使用您的测试输入和输出。它首先使用训练输入预测输出,然后通过将其与测试输出进行比较来评估性能。因此,它给出了一种性能指标,即您的情况下的准确性。
答案 1 :(得分:0)
要绘制混淆矩阵,您需要从sklearn中导入“ sayd”
from sklearn.metrics import confusion_matrix
import itertools
import matplotlib.pyplot as plt
要绘制混淆矩阵,test_labels,类(最后一个完全连接的层的输出数,即输出层)。看来您已经弄清楚了这一部分。接下来,您需要test_labels和预测都具有相同的维度,可以使用np.reshape和np.transpose获得所需的结果。对于语法和定义,您可以按照下面提到的链接
https://docs.scipy.org/doc/numpy/reference/generated/numpy.reshape.html
https://docs.scipy.org/doc/numpy/reference/generated/numpy.transpose.html
现在要绘制混淆矩阵,您可以使用sklearns文档中的代码
https://scikit-learn.org/stable/auto_examples/model_selection/plot_confusion_matrix.html
谢谢。希望对您有帮助。
答案 2 :(得分:0)
我有类似的问题,我解决了在生成器中设置shuffle = False的问题。 我的猜测是,如果火车批次不是多个元素,则不考虑最后一个不完整的批次,并且对随机排除的元素进行混洗会严重改变结果。