프로젝트 디렉터리 구조 규칙
프로젝트는 "모델 유형/변종 구현"의 2단계 디렉터리 구조를 채택합니다. 모든 GAN 변종은 `GAN/` 디렉터리에 통합되며, Conditional GAN은 `GAN/conditional_gan/`에 위치합니다. 새 모델은 다음과 같은 명명 규칙을 따라야 합니다.
- PyTorch 구현:
[변종명]_pytorch.py(예:gan_pytorch.py) - TensorFlow 구현:
[변종명]_tensorflow.py(예:gan_tensorflow.py)
핵심 구성 요소 재사용
파라미터 초기화
모든 모델은 Xavier 초기화 함수를 공통으로 사용하며, 각 구현 파일 상단에 정의됩니다.
def xavier_init(size):
in_dim = size[0]
xavier_stddev = 1. / tf.sqrt(in_dim / 2.)
return tf.random_normal(shape=size, stddev=xavier_stddev)
이 함수는 gan_tensorflow.py와 cgan_pytorch.py 등에서 모두 구현되어 있으며, 새 모델은 이 패턴을 그대로 재사용해야 합니다.
네트워크 아키텍처 템플릿
GAN 계열 모델
생성자(generator/G)와 판별자(discriminator/D)라는 두 가지 핵심 메서드를 구현해야 합니다.
- 생성자: 랜덤 노이즈
z를 입력받아 합성 데이터를 출력합니다. (예:gan_tensorflow.py의generator함수) - 판별자: 실제 데이터와 생성된 데이터를 구분하여 확률 값을 출력합니다. (예:
lsgan_tensorflow.py의discriminator함수)
VAE 계열 모델
세 가지 주요 구성 요소를 구현해야 합니다.
- 인코더 Q: 입력을 잠재 공간 분포로 매핑합니다. (참조:
vae_pytorch.py의Q함수) - 디코더 P: 잠재 변수에서 입력을 재구성합니다. (참조:
vae_pytorch.py의P함수) - 재파라미터화 샘플링:
sample_z(mu, log_var)(모든 VAE 변종에서 공통 구현)
새 모델 구현 단계
1. 디렉터리 및 파일 생성
"Improved GAN"을 예로 들어 설명합니다.
mkdir -p GAN/improved_gan
touch GAN/improved_gan/improved_gan_pytorch.py
touch GAN/improved_gan/improved_gan_tensorflow.py
2. 핵심 로직 구현
PyTorch 버전을 예시로, 다음 구성 요소를 포함해야 합니다.
def xavier_init(size): # 파라미터 초기화
# 표준 구현 재사용
class Generator(nn.Module): # 생성자 네트워크
def __init__(self):
super(Generator, self).__init__()
# 네트워크 레이어 정의 (gan_pytorch.py의 G 함수 참조)
class Discriminator(nn.Module): # 판별자 네트워크
def __init__(self):
super(Discriminator, self).__init__()
# 네트워크 레이어 정의 (gan_pytorch.py의 D 함수 참조)
def reset_grad(): # 그래디언트 초기화 (모든 PyTorch 구현에서 공통)
# gan_pytorch.py의 구현 재사용
3. 차별화된 구현
조건부 생성 모델의 경우, 생성자와 판별자에 조건 입력을 추가해야 합니다. 예를 들어 conditional_gan/cgan_pytorch.py에서 볼 수 있듯이:
def G(z, c): # 조건부 생성자
inputs = torch.cat([z, c], 1)
h = F.relu(torch.matmul(inputs, Wzh) + bzh)
X = F.sigmoid(torch.matmul(h, Whx) + bhx)
return X
테스트 및 검증
새 모델은 유닛 테스트를 추가해야 하며, tests/test_vae.py의 테스트 구조를 참고하여 최소한 다음을 포함해야 합니다.
- 네트워크 출력 차원 검사
- 그래디언트 계산 정확성
- 생성된 샘플 품질 평가
프로젝트 참고 자료
- 공식 문서: README.md
- 환경 설정: environment.yml
- GAN 기본 구현: GAN/vanilla_gan/
- VAE 기본 구현: VAE/vanilla_vae/
위의 규칙을 따르면 새 모델 변종이 기존 아키텍처에 원활하게 통합되어 코드 일관성과 유지보수성을 유지할 수 있습니다. 개발 속도를 높이려면 유사한 모델 구현(예: infogan_pytorch.py의 다중 조건 제어)을 우선 참조하는 것이 좋습니다.