Семантическая сегментация тензорного потока дает нулевые потери
Я тренирую модель для сегментации машинного печатного текста из изображений. Изображения могут содержать штрих-коды и рукописный текст также. Основополагающие изображения обрабатываются так, что 0 представляет машинную печать, а 1 представляет оставшиеся. И я использую 5-слойный CNN с расширением, который выводит 2 карты в конце.
И моя потеря рассчитывается следующим образом:
def loss(logits, labels):
logits = tf.reshape(logits, [-1, 2])
labels = tf.reshape(labels, [-1])
cross_entropy = tf.nn.sparse_softmax_cross_entropy_with_logits(logits=logits, labels=labels)
cross_entropy_mean = tf.reduce_mean(cross_entropy, name='cross_entropy')
И у меня есть некоторые изображения, которые содержат только рукописный текст, и соответствующие им основные истины являются пустыми страницами, которые представлены цифрами 1.
Когда я тренирую модель, для этих изображений я получаю потерю 0 и точность обучения 100%. Это правильно? Как эта потеря может быть нулевой? Для других изображений, которые содержат штрих-коды или машинную печать, я получаю некоторую потерю, и они сходятся должным образом.
И когда я тестирую эту модель, штрих-коды правильно игнорируются. Но он выводит как машинную печать, так и рукописный текст, где мне нужна только машинная печать.
Может кто-нибудь подскажет мне, где я ошибаюсь, пожалуйста!
ОБНОВЛЕНИЕ 1:
Раньше я использовал скорость обучения 0,01, а изменение на 0,0001 дало мне некоторую потерю, и она, кажется, сходится, но не очень хорошо. Но тогда как высокая скорость обучения даст потерю 0?
Когда я использую ту же модель в Caffe со скоростью обучения 0,01, это дало некоторую потерю, и она хорошо сходится по сравнению с Tensorflow.
1 ответ
Ваш расчет потерь выглядит хорошо, но потеря нуля в вашем случае странная. Вы пытались играть с темпом обучения? Может быть, уменьшить его. Я столкнулся со странными потерями, и мне помогло снижение скорости обучения.