Нейронные сети - уменьшение потери кросс-энтропии Softmax соответствует снижению точности

Обучаю нейронную сеть и использую Tensorflow. Моя функция стоимости:

cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=prediction, labels=y))

Обучение моей нейронной сети привело к снижению перекрестной энтропии потерь с ~ 170k до примерно 50, что является значительным улучшением. Между тем моя точность на самом деле стала немного хуже: с 3% до 2,9%. Эти тесты проводятся на обучающей выборке, поэтому о переобучении не может быть и речи.

Я рассчитываю точность просто следующим образом:

correct = tf.equal(tf.argmax(prediction, 1), tf.argmax(y, 1))
accuracy = tf.reduce_mean(tf.cast(correct, 'float'))
print('Accuracy:', accuracy.eval({x: batch_x, y: batch_y}))

Что могло быть причиной этого? Должен ли я использовать точность как функцию стоимости, поскольку что-то явно не так с перекрестной энтропией (softmax) в моем случае.

Я знаю, что существует похожий вопрос на этот в StackOverflow, но на этот вопрос так и не ответили полностью.


person kcilc    schedule 19.07.2017    source источник
comment
Сколько полных пробежек вы сделали? Вы запускали его только дважды? Если да, то, вероятно, это просто неудачный ход. Сколько у вас функций ввода и насколько велика ваша сеть? Применяете ли вы сигмовидную и / или другую функцию активации в качестве последней операции в вашей сети? Если вы, удалите его, потому что tenorflow автоматически применяет softmax. Попробуйте подтвердить некоторые из них и дайте нам обновленную информацию!   -  person Adam    schedule 20.07.2017
comment
У меня точно такая же проблема, вы разобрались? Моя потеря идет от высокой до очень низкой, но точность остается около 10% для 10-классной классификации.   -  person Aleksei Petrenko    schedule 10.09.2017
comment
Хорошо, в моем случае проблема была связана с инициализацией веса. Когда я начал использовать tf.contrib.layers.fully_connected с xavier инициализацией веса, проблема исчезла.   -  person Aleksei Petrenko    schedule 10.09.2017


Ответы (1)


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

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

Одна возможная ошибка может быть связана с загрузкой данных этикетки y. Точность 3% слишком низкая для большинства задач машинного обучения (кроме классификации изображений). Вы получите точность 3%, если будете случайным образом угадывать 33 метки. Неужели ваша проблема 33 мультиклассовая проблема классификации? В противном случае вы могли сделать что-то неправильно при создании данных batch_y (неправильный размер, несоответствие формы prediction, ...).

person koreyou    schedule 19.07.2017
comment
На самом деле да, моя проблема - 49 проблема классификации нескольких классов. Я проверил данные метки y, вроде нормально. - person kcilc; 19.07.2017
comment
Хорошо, но я все еще думаю, что это ошибка. Неправильное угадывание всех этикеток в 44 классификации мультиклассов дало мне потерю 164,37. Что-то не так с вашей потерей ~ 170k - person koreyou; 23.07.2017