Я пытался внедрить DCGan , документ для фейсбука, и был заблокирован двумя нижеуказанными проблемами почти 2 недели. Мы ценим любые предложения. Спасибо.
Выпуск 1:
В статье DCGAN предлагается использовать BN (нормализация партии) как генератор, так и дискриминатор. Но я не мог получить лучший результат с BN, чем без BN.
Я скопировал используемую модель DCGAN, которая точно такая же, как и для бумаги DCGAN. Я не думаю, что это связано с переоснащением. Потому что (1) он продолжает показывать тот же шум с исходной шумовой картиной и, кажется, никогда не был обучен. (2) Значение Loss очень стабильно, так что gan и дискриминатор на самом деле не изменены. (Он остается на уровне 0,6 ~ 0,7 и никогда не ощущается или поднимается, как при обрушении обеих моделей.) Если я проверяю только функцию потерь, кажется, что она хорошо обучается.
Проблема 2:
Когда я использовал float16, он всегда дает мне Нэн с моделью ниже. Я изменил эпсилон как 1e-4 1e-3, но не получилось. И вот еще один вопрос. Если я не использую BatchNormalization, это может быть Nan. это достаточно имеет смысл, я могу получить это. Но, если я использую BatchNormalization, он нормализуется в каждом слое. Даже если результат станет очень большим или очень маленьким, в каждом слое будет нормализована партия, что результат будет почти центрирован, и исчезновение не должно произойти. не так ли? это на самом деле моя мысль, но я не знаю, что я не так думаю .. пожалуйста, кто-нибудь, помогите мне.
===== Генератор =====
Input # (Нет, 128) <= скрытый </p>
Плотный # (Нет, 16384)
Нормализация партии
LeakyReLU
Изменение формы # (Нет, 4, 4, 1024)
Conv2DTranspose # (Нет, 4, 4, 512)
Пакетная нормализация
LeakyReLU
Conv2DTranspose # (Нет, 8, 8, 256)
Пакетная нормализация
LeakyReLU
Conv2DTranspose # (None, 16, 16, 128)
BatchNormalization
LeakyReLU
Conv2DTranspose # (None, 32, 32, 64)
Нормализация партии
LeakyReLU
Conv2DTranspose # (Нет, 64, 64, 32)
Нормализация партии
LeakyReLU
Conv2DTranspose # (Нет, 128, 128,16)
Пакетная нормализация
LeakyReLU
Conv2D # (Нет, 128, 128, 3)
===== Дискриминатор =====
Conv2D # (Нет, 128, 128, 3) LeakyReLU
Conv2D # (Нет, 64, 64, 16) Нормализация партии
Выпадение
LeakyReLU
Conv2D # (Нет, 32, 32, 32)
Нормализация партии
Dropout
LeakyReLU
Conv2D # (None, 16, 16, 64)
Пакетная нормализация
Dropout
LeakyReLU
Conv2D # (None, 8, 8, 128)
Пакетная нормализация
Выпадение
LeakyReLU
Conv2D # (Нет, 4, 4, 256)
Пакетная нормализация
Выпадение
LeakyReLU
Conv2D #(Нет, 2, 2, 512)
Нормализация партии
Выпадение
LeakyReLU
Уплощение
Выпадение
Плотный
, и последние гиперпараметры, которые я пробовал:как показано ниже, и я не забыл добавить гауссовский шум в тренировочные картинки.
image_shape => (128, 128, 3)
latent_dim => 128
channels => 3
iterations => 10000
batch_size => 128
epsilon => 0.005
weight_init_stddev => 0.02
beta_1 => 0.5
discriminator_lr => 0.0002
gan_lr => 0.0002