keras: Как сопоставить прогноз с метками? - PullRequest
0 голосов
/ 02 ноября 2019

Я тренировал модель керас. Перед тренировкой я использовал LabelBinarizer от skelarn, чтобы отобразить метку каждого изображения на вектор вероятности. Всего их 120, поэтому каждый вектор вероятности имеет 120 значений.

Так что теперь, когда я использую модель для прогнозирования, я получу вектор вероятности.

Как мне сопоставить этот вектор сэтикетки? Я думаю, что мне нужно использовать LabelBinarizer, поскольку он инкапсулирует знание меток. Но я не уверен, как это сделать?

1 Ответ

1 голос
/ 02 ноября 2019

Скажем, у нас есть 6 точек данных с 3 уникальными классами (в вашем случае 120 уникальных классов)

from sklearn import preprocessing
lb = preprocessing.LabelBinarizer()
Y = ["l1", "l2", "l3", "l3", "l2", "l2", "l1"]
Y_bin = lb.fit_transform(Y) # label binarizer will convert it to a 0/1's
print(Y_bin)

Y_bin будет выглядеть следующим образом

array([[1, 0, 0],
       [0, 1, 0],
       [0, 0, 1],
       [0, 0, 1],
       [0, 1, 0],
       [0, 1, 0],
       [1, 0, 0]])

The LabelBinarizer будет знать, какие метки были помечены как l1, l2 или l3. Сверху мы видим, что l1 обозначено [1,0,0], l2 как [0,1,0] и l3 как [0,0,1]. это отразится в атрибуте .classes_ LabelBinarizer, который будет - print(lb.classes_)

array(['l1', 'l2', 'l3'], dtype='<U2')

Так что теперь скажем, что ваш результат для 2 пунктов был -

out = np.array([[.75, .2, .05]
              , [.3, .02, .68]])

ДляВ первой точке модель выбрала первую метку, а для второй точки - метку 3

. Эти метки можно выбрать с помощью приведенного ниже кода -

max_idx = out.argmax(axis=1) #get the indexes for the max probabilities
out_labels = [lb.classes_[i] for i in max_idx]
print(out_labels)

Это даст метки -

['l1', 'l3']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...