使用Keras ImageDataGenerator预测进行索引会产生无法散列的类型错误

时间:2018-08-04 05:09:32

标签: python indexing keras

我为ImageDataGenerator创建了一个分类器,该分类器是使用flow_from_directory创建的,例如:

training_imGenProp = ImageDataGenerator(
    rescale=1. / 255,
    width_shift_range=0.02,
    height_shift_range=0.02,
)

training_imGen = training_imGenProp.flow_from_directory(
    'Location/to/train/images',
    target_size=(74, 448),
    batch_size=batchSize,
    class_mode='binary',
)

运行它时,我在以下代码段的最后一行得到TypeError: unhashable type: 'numpy.ndarray'

predictions = classifier.predict_generator(testing_imGen)
predictions = (predictions >= 0.5).astype(int)
label_map = (training_imGen.class_indices)
inverted_label_map = dict((v, k) for k, v in label_map.items())  #flip k,v
predictions = [label_map[k] for k in predictions]

可能是什么原因造成的?

另外,我应该如何继续从该分类器结果生成混淆矩阵?

此:

tn, fp, fn, tp = confusion_matrix(label_map, predictions).ravel()

引发错误ValueError: Found input variables with inconsistent numbers of samples: [2,(663, 1)]

1 个答案:

答案 0 :(得分:2)

因此,经过长时间的摸索,问题出在最后的列表理解之内,因为predictions是一个列numpy数组,例如[[1],[1],[0], ..., [0]]

因此只需访问以下内容中的整数值:

textual_predictions = [s_label_map[k] for k in predictions.T[0]]

另外,创建混淆矩阵时出现了另一个错误,该错误输入的变量是错误的:

tn, fp, fn, tp = confusion_matrix(testing_imGen.classes, predictions.T[0]).ravel()