尝试使用argmax预测标签时发生TypeError

时间:2020-07-07 20:00:27

标签: tensorflow keras

我成功地遵循了this迁移学习教程,将自己的分类器分为“印象主义”和“现代主义”两个类。

现在尝试使用this线程的建议为我的测试图像获取标签:

y_prob = model.predict(new_image)
y_prob

(gives this output) array([[3.1922062e-04, 9.9968076e-01]], dtype=float32)

y_classes = y_prob.argmax(axis=-1)
y_classes
(gives this output) array([1])

# create a list containing the class labels
labels = ['modernism', 'impressionism']
predicted_label = sorted(labels)[y_classes]

结果错误:

"TypeError                                 Traceback (most recent call last)
<ipython-input-35-571175bcfc65> in <module>()
      1 # create a list containing the class labels
      2 labels = ['modernism', 'impressionism']
----> 3 predicted_label = sorted(labels)[y_classes]

TypeError: only integer scalar arrays can be converted to a scalar index"

我做错了什么?访问测试图像的文本标签(及其概率)的正确方法是什么?如果我了解数组预测,则可以从图像文件夹中识别出两个类别。

非常感谢您有时间提供帮助!

1 个答案:

答案 0 :(得分:1)

这里发生的是y_prob.argmax(axis=-1)返回的数组值为[1]。只有numpy数组才能使用列表进行索引/拼接。

该问题是由于sorted方法引起的,我在测试中没有考虑到这一点。即使输入数组的类型为np.ndarray,输出也会变成一个列表。

所以:

labels = ['modernism', 'impressionism']
predicted_label = numpy.array(sorted(labels))[y_classes]

labels = numpy.array(['modernism', 'impressionism'])
labels.sort()
predicted_label = labels[y_classes]