首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >凯拉斯: model.evaluate_generator和model.predict_generator有什么区别?

凯拉斯: model.evaluate_generator和model.predict_generator有什么区别?
EN

Stack Overflow用户
提问于 2016-11-13 00:21:13
回答 3查看 27.4K关注 0票数 18

我使用keras数据增强来执行图像分类(十类图像)。最后一个训练时期给出了如下结果:

代码语言:javascript
运行
复制
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

然后通过以下方法评估训练后的模型:

代码语言:javascript
运行
复制
scores = model.evaluate_generator(test_generator,1514) #1514 testing images
print("Accuracy = ", scores[1])

它会导致以下结果:

代码语言:javascript
运行
复制
('Accuracy = ', 0.80713342132152621)

精度与上一个训练时期获得的精度不完全相同。我不明白其中的区别,即使它是边缘的。

此外,model.predict_generator给出了完全不同的结果,它是一个如下所示的数组:

代码语言:javascript
运行
复制
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的形状。该阵列应该是该组测试图像的每个类别处的预测概率。如果是这样,如何根据结果计算混淆矩阵?

EN

回答 3

Stack Overflow用户

发布于 2016-11-15 00:05:55

predict_generator获取您的测试数据并给出输出。

evaluate_generator同时使用您的测试输入和输出。它首先使用训练输入预测输出,然后通过将其与测试输出进行比较来评估性能。因此,它给出了性能的衡量标准,即在您的情况下的准确性。

票数 33
EN

Stack Overflow用户

发布于 2019-09-03 03:44:22

我也遇到过类似的问题,我解决了生成器中的shuffle = False问题。我的猜测是,如果训练批次不是元素的倍数,则不考虑最后一个不完整的批次,并且已经洗牌排除的元素是随机的,并且结果是直接改变的。

票数 0
EN

Stack Overflow用户

发布于 2019-07-29 20:25:13

要绘制混淆矩阵,您需要从sklearn导入上述

代码语言:javascript
运行
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40564936

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档