Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 8 additions & 8 deletions beginner_source/dcgan_faces_tutorial.py
Original file line number Diff line number Diff line change
Expand Up @@ -156,7 +156,7 @@
# - ``ngf`` - 생성자를 통과할 때 만들어질 특징 데이터의 채널 수입니다.
# - ``ndf`` - 구분자를 통과할 때 만들어질 특징 데이터의 채널 수입니다.
# - ``num_epochs`` - 학습시킬 에폭(epoch) 수입니다. 학습을
# 길게하는 경우 대부분 좋은 결과를 보이지만, 이러한 경우 시간 또한
# 길게 하는 경우 대부분 좋은 결과를 보이지만, 이러한 경우 시간 또한
# 오래 걸립니다.
# - ``lr`` - 모델의 학습률(learning rate)입니다. DCGAN 논문에서와 같이 0.0002로
# 설정합니다.
Expand Down Expand Up @@ -211,7 +211,7 @@
# 본 튜토리얼에서 사용할 데이터는 `Celeb-A Faces
# dataset <http://mmlab.ie.cuhk.edu.hk/projects/CelebA.html>`__ 로, 해당 링크를 이용하거나 `Google
# Drive <https://drive.google.com/drive/folders/0B7EVK8r0v71pTUZsaXdaSnZBZzg>`__ 에서 데이터를 받을 수 있습니다.
# 데이터를 받으면 ``img_align_celeba.zip`` 라는 파일을 보게될 겁니다. 다운로드가 끝나면
# 데이터를 받으면 ``img_align_celeba.zip`` 라는 파일을 보게 될 겁니다. 다운로드가 끝나면
# ``celeba`` 이라는 폴더를 새로 만들고, 해당 폴더에 해당 zip 파일을 압축해제 해주시면 됩니다.
# 압축 해제 후, 위에서 정의한 ``dataroot`` 변수에 방금 만든 ``celeba`` 폴더의 경로를 넣어주세요.
# 위의 작업이 끝나면 ``celeba`` 폴더의 구조는 다음과 같아야 합니다:
Expand Down Expand Up @@ -270,7 +270,7 @@
# ~~~~~~~~~~~~~~~~
#
# DCGAN 논문에서는, 평균이 0( ``mean=0`` )이고 분산이 0.02( ``stdev=0.02`` )인
# 정규분포을 시용해, 구분자와 생성자 모두 무작위 초기화를 진행하는 것이 좋다고 합니다.
# 정규분포를 사용해, 구분자와 생성자 모두 무작위 초기화를 진행하는 것이 좋다고 합니다.
# ``weights_init`` 함수는 매개변수로 모델을 입력받아,
# 모든 합성곱 계층, 전치 합성곱 계층, 배치 정규화 계층을, 위에서 말한 조건대로
# 가중치들을 다시 초기화 시킵니다. 이 함수는 모델이 만들어지자 마자 바로 적용을
Expand All @@ -293,7 +293,7 @@ def weights_init(m):
# 생성자 :math:`G` 는 잠재 공간 벡터 :math:`z` 를, 데이터 공간으로
# 변환시키도록 설계되었습니다. 우리에게 데이터라 함은 이미지이기 때문에,
# :math:`z` 를 데이터공간으로 변환한다는 뜻은, 학습이미지와 같은 사이즈를 가진
# RGB 이미지를 생성하는것과 같습니다 (예. 3x64x64).
# RGB 이미지를 생성하는 것과 같습니다 (예. 3x64x64).
# 실제 모델에서는 스트라이드(stride) 2를 가진 전치 합성곱 계층들을 이어서 구성하는데,
# 각 전치 합성곱 계층 하나당 2차원 배치 정규화 계층과 relu 활성함수를 한 쌍으로 묶어서 사용합니다.
# 생성자의 마지막 출력 계층에서는 데이터를 tanh 함수에 통과시키는데,
Expand Down Expand Up @@ -454,7 +454,7 @@ def forward(self, input):
# 우리가 원하는 요소들만 골라낼 수 있는지 이해하는 것이 먼저입니다 (예. GT labels).
#
# 좋습니다. 다음으로 넘어가겠습니다. 참 라벨 (혹은 정답)은 1로 두고, 거짓 라벨 (혹은 오답)은 0으로
# 두겠습니다. 각 라벨의 값을 정한건 GAN 논문에서 사용된 값들로, GAN을 구성할때의 관례라 할
# 두겠습니다. 각 라벨의 값을 정한 건 GAN 논문에서 사용된 값들로, GAN을 구성할때의 관례라 할
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

구성할 때의 부분도 이번 PR 또는 다음 PR에서 추가 반영해주시면 좋을 것 같습니다. :)

# 수 있습니다. 방금 정한 라벨 값들은 추후에 손실값을 계산하는 과정에서 사용될겁니다.
# 마지막으로, 서로 구분되는 두 옵티마이저를 구성하겠습니다. 하나는 :math:`D` 를 위한 것,
# 다른 하나는 :math:`G` 를 위한 것입니다. DCGAN에 서술된 대로, 두 옵티마이저는 모두 Adam을 사용하고,
Expand Down Expand Up @@ -490,7 +490,7 @@ def forward(self, input):
# 그러한 이유로, 본 튜토리얼에서는 `Goodfellow’s paper <https://papers.nips.cc/paper/5423-generative-adversarial-nets.pdf>`__
# 에서 서술된 Algorithm 1을 기반으로, `ganhacks <https://github.com/soumith/ganhacks>`__ 에서 사용된 몇가지 괜찮은 테크닉들을
# 더할 것입니다. 앞서 몇번 설명했지만, 우리의 의도는 “진짜 혹은 가짜 이미지를 구성”하고,
# :math:`log(D(G(z)))` 를 최대화하는 G의 목적함수를 최적화 시키는 겁니다. 학습과정은 크게 두가지로 나눕니다.
# :math:`log(D(G(z)))` 를 최대화하는 G의 목적함수를 최적화 시키는 겁니다. 학습과정은 크게 두 가지로 나눕니다.
# Part 1은 구분자를, Part 2는 생성자를 업데이트하는 과정입니다.
#
# **Part 1 - 구분자의 학습**
Expand All @@ -499,11 +499,11 @@ def forward(self, input):
# Goodfellow의 말을 빌리자면, 구분자는 “변화도(gradient)를 상승(ascending)시키며 훈련”하게 됩니다.
# 실전적으로 얘기하면, :math:`log(D(x)) + log(1-D(G(z)))` 를 최대화시키는 것과 같습니다.
# `ganhacks <https://github.com/soumith/ganhacks>`__ 에서 미니 배치(mini-batch)를 분리하여 사용한 개념을 가져와서,
# 우리 역시 두가지 스텝으로 분리해 계산을 해보겠습니다. 먼저,
# 우리 역시 두 가지 스텝으로 분리해 계산을 해보겠습니다. 먼저,
# 진짜 데이터들로만 이루어진 배치를 만들어 :math:`D` 에 통과시킵니다. 그 출력값으로 (:math:`log(D(x))`) 의 손실값을 계산하고,
# 역전파 과정에서의 변화도들을 계산합니다. 여기까지가 첫번째 스텝입니다. 두번째 스텝에서는, 오로지 가짜 데이터들로만
# 이루어진 배치를 만들어 :math:`D` 에 통과시키고, 그 출력값으로 (:math:`log(1-D(G(z)))`) 의 손실값을 계산해
# 역전파 변화도를 구하면 됩니다. 이때 두가지 스텝에서 나오는 변화도들은 *축적(accumulate)* 시켜야 합니다.
# 역전파 변화도를 구하면 됩니다. 이때 두 가지 스텝에서 나오는 변화도들은 *축적(accumulate)* 시켜야 합니다.
# 변화도까지 구했으니, 이제 옵티마이저를 사용해야겠죠. 파이토치의 함수를 호출해주면 알아서 변화도가 적용될겁니다.
#
# **Part 2 - 생성자의 학습**
Expand Down