GAN 학습

PyTorch로 배우는 이미지 딥러닝

Michal Oleszak

Machine Learning Engineer

생성자 목표

 

 

GAN 워크플로 다이어그램.

  • 목표: 판별자를 속일 가짜를 생성
  • 아이디어: 판별자로 생성자의 성능을 평가
  • 생성자 출력에 대한 판별자 분류:
    • 실제(레이블 1) - 좋음, 손실 작음
    • 가짜(레이블 0) - 나쁨, 손실 큼
PyTorch로 배우는 이미지 딥러닝

생성자 손실

def gen_loss(gen, disc, num_images, z_dim):

noise = torch.randn(num_images, z_dim)
fake = gen(noise)
disc_pred = disc(fake)
criterion = nn.BCEWithLogitsLoss()
gen_loss = criterion( disc_pred, torch.ones_like(disc_pred) ) return gen_loss
  • 무작위 잡음 정의
  • 가짜 이미지 생성
  • 가짜 이미지에 대한 판별자 예측 획득
  • 이진 교차 엔트로피(BCE) 사용
  • 생성자 손실: 판별자 예측 vs 전체가 1인 텐서의 BCE
PyTorch로 배우는 이미지 딥러닝

판별자 목표

 

 

GAN 워크플로 다이어그램.

  • 목표: 가짜와 실제 이미지를 올바르게 분류
  • 생성자 출력은 가짜(레이블 0)로 분류되어야 함
  • 실제 이미지는 실제(레이블 1)로 분류되어야 함
PyTorch로 배우는 이미지 딥러닝

판별자 손실

def disc_loss(gen, disc, real, num_images, z_dim):

criterion = nn.BCEWithLogitsLoss()
noise = torch.randn(num_images, z_dim)
fake = gen(noise)
disc_pred_fake = disc(fake)
fake_loss = criterion( disc_pred_fake, torch.zeros_like(disc_pred_fake) )
disc_pred_real = disc(real)
real_loss = criterion( disc_pred_real, torch.ones_like(disc_pred_real) )
disc_loss = (real_loss + fake_loss) / 2 return disc_loss
  • 이진 교차 엔트로피 기준 정의
  • 생성기 입력 잡음 생성
  • 가짜 샘플 생성
  • 가짜 이미지에 대한 판별자 예측 획득
  • 가짜 손실 계산
  • 실제 이미지에 대한 판별자 예측 획득
  • 실제 손실 계산
  • 최종 손실: 실제와 가짜 손실의 평균
PyTorch로 배우는 이미지 딥러닝

GAN 학습 루프

for epoch in range(num_epochs):
    for real in dataloader:
        cur_batch_size = len(real)


disc_opt.zero_grad()
disc_loss = disc_loss( gen, disc, real, cur_batch_size, z_dim=16)
disc_loss.backward() disc_opt.step()
gen_opt.zero_grad()
gen_loss = gen_loss( gen, disc, cur_batch_size, z_dim=16)
gen_loss.backward() gen_opt.step()
  • 에폭과 실제 배치를 순회하고 현재 배치 크기 계산
  • 판별자 옵티마이저의 그래디언트 초기화
  • 판별자 손실 계산
  • 그래디언트 계산 및 최적화 스텝 수행
  • 생성자 옵티마이저의 그래디언트 초기화
  • 생성자 손실 계산
  • 그래디언트 계산 및 최적화 스텝 수행
PyTorch로 배우는 이미지 딥러닝

Lass uns üben!

PyTorch로 배우는 이미지 딥러닝

Preparing Video For Download...