9. GAN(생성적 적대 신경망) 2강. 완전 연결 계층 GAN 구현
학습목표
- 확률분포 생성을 위한 완전 연결 계층 GAN을 구현할 수 있다.
- 필기체를 생성하는 완전 연결 계층 GAN 구현할 수 있다.
학습내용
- 확률분포 생성을 위한 완전 연결 계층 GAN 구현 - 필기체를 생성하는 완전 연결 계층 GAN 구현
1. 확률분포 생성을 위한 완전 연결 계층 GAN 구현 (1) GAN으로 정규분포를 생성
∙ 생성에 사용하는 무작위 잡음 벡터 Z는 균등분포 확률 신호인데, 출력은 정규 분포 확률 신호
① GAN 구현에 필요한 행렬 계산을 다루는 넘파이와 그래픽을 담당하는 라이브 러리 임포트
- 2 -
② GAN 모델링
∙ GAN 모델링 순서
i. 클래스 초기화 함수: __init() ii. 판별망 구현 멤버 함수: gen_D() iii. 생성망 구현 멤버 함수: gen_G()
iv. 학습용 생성망 구현 멤버 함수: make_GD() v. 판별망 학습 멤버 함수: D_train_on_batch()
vi. 학습용 생성망 학습 멤버 함수: GD_train_on_batch()
③ 데이터 관리 클래스
∙ GAN에는 흉내 내고자 하는 실제 데이터와 실제 데이터와 통계적 특성이 다른 무작위 잡음 데이터인 2가지 데이터가 존재
④ 머신 구현하기
∙ 머신은 데이터와 모델로 GAN을 학습하고 성능을 평가하는 인공신경망 전체를 총괄하는 객체
- 클래스 초기화 함수: __init__() - 실행 멤버 함수: run()
- 에포크 단위 실행 멤버 함수: run_epochs() - 학습 진행 멤버 함수: train()
- 4 - - 매순간 학습 진행 멤버 함수: train_each()
- 판별망 학습 멤버 함수: train_D()
- 학습용 생성망 학습 멤버 함수: train_GD()
- 성능 평가 및 그래프 그리기 멤버 함수: test_and_show() - 상황 출력 정적 함수: print_stat()
⑤ 코드 실행
- 6 -
∙ GAN 모델 summary 출력 결과
∙ GAN의 확률분포 생성 결과
2. 필기체를 생성하는 완전 연결 계층 GAN 구현 (1) MNIST 필기체를 생성하는 GAN 구현하기
∙ GAN은 입력한 필기체를 보고 배워 새로운 유사 필기체를 생성
① 완전 연결 계층 GAN 구현에 필요한 라이브러리 임포트
② 완전 연결 계층 GAN 모델링
∙ GAN에 포함된 2가지 신경망(생성망, 판별망)을 모델링
- 8 -
∙ 생성망을 정의하는 함수 구현
∙ 입력된 이미지가 실제 이미지인지 생성망으로 만든 이미지인지를 판별하는 판 별망 모델을 생성하는 판별망 함수 구현
∙ 무작위 신호를 만드는 함수 구현
③ 완전 연결 계층 GAN 학습 수행
∙ GAN의 모델링과 학습용 클래스를 사용해서 실제로 GAN을 학습하는 코드 구현
④ 완전 연결 계층 GAN 수행
∙ 각 배치마다 사용할 학습 데이터의 길이인 epochs과 배치 사이즈 등 파라미 터 지정 후 GAN 수행
- 10 -
∙ GAN 모델 summary 출력 결과
∙ 학습 시 출력된 학습 진행사항을 나타내는 결과
학습정리
1. 확률분포 생성을 위한 완전 연결 계층 GAN 구현
∙ 정규분포를 생성하여 판별하는 완전 연결 계층 GAN 구현
2. 필기체를 생성하는 완전 연결 계층 GAN 구현
∙ 필기체 이미지를 생성하는 완전 연결 계층 GAN 구현 평가하기
1. GAN에서 데이터가 진짜인지 혹은 가짜인지 구별하는 인공신경망을 고르시오.
① 인코더
② 디코더
③ 생성망
④ 판별망
- 정답 : ④번
해설 : 판별망은 데이터가 생성망에서 생성된 허구 데이터인지 실제 데이터인지 판별하는 것을 학습한다.
2. 함수의 값은 ReLU와 동일하나 x<0인 값에 대해 0.01을 곱해 ReLU 함수의 단점을 보완 한 활성화 함수를 고르시오.
① Leaky ReLU
② ELU
③ Tanh
④ Sigmoid
- 정답 : ①번
해설 : Leaky ReLU 함수의 값은 ReLU와 동일하지만 x<0인 값에 대해 0.01을 곱해 ReLU 함수의 단점을 보완한다.