Я создал классификатор для 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)]
.
Таким образом, после длительных lucubrations проблема была в последнем понимании списка, так как predictions
были массивом колонок столбцов, такими как [[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()
label_map = dict((v,k) for k,v in label_map.items()) #flip k,v
, типk
являетсяnumpy.ndarray
? Если это так, то просто говорится, что вы не можете использовать это в качестве ключа для словаря, потому что это не хэш-тип (для этого типа нет хеш-функции).