【问题标题】:is the .classes method of a imagedatagenorator sorted?imagedatagenerator 的 .classes 方法是否已排序?
【发布时间】:2022-11-12 17:24:42
【问题描述】:
任何人都知道我这样做是否正确,基本上我正在尝试创建一个 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】:
这是一个常见的问题。
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)
如您所见,您需要迭代生成器,按批次计算预测,并且在每个批次上您还可以访问真实标签,因此您可以在某些列表上累积这两个标签,然后将它们组合起来计算您想要的指标。