Как получить название класса, предсказанного обученной моделью keras для категориального вывода? - PullRequest
0 голосов
/ 02 мая 2020

У меня есть обученная модель CNN, которая должна предсказать одну из 5 эмоций: гнев, отвращение, страх, нейтральность или грусть. Я использую

ImageDataGenerator(rescale = 1./255,
                      shear_range=0.1,
                      zoom_range=0.1,
                      horizontal_flip=True)

и

low_from_directory('../large-dataset-copy/training/',
                            color_mode='grayscale',
                            target_size=(48,48),
                            class_mode = 'categorical',
                            batch_size = 32)

для чтения и преобразования изображений.

После обучения я не знаю, как извлечь соответствующий класс что предсказывает модель. Я использую следующий код для чтения и преобразования изображения:

def test_data(img_path):
    img_array = cv2.imread(img_path, cv2.IMREAD_GRAYSCALE)
    new_img = cv2.resize(img_array,(48,48))
    return new_img.reshape(-1,48,48,1)

img = test_data('Abdullah_Gul_0006.jpg')
emotionClassifier = k.models.load_model('moedel.h5',compile=False)
emotion = emotionClassifier.predict(img)
print(emotion)

, и это вывод, который я получаю всегда : [[0. 1. 0. 0. 0.]]

Также вывод из print (test_data.class_indices) равен { 'гнев': 0, 'отвращение': 1, «страх»: 2, «нейтральный»: 3, «грусть»: 4}

1 Ответ

0 голосов
/ 03 мая 2020

Поскольку для режима класса установлено значение "категорический" в методе flow_from_directory, результаты возвращаются в двумерном массиве меток с горячим кодированием. Результат, который вы получаете [0,1,0,0,0], означает, что метка изображения «отвращение», поскольку она является второй в списке class_indices.

Кстати, если вы используете последовательную модель для получения результатов вы должны использовать предикаты_классов вместо предикатов.

...