我正在尝试创建一个 CM,我已经有了 y_pred,显然我需要我的基本事实,或者我正在尝试使用 testdata.classes (这是他们在网上所做的,testdata 是 imagedatagenerator 的实例)。
但是 .classes 似乎只是返回我所有类的排序列表,而不是与我的预测相对应的类列表。因此,我认为我得到的 CM 非常不准确。我怎样才能获得我的预测的基本事实?
这里是我对 .classes 的理解的一个例子,这个列表只是按 0-15 的顺序排列。顺便说一句,我的模型准确率为 95%,所以我希望这些能够更好地排列。
我希望 y_pred 和 dataset.classes 在 95% 的情况下是相同的。
这是一个常见问题。
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)
如您所见,您需要迭代生成器,按批次计算预测,并且在每个批次上您还可以访问真实标签,因此您可以将两者累积在某些列表上,然后将它们组合起来计算所需的指标.