시행착오

cGAN의 구현과 배운 것

이불속곰팡이 2023. 4. 7. 11:42

논문에서는 100차원의 noise와 10차원의 class를 입력으로 Generate한다.

이때, noise와 class 피처를 concat한 뒤 충분히 깊은 layer를 지나지 않으면 class의 정보를 충분히 담지 못하는 것 같다.

이를 해결하기 위해 noise와 class를 처음에 합쳐 class의 정보가 잘 녹아들도록 했다.

그리고 class는 one-hot vecotr라서 noise와 concat하기 전에 간단한 layer를 지나게해서 embedding했다.

 

discriminator는 generator보다 빨리 특징을 학습해야 generator가 discriminator를 통해 적절한 이미지를 학습할 거라 생각해서 discriminator에 더 큰 learning rate를 주었다.

 

가장 중요한 문제로는 결국 generator의 마지막 activation으로 tanh를 써야한다는 것이다.

만약 training imgae를 전처리하지 않으면 괜찮지만, torchvision의 특성상 totensor를 하는 과정에서 -1~1의 값으로 전처리를 해준다.

이미지 데이터라서 0~255의 범위를 가질 것이라 단정해서 한참 헤매게 되었다.

만약 activation으로 ReLU를 쓴다면, 음수부분이 표현이 불가능하고, 최종 결과의 표현 분포도 다르기 때문에 학습이 되질 않는다.

앞으로는 입력 데이터를 가장 먼저 살펴보자.

 

결과로 1epoch부터 제대로 된 결과가 나오는 것을 확인했다.