3

У меня есть 40-килограммовый набор данных изображений из четырех разных стран. Изображения содержат различные темы: сцены на открытом воздухе, городские сцены, меню и т. Д. Я хотел использовать глубокое обучение геотагным изображениям.Возможные объяснения увеличения потерь?

Я начал с небольшой сети из 3 конвейерных слоев, а затем добавил еще 3 для углубления сети, поскольку учебная задача не является простой.

Моя потеря делает это (с обоих слоев сетей 3 и 6): enter image description here:

Потеря фактически начинается вид гладкой и снижается в течение нескольких сотен шагов, но потом начинает подкрадываться.

Каковы возможные объяснения моей потери, как это?

Моя начальная скорость обучения установлена ​​очень низкая: 1е-6, но я тоже пробовал 1е-3 | 4 | 5. У меня есть здравый смысл, проверили дизайн сети на крошечном наборе данных из двух классов с понятным классом предметом, и потеря постоянно снижается по желанию. Точность поезда колеблется при ~ 40%

ответ

2

Обычно я говорю, что ваша скорость обучения слишком высока, но похоже, что вы это приняли. Вы должны проверить величину чисел, входящих и выходящих из слоев. Вы можете использовать tf.Print для этого. Возможно, вы каким-то образом вводите черное изображение случайно, или вы можете найти слой, где номера сходят с ума.

Также как вы вычисляете кросс-энтропию? Возможно, вы захотите добавить небольшой эпсилон внутри журнала, так как его значение будет бесконечным, так как его вход приближается к нулю. Или еще лучше использовать функцию tf.nn.sparse_softmax_cross_entropy_with_logits(...), которая обеспечивает вам численную стабильность.

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

+0

Я использую 'tf.nn.sparse_softmax_cross_entropy_with_logits (...)' FYI. – JohnAllen

+1

Я полагал, что ты можешь быть. В противном случае стоимость исчезла бы до бесконечности, и вы получите нан. По какой-то причине выход определенно будет нулевым. Возможно, попробуйте использовать активацию elu вместо relu, так как они не умирают в нуле. – chasep255

+0

Я использую 'tf.nn.elu' в своих conv-слоях и relu в конечном скрытом слое: 'hidden = tf.nn.relu (tf.matmul (reshape, fc1_weights) + fc1_biases)'. Возможно, я тоже смогу попробовать элу. – JohnAllen

Смежные вопросы