더북(TheBook)

실제 이미지에 이어서 이번에는 생성자에서 만든 가상의 이미지를 판별자에 넣겠습니다. 가상의 이미지는 ‘모두 거짓(0)’이라는 레이블을 준비해 붙입니다. 학습이 반복될수록 가짜라는 레이블을 붙인 이미지들에 대한 예측 결과가 거짓으로 나올 것입니다.

fake = np.zeros((batch_size, 1)) ----- ➊
noise = np.random.normal(0, 1, (batch_size, 100)) ----- ➋
gen_imgs = generator.predict(noise)----- ➌
d_loss_fake = discriminator.train_on_batch(gen_imgs, fake) ----- ➍

에서는 ‘모두 거짓(0)’이라는 레이블 값을 가진 열을 batch_size 길이만큼 만듭니다.

에서는 생성자에 집어넣을 가상 이미지를 만듭니다. 정수가 아니기 때문에 np.random.normal() 함수를 사용했습니다. 조금 전과 마찬가지로 np.random.normal(a, b, c) 형태를 가지며 a부터 b까지 실수 중 c개를 랜덤으로 뽑으라는 의미입니다. 여기서 c 자리에 있는 (batch_size, 100)은 batch_size만큼 100열을 뽑으라는 의미입니다.

에서는 에서 만들어진 값이 생성자에 들어가고 결괏값이 gen_imgs로 저장됩니다.

에서는 에서 만든 값에 에서 만든 ‘모두 거짓(0)’이라는 레이블이 붙습니다. 이대로 판별자로 입력됩니다.

이제 실제 이미지를 넣은 d_loss_real과 가상 이미지를 입력한 d_loss_fake가 판별자 안에서 번갈아 가며 진위를 판단하기 시작합니다. 각각 계산되는 오차의 평균을 구하면 판별자의 오차 d_loss는 다음과 같이 정리됩니다.

# d_loss_real, d_loss_fake 값을 더해 둘로 나눈 평균이 바로 판별자의 오차
d_loss = 0.5 * np.add(d_loss_real, d_loss_fake)
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.