Почему tf.keras BatchNormalization заставляет GAN производить бессмысленные потери и точность? - PullRequest
1 голос
/ 17 марта 2020

Справочная информация:

Я получал необычные потери и неточности при обучении GAN с пакетными слоями нормализации в дискриминаторе с использованием tf.keras. GAN имеют оптимальное значение целевой функции log (4), которое возникает, когда дискриминатор совершенно не способен отличить реальные выборки от подделок и, следовательно, прогнозирует 0,5 для всех выборок. Когда я включаю слои BatchNormalization в свой дискриминатор, и генератор, и дискриминатор достигают почти идеальных оценок (высокая точность, низкие потери), что невозможно в состязательной обстановке.

Без BatchNorm:

Этот рисунок показывает потери (y) за эпоху (x), когда BN не используется. Обратите внимание, что случайные значения ниже теоретического минимума связаны с тем, что обучение является итеративным процессом. Эта цифра показывает точность, когда BN не используется, которая составляет около 50% каждая. Обе эти цифры показывают разумные значения.

С BatchNorm:

Эта цифра показывает потери (y) за эпоху (x) при использовании BN. Посмотрите, как цель GAN, которая не должна опускаться ниже log (4), приближается к 0. На этом рисунке показана точность при использовании BN, причем оба значения приближаются к 100%. GAN являются состязательными; генератор и дискриминатор не могут иметь точность 100%.

Вопрос:

Код для построения и обучения GAN можно найти здесь . Я что-то упустил, или я допустил ошибку в своей реализации, или есть ошибка в tf.keras? Я почти уверен, что это техническая проблема, а не теоретическая проблема, которую могут решить «GAN-хаки». Обратите внимание, что это включает в себя только использование слоев BatchNormalization в дискриминаторе; использование их в генераторе не вызывает этой проблемы.

1 Ответ

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

Существует проблема со слоем Tensorflow BatchNormalization в TF 2.0 и 2.1; понижение до TF 1.15 решает проблему. Причина проблемы еще не определена.

Вот соответствующая проблема GitHub: https://github.com/tensorflow/tensorflow/issues/37673

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...