안경잡이개발자

728x90
반응형

  동일한 입력에 대하여 매번 모델이 다른 결과를 뱉는다면, 아래의 유형에 해당되는지 체크한다.

 

유형 1. torch 설정

 

  기본적인 torch 설정을 바꿔줄 수 있다.

 

torch.backends.cudnn.deterministic = True
torch.backends.cudnn.benchmark = False

 

유형 2. 모델의 랜덤성

 

  StyleGAN 등의 모델에서는 랜덤성(randomness)이 포함되어 있다. 이러한 레이어를 identity() 레이어로 치환하는 방법으로 랜덤성을 제거할 수 있다.

 

class Identity(nn.Module):
    def __init__(self):
        super(Identity, self).__init__()
        
    def forward(self, x):
        return x

 

유형 3. eval() 모드

 

  ResNet 등의 모델에서는 Batch Normalization을 사용한다. 이러한 레이어에서는 train() 모드와 eval() 모드에서의 파라미터가 다르게 적용된다. 그래서 test time에 항상 eval() 모드를 사용하는 방식으로 랜덤성을 제거할 수 있다.

728x90
반응형