После игры с учебником по PyTorch DCGAN Faces я начал работать с собственным набором данных, который состоит из изображений размером 1x32x32 (канал, высота, ширина).
Теперь я применил большинство вещей из этого хранилища: https://github.com/soumith/ganhacks
Но сейчас я застрял.
Я привел этот аргумент, чтобы выбрать, тренировать ли генератор (G) или дискриминатор (D).
if i > 1:
if D_G_z1 < 0.5:
train_G = True
train_D = False
else:
train_D = True
train_G = False
Где i - номер текущей партии, train_D
и train_G
установлены в True для партии первой. D_G_z1
- это D (G (x)).
Я ожидаю, что после обучения D и D (G (x)) = 0,5 D прекратит обучение, а G начнет тренировку, чтобы улучшить реализм генерируемых изображений и т. Д. Теперь D и G тренируются, когда условия соблюдены.
Однако потеря G застряла на 0,7 после 5 эпох и, похоже, не изменилась с 1k эпох (я не пробовал больше). Изменение скорости обучения для G, или сделать G более / менее сложным, изменяя количество каналов на слой ConvTranspose2d, также не помогает.
Какой сейчас лучший подход? Любой совет будет принят во внимание.
Код находится здесь: https://github.com/deKeijzer/SRON-DCGAN/blob/master/notebooks/ExoGAN_v1.ipynb
TLDR: потеря генератора застряла на 0,7, больше не меняется. Он также не «выучил» хорошее представление о X.