본문 바로가기

ML&DL/PyTorch

(18)
[PyTorch] AttributeError: 'str' object has no attribute '_apply' 해결 net = net.to(self.device) File "/opt/conda/lib/python3.8/site-packages/torch/nn/modules/module.py", line 1145, in to return self._apply(convert) AttributeError: 'str' object has no attribute '_apply' 이 오류가 난 원인은 모델 정의할 때, model.py에서 net = ResNet 그리고 main.py에서 net = net.to(self.device) 이렇게 해버렸다. net = ResNet -> net = ResNet() 이렇게 바꾸니 해결! class를 정의해야되는데 str을 정의해버린 어처구니없는 실수.. string에 net.to(self.d..
[PyTorch] 코드 재현성(reproducibility)을 위한 랜덤시드 설정 Neural network의 초기값은 랜덤임으로 실험마다 성능차이가 생길 수 있다. 어느정도 성능을 보장하기 위해 랜덤시드를 고정해두는 것은 필수이다. 매번 뒤적뒤적 찾기 귀찮아서 박제해놓기! (**seed를 고정해도 패키지 버전이 같지 않으면 성능이 천차만별이므로 꼭꼭 버전을 모두 맞추도록 하자.) def seed_all(seed): os.environ['PYTHONHASHSEED'] = str(seed) random.seed(seed) np.random.seed(seed) torch.manual_seed(seed) torch.cuda.manual_seed(seed) torch.cuda.manual_seed_all(seed) # if you are using multi-GPU. torch.backend..
[PyTorch] PyTorch가 제공하는 Activation function(활성화함수) 정리 딥러닝 모델을 구축할 때, linear layer, convolution layer 등의 연산 layer뒤에 당연스럽게 activation function을 사용하는 것을 볼 수 있다. activation을 쓰지 않으면 layer를 계속 쌓아도 결국 하나의 layer를 쌓은 것과 다르지 않기 때문에 deep learning에서 activation은 중요한 역할을 한다. 현재 딥러닝 모델은 점점 더 커지고 깊어지고 있기 때문에 activation function은 더 깊은 모델을 잘 학습시킬 수 있게 gradient vanishing 문제를 극복하도록 발전하고 있다. 본 포스팅에서는 먼저 activation function이 무엇인지 간단히 설명하고 상황별 activation 사용법에 대해 요약한 뒤 Py..
[PyTorch] BrokenPipeError: [Errno 32] Broken pipe 해결 broken pipe를 만나셨나요? 반갑습니다. 튜토리얼에서도 써있지만 window환경에서는 torch.utils.data.DataLoader()에서 num_worker 파라미터를 0이 아닌 다른 수로 지정하면 바로 이 error를 만날 수 있다. 0으로 바꾸면 쉽게 해결된다. num_worker는 사용할 cpu core갯수를 설정하는 파라미터인데 window환경에서는 default로 그냥 써야되나보다. num_worker = 2 (x) num_worker = 0 (o)
[PyTorch] PyTorch가 제공하는 Learning rate scheduler 정리 (여기 내용을 많이 참고하여 작성하였습니다.) (** learning rate와 lr이라는 용어를 혼용해서 작성하였습니다.) learning rate는 gradient의 보폭을 말한다. learning rate는 성능에 꽤나 영향을 주는 요소(learning rate를 잘못 설정하면 아예 학습이 안되기도 한다.)이기 때문에 learning rate를 어떻게 설정할 지가 중요하다. 아래의 그림이 learning rate 설정에 따라 loss 그래프에서 어떻게 최적의 weight를 찾아나가는 지를 보여준다. 처음부터 끝까지 같은 learning rate를 사용할 수도 있지만, 학습과정에서 learning rate를 조정하는 learning rate scheduler를 사용할 수도 있다. 처음엔 큰 learn..
[PyTorch] Dataset과 Dataloader 설명 및 custom dataset & dataloader 만들기 Custom dataset/dataloader 가 필요한 이유 점점 많은 양의 data를 이용해서 딥러닝 모델을 학습시키는 일이 많아지면서 그 많은 양의 data를 한번에 불러오려면 시간이 오래걸리는 것을 넘어서서 RAM이 터지는 일이 발생한다. 데이터를 한번에 다 부르지 않고 하나씩만 불러서 쓰는 방식을 택하면 메모리가 터지지 않고 모델을 돌릴 수 있다. 그래서 모든 데이터를 한번에 불러놓고 쓰는 기존의 dataset말고 custom dataset을 만들어야할 필요가 있다. 또한 길이가 변하는 input에 대해서 batch를 만들때나 batch 묶는 방식을 우리가 정해주어야할 때 dataloader에서 batch를 만드는 부분을 수정해야할 필요가 있어 custom dataloader를 사용한다. 이번 ..
[PyTorch] Weight Decay (L2 penalty) Weight decay를 하는 이유 한마디로 말하자면 overfitting을 방지하기 위해 weight decay를 한다. overfitting은 train dataset에 과도하게 맞춰져서 generalization성능이 낮은 것을 의미한다. 그래서 처음 본 test set에서 성능이 안좋게 나오는 경우이다. overfitting을 막고 test set에서도 좋은 성능을 내게 하기 위한 여러 방법들 중 하나가 weight decay이다. Weight decay와 L2 penalty Weight decay는 모델의 weight의 제곱합을 패널티 텀으로 주어 (=제약을 걸어) loss를 최소화 하는 것을 말한다. 이는 L2 regularization과 동일하며 L2 penalty라고도 부른다. (L2 re..
[PyTorch] Gradient clipping (그래디언트 클리핑) Gradient clipping을 하는 이유 주로 RNN계열에서 gradient vanishing이나 gradient exploding이 많이 발생하는데, gradient exploding을 방지하여 학습의 안정화를 도모하기 위해 사용하는 방법이다. Gradient clipping과 L2norm 내용이 사실 굉장히 간단하다. clipping이란 단어에서 유추할 수 있듯이 gradient가 일정 threshold를 넘어가면 clipping을 해준다. clipping은 gradient의 L2norm(norm이지만 보통 L2 norm사용)으로 나눠주는 방식으로 하게된다. threshold의 경우 gradient가 가질 수 있는 최대 L2norm을 뜻하고 이는 하이퍼파라미터로 사용자가 설정해주어야 한다. 논문에..