imagedatagenorator 的 .classes 方法是否已排序?

问题描述 投票:0回答:1

我正在尝试创建一个 CM,我已经有了 y_pred,显然我需要我的基本事实,或者我正在尝试使用 testdata.classes (这是他们在网上所做的,testdata 是 imagedatagenerator 的实例)。

但是 .classes 似乎只是返回我所有类的排序列表,而不是与我的预测相对应的类列表。因此,我认为我得到的 CM 非常不准确。我怎样才能获得我的预测的基本事实?

这里是我对 .classes 的理解的一个例子,这个列表只是按 0-15 的顺序排列。顺便说一句,我的模型准确率为 95%,所以我希望这些能够更好地排列。

我希望 y_pred 和 dataset.classes 在 95% 的情况下是相同的。

python tensorflow machine-learning conv-neural-network imagedatagenerator
1个回答
0
投票

这是一个常见问题。

generator.classes
不应该用作真实标签,因为它们的排序方式与您获得预测的方式不同。因此,您计算的任何指标都将是错误的。

一个通用且正确的方法是迭代生成器,假设它是

Sequence
的子类:

all_y_pred = []
all_y_true = []

for i in range(len(generator)):
    x, y = generator[i]
    y_pred = model.predict(x)
    
    all_y_pred.append(y_pred)
    all_y_true.append(y)

all_y_pred = np.concatenate(all_y_pred, axis=0)
all_y_true = np.concatenate(all_y_true, axis=0)

metric = compute_your_metric(all_y_true, all_y_pred)

如您所见,您需要迭代生成器,按批次计算预测,并且在每个批次上您还可以访问真实标签,因此您可以将两者累积在某些列表上,然后将它们组合起来计算所需的指标.

© www.soinside.com 2019 - 2024. All rights reserved.