Почему моя модель передачи стиля внезапно перестала учиться после 3700/20000 партий? - PullRequest
0 голосов
/ 11 марта 2020

продолжение ранее: Почему моя модель работает с `tf.GradientTape ()`, но не работает при использовании `keras.models.Model.fit ()`

I'm работаю над репликацией модели передачи в перцептивном стиле, как показано ниже: enter image description here

Наконец-то у меня получается обучение модели, как и ожидалось, на 1000 изображениях из набора данных COCO2014. Но затем я попытался запустить 2 эпохи всего набора данных, с 20695 пакетами на эпоху (согласно исследовательской работе). Он начинает учиться очень быстро, но после примерно 3700 шагов он просто загадочно терпит неудачу. (сохранение 1 сгенерированного изображения каждые 100 пакетов, самое последнее слева)

enter image description here

Прогнозы, которые я делаю с сохраненными контрольными точками, показывают аналогичные результаты:

enter image description here

глядя как потери вблизи точки отказа, я вижу:

# output_1 is content_loss
# output_2-6 are gram matrix style_loss values
 [batch:3400/20695] - loss: 953168.7218 - output_1_loss: 123929.1953 - output_2_loss: 55090.2109 - output_3_loss: 168500.2344 - output_4_loss: 139039.1250 - output_5_loss: 355890.0312 - output_6_loss: 110718.5781

 [batch:3500/20695] - loss: 935344.0219 - output_1_loss: 124042.5938 - output_2_loss: 53807.3516 - output_3_loss: 164373.4844 - output_4_loss: 135753.5938 - output_5_loss: 348085.6250 - output_6_loss: 109280.0469

 [batch:3600/20695] - loss: 918017.2146 - output_1_loss: 124055.9922 - output_2_loss: 52535.9062 - output_3_loss: 160401.0469 - output_4_loss: 132601.0156 - output_5_loss: 340561.5938 - output_6_loss: 107860.3047

 [batch:3700/20695] - loss: 901454.0553 - output_1_loss: 124096.1328 - output_2_loss: 51326.8672 - output_3_loss: 156607.0312 - output_4_loss: 129584.2578 - output_5_loss: 333345.5312 - output_6_loss: 106493.0781

 [batch:3750/20695] - loss: 893397.4667 - output_1_loss: 124108.4531 - output_2_loss: 50735.1992 - output_3_loss: 154768.8281 - output_4_loss: 128128.1953 - output_5_loss: 329850.2188 - output_6_loss: 105805.6250

# total loss increases after batch=3750. WHY???

 [batch:3800/20695] - loss: 1044768.7239 - output_1_loss: 123897.2188 - output_2_loss: 101063.2812 - output_3_loss: 200778.2812 - output_4_loss: 141584.6875 - output_5_loss: 370377.5000 - output_6_loss: 107066.7812

 [batch:3900/20695] - loss: 1479362.4735 - output_1_loss: 123050.9766 - output_2_loss: 200276.5156 - output_3_loss: 356414.2188 - output_4_loss: 185420.0781 - output_5_loss: 502506.7500 - output_6_loss: 111692.8750 

Я не могу начать думать о том, как отладить эту проблему. Как только она «заработает», должна ли модель продолжать работать? Это похоже на переполнение буфера, но я не знаю, как его найти. Любые идеи?

полный блокнот / репозиторий Colab можно найти здесь: https://colab.research.google.com/github/mixuala/fast_neural_style_pytorch/blob/master/notebook/%5BSO%5D_Coco14_FastStyleTransfer.ipynb

Ответы [ 2 ]

0 голосов
/ 13 марта 2020

Я нашел насыщенное белое изображение, RGB = 255, из-за которого модель стала нестабильной. появился в пакете = 3696, batch_size = 4. когда я пропустил эту партию, все работало нормально.

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

enter image description here

0 голосов
/ 11 марта 2020

Здесь вы можете попробовать два классических метода:

  1. Снижение скорости обучения. Распад на 100 партий или около того, вместо каждой эпохи.

  2. Градиентное отсечение. Клип градиенты между указанными значениями. Для генеративных сетей, которые я использовал ранее, градиенты от -5 до 5 работают хорошо. Если вы думаете, что сеть обучается очень медленно, вы можете увеличить диапазон.

...