안경잡이개발자

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
반응형

728x90
반응형

  Jupyter Notebook에서는 다음과 같이 코드를 불러올 수 있다. 하지만 아래와 같이 불러온 라이브러리의 코드가 수정된다면 어떻게 Jupyter 상에서 반영할 수 있을까? Jupyter Notebook 상에서는 곧바로 반영이 어렵기 때문에 reload()를 수행하여 문제를 해결할 수 있다.

 

 

  가장 간편한 방법은 다음과 같이 autoreload를 사용하는 것이다. 이렇게 하면 Jupyter상에서 불러오는 코드에 대하여 자동으로 reload를 진행한다.

 

%load_ext autoreload
%autoreload 2

 

  사용 예시는 다음과 같다.

 

728x90
반응형