실제 이미지에 이어서 이번에는 생성자에서 만든 가상의 이미지를 판별자에 넣겠습니다. 가상의 이미지는 ‘모두 거짓(0)’이라는 레이블을 준비해 붙입니다. 학습이 반복될수록 가짜라는 레이블을 붙인 이미지들에 대한 예측 결과가 거짓으로 나올 것입니다.
np.zeros(( , 1)) ----- ➊ = np.random. (0, 1, ( , 100)) ----- ➋ = .predict( )----- ➌ = .train_on_batch( , ) ----- ➍=
➊에서는 ‘모두 거짓(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 값을 더해 둘로 나눈 평균이 바로 판별자의 오차 = 0.5 * np. ( , )