그럼 다시 한번 앞에서 작성한 GAN 코드를 살펴보며 GAN이 어떻게 동작하는지 살펴보겠습니다. 앞에서 판별자를 학습시키지 않는다고 말씀드렸는데, 그 이유가 바로 여기에 나옵니다.
discriminator.trainable = False # 판별자를 더 이상 학습시키지 않습니다. gan_input = Input(shape=(100,)) x = generator(gan_input) # 노이즈값을 넣어서 새로운 그림을 생성한 후 x에 넣습니다. gan_output = discriminator(x) # 판별자가 x를 판별하도록 합니다.
앞에서 작성한 GAN 코드를 다시 살펴보면 먼저 판별자가 학습을 하지 못하고 판별만 할 수 있도록 학습을 멈추고, 노이즈값이 입력하여 그림을 생성합니다. 그런 다음 판별자가 판별한 결과(gan_output)를 보여줍니다.
여기까지가 바로 적대적 생성 신경망을 학습시키는 과정이었습니다. 긴 과정이었죠? 그러면 이제 우리가 만든 신경망이 그림을 잘 생성하는지 직접 눈으로 살펴볼 차례입니다.
■ if e == 1 or e % 1000 == 0:
각 에포크별로 훈련을 잘 하는지 살펴봅시다. 첫 번째 에포크(e == 1)와 1000, 2000, 3000, 4000, 5000번째 에포크(e % 1000 == 0)일 때 생성자가 만든 그림을 출력합니다.