Модель потерь в Керасе - PullRequest
       24

Модель потерь в Керасе

0 голосов
/ 27 ноября 2018

Я делаю бинарную классификацию с Keras loss='binary_crossentropy', optimizer=tf.keras.optimizers.Adam, а последний уровень равен keras.layers.Dense(1, activation=tf.nn.sigmoid).

Как я знаю, значение loss используется для оценки модели на этапе обучения.Однако, когда я использую Keras оценку модели для моего набора данных тестирования (например, m_recall.evaluate(testData,testLabel), существуют также значения loss, сопровождаемые accuracy значениями, такими как вывод ниже

test size:  (1889, 18525)
1889/1889 [==============================] - 1s 345us/step
m_acc:  [0.5690245978371045, 0.9523557437797776]
1889/1889 [==============================] - 1s 352us/step
m_recall:  [0.24519687695911097, 0.9359449444150344]
1889/1889 [==============================] - 1s 350us/step
m_f1:  [0.502442331737344, 0.9216516675489677]
1889/1889 [==============================] - 1s 360us/step
metric name:  ['loss', 'acc']

Каково значение / использование loss во время тестирования? Почему оно такое высокое (например, 0.5690 в m_acc)? Оценка точности мне кажется хорошей (например, 0.9523 в m_acc), ноМеня тоже беспокоит loss, из-за этого моя модель плохо работает?

PS m_acc, m_recall и т. Д. - это только то, как я называю свои модели (они обучались по различным показателям в GridSearchCV)

Обновление: Я только что понял, что значения loss не в процентах, так как они рассчитываются? И с текущими значениями,они достаточно хороши или мне нужно их оптимизировать больше?

Предложения для дальнейшего чтения тоже приветствуются!

1 Ответ

0 голосов
/ 27 ноября 2018

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

Хотя эти метрики действительно понятны для нас, однако проблема заключается в том, что они не могут напрямую использоваться в процессе обучения наших моделей для настройки параметров модели.Вместо этого мы определяем другие показатели, которые обычно называются функциями потерь или целевыми функциями , которые могут непосредственно использоваться процессом обучения (т. Е. Оптимизацией).Эти функции обычно определяются так, что мы ожидаем, что когда их значения будут низкими, мы получим высокую точность.Вот почему вы обычно видите, что алгоритмы машинного обучения пытаются минимизировать функцию потерь с ожиданием повышения точности.Другими словами, модели косвенно обучаются путем оптимизации функций потерь.Значения потерь важны во время обучения модели, например, если они не уменьшаются или не колеблются, то это означает, что где-то есть проблема, которую необходимо исправить.

В результате, кем мы в конечном итоге являемся (т.е. когдатестирование модели), которое беспокоит, - это значение метрик (например, точности), которые мы изначально определили, и нас не волнует окончательное значение функций потерь.Вот почему вы не слышите такие вещи, как « значение потерь [конкретной модели] в наборе данных ImageNet равно 8,732»!Это ничего не говорит вам о том, хорошая модель, хорошая, плохая или ужасная.Скорее вы услышите, что «эта модель работает с 87% точностью в наборе данных ImageNet».

...