Керас выводит вероятности вместо классов - PullRequest
0 голосов
/ 19 декабря 2018

Я пытаюсь реализовать простую нейронную сеть для мультиклассовой классификации в Керасе.Код:

model = Sequential()
model.add(Dense(512, input_dim = 55 , kernel_regularizer=l2(0.00001), 
activation = 'relu'))
model.add(Dense(8, activation = 'softmax'))

model.compile(loss = 'categorical_crossentropy' , optimizer = 'adam' , metrics = ['accuracy'] )

model.fit(X_train, dummy_y, epochs = 20, batch_size = 30, class_weight=class_weights)

У меня есть 55 функций, и я хочу предсказать один из 8 классов (0,1,2,3,4,5,6,7).Я также кодирую y_train следующим образом:

encoder = LabelEncoder()
encoder.fit(y_train)
encoded_Y = encoder.transform(y_train)
# convert integers to dummy variables (i.e. one hot encoded)
dummy_y = np_utils.to_categorical(encoded_Y)

Однако, когда я использую predict(), на выходе получается массив для вероятности каждого класса:

array([[3.3881092e-01, 2.6201099e-06, 1.9504215e-03, ..., 7.0641324e-02,
    4.4026113e-01, 1.2641836e-02],
   [2.3457911e-02, 5.5409328e-04, 2.8759112e-05, ..., 2.1585675e-03,
    5.5625242e-01, 1.0208529e-01],
   [4.6981460e-01, 2.0882198e-05, 1.4895502e-01, ..., 1.3179567e-01,
    2.2908358e-01, 1.4160757e-03],
   ...

Как следуетЯ изменяю сеть, чтобы вывести класс с наибольшей вероятностью?Как это:

[[0,5,7,3,2,0,0,.....]]

1 Ответ

0 голосов
/ 19 декабря 2018

Вы можете просто использовать метод predict_classes:

preds_classes = model.predict_classes(X_test)

Те числа, которые вы видите в качестве результата метода predict, представляют собой оценку вероятности или достоверности каждого класса.Поэтому в качестве альтернативного решения можно взять индекс максимальной оценки, который соответствует прогнозируемому классу:

import numpy as np

probs = model.predict(X_test)
classes = np.argmax(probs, axis=-1)
...