任何人都知道,如果我做得对,基本上我正在尝试创建一个CM,我已经得到了我的y_pred,显然我需要我的基本真理,或者这是我试图使用的testdata.classes (这就是他们在网上所做的,testdata是imagedatagenerator的一个实例),但是.classes似乎只是返回了我所有类的排序列表,而不是一个会腐蚀我预测的类的列表。因此,我认为我得到了一个非常不准确的CM。你知道我怎样才能得到我预测的真相吗?
这里是一个例子,我指的是ab,.classes,这个列表是按0到15的顺序排列的。我的模型是95%的准确率,所以我希望这些能更好地排列。
我希望y_pred和dataset.classes在95%的时间里是一样的

发布于 2022-11-12 09:04:55
这是一个常见的问题。
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)正如您所看到的,您需要在生成器上迭代,按批计算预测,在每个批处理上,您也可以访问真正的标签,因此您可以在某些列表中累积这两个标记,然后将它们组合起来以计算您想要的度量。
https://stackoverflow.com/questions/74367878
复制相似问题