Что означает значение categoryor_accuracy? категориальная точность 100%, но данные показывают неверный прогноз - PullRequest
1 голос
/ 11 июля 2019

При обучении значение Keras categoryorical_accuracy составляет 100%. Но те же самые обучающие данные, которые я сохранил, выводятся в файл, и показали несколько (на самом деле довольно много) данных, которые классифицированы как неправильные. Я проверил входной файл на наличие метки, и он правильный.

Что измеряет погрешность категории? Есть ли лучший показатель для отладки LSTM?

model = Sequential()
model.add(LSTM(64, batch_input_shape=(7763, TimeStep.TIME_STEP + 1, 10), return_sequences=True, activation='relu'))
model.add(LSTM(128, activation='relu', return_sequences=True))
model.add(LSTM(64, activation='relu', return_sequences=True))
model.add(LSTM(32, activation='relu'))
model.add(Dense(3, activation='softmax'))

model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=[categorical_accuracy])
history = model.fit(TimeStep.fodder, TimeStep.target, epochs=300, batch_size=7763)





Epoch 400/400

 7763/31052 [======>.......................] - ETA: 1s - loss: 2.7971e-04 - categorical_accuracy: 1.0000
15526/31052 [==============>...............] - ETA: 1s - loss: 3.0596e-04 - categorical_accuracy: 1.0000
23289/31052 [=====================>........] - ETA: 0s - loss: 3.0003e-04 - categorical_accuracy: 1.0000
31052/31052 [==============================] - 2s 78us/step - loss: 2.9869e-04 - categorical_accuracy: 1.0000

1 Ответ

0 голосов
/ 11 июля 2019

Из keras github repo у нас есть функция categorical_accuracy.

def categorical_accuracy(y_true, y_pred):
    return K.cast(K.equal(K.argmax(y_true, axis=-1),
                          K.argmax(y_pred, axis=-1)),
                  K.floatx())

Здесь мы можем видеть, что если позиция максимального значения y_true совпадает с y_predон возвращает 1, иначе 0. Точность 100% должна указывать, что позиция максимального значения y_true всегда совпадает с y_pred (позиция здесь - классы, поэтому всегда предсказывайте один и тот же класс).

Один из возможныхПричиной этого может быть то, что у вас есть только один выход (один двоичный класс).следовательно, позиция максимального значения всегда будет 0 для y_true и y_pred.

В этом случае используйте binary_accuracy вместо.

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