12. 발전된 GAN 모델
2강. 필기체를 생성하는 WGAN과 CGAN 구현
학습목표
- MNIST 필기체를 생성하는 WGAN을 구현할 수 있다.
- MNIST 필기체를 생성하는 CGAN을 구현할 수 있다.
학습내용
- MNIST 필기체를 생성하는 WGAN 구현 - MNIST 필기체를 생성하는 CGAN 구현
1. MNIST 필기체를 생성하는 WGAN 구현
∙ GAN은 훈련하기가 매우 까다롭고 모드가 붕괴(mode collapse)할 가능성이 큼
∙ 안정적인 훈련과 모드 붕괴는 단순히 베셔슈타인 1이나 EMD(Earth-Mover D istance)를 기반으로 한 GAN 손실 함수를 교체함으로써 피할 수 있는 WGAN 구현
① WGAN 구현에 필요한 라이브러리 불러오기
② WGAN 모델링
∙ WGAN 클래스 초기화 함수 구현
③ 베셔슈타인 손실 함수 구현
∙ 생성망이 주어졌을 때 최적의 판별망을 계산
④ 생성망 모델 구성 및 구현
∙ 가짜 이미지 생성을 위한 생성망 모델
⑤ 판별망 모델 구현
⑥ 판별기와 적대적 네트워크 훈련 구현
∙ 판별망과 적대적 네트워크를 배치 단위로 교대로 훈련
∙ WGAN 모델 summary 출력 결과
∙ 학습 시 출력된 학습 진행 상황을 나타내는 결과
…
2. MNIST 필기체를 생성하는 CGAN 구현
∙ 생성 모델을 학습시키는 GAN을 기반으로 GAN의 조건부(Conditional) 버전으 로 기존 모델에 간단히 y를 추가하여 만든 적대적 신경망 구현
① CGAN 구현에 필요한 라이브러리 불러오기
② 생성망 모델 구성
∙ 가짜 이미지 생성을 위한 BN-ReLU-Conv2DTranpose 스택
∙ 출력 계층 활성화 함수로는 tanh 대신 sigmoid 함수 사용이 가능한데, sigmi od 함수가 수렴이 더 쉬움
③ 판별망 모델 구성
∙ 진짜와 가짜를 판별하는 LeakyReLU-Conv2D 스택
∙ BN으로는 네트워크가 수렴하지 않으므로 sigmoid를 사용
④ 생성한 이미지 저장 함수 구현
⑤ 판별망과 적대적 네트워크 훈련 구현
∙ 배치 단위로 판별망과 적대적 네트워크를 교대로 훈련
∙ 우선 판별망은 제대로 레이블이 붙은 진짜와 가짜 이미지를 가지고 훈련시킴
∙ 다음으로 적대적 네트워크를 진짜인 척하는 가짜 이미지로 훈련 시킴
⑥ CGAN 모델을 구성하는 함수로 훈련 루틴을 호출
⑦ 코드 실행
∙ CGAN 모델(discriminator, generator, cgan_mnist) summary 출력 결과
∙ CGAN 생성 결과
학습정리
1. MNIST 필기체를 생성하는 WGAN 구현
∙ Wasserstein Distance를 사용하여 MNIST 필기체를 생성하는 WGAN 구현 평가하기
1. GAN 기존 모델에 y(class)을 추가하여 만든 적대적 신경망을 고르시오.
① Auxiliary Classifier GAN
② Wasserstein GAN
③ Conditional GAN
④ Least Square GAN
- 정답 : ③번
해설 : CGAN은 생성모델을 학습시키는 GAN을 기반으로 GAN 기존 모델에 Condition y를 추가하여 만든 적대적 신경망이다.
2. 훈련시킬 때 생성기가 생성한 가짜 데이터와 진짜 데이터에서 추출한 데이터가 필요한 것을 고르시오.
① 생성기
② 판별기
③ 노이즈
④ 레이블
- 정답 : ②번
해설 : WGAN의 판별기를 훈련시킬 때는 생성기가 생성한 가짜 데이터와 진짜 데이터에서 추출한 실제 데이터가 필요하다.