본문 바로가기

ML&DL

(32)
[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..
더 깊은 네트워크를 위한 Activation function(활성화 함수) Activation function의 필요성 앞선 포스팅을 통해 perceptron은 fully-connected layer(=dense layer=linear layer)와 sigmoid로 이루어져 있다는 것을 알고있다. perceptron을 아주 많이 쌓게 되면 그것을 DNN(Deep Neural Network)이라고 부른다. 만약 DNN을 이루고 있는 요소 중 sigmoid 함수가 없다면 어떨까? fully-connected layer를 100개를 쌓아도 10000개를 쌓아도 사실 한 층을 쌓은 것과 다를 바 없게 된다. 어차피 선형함수 하나로 표현할 수 있기 때문이다. 그러므로 층을 깊게 쌓는 것이 의미를 갖기 위해서는 sigmoid와 같은 non-linear한 activation function..
Gradient descent algorithm(경사하강법)과 back propagation 이 포스팅은 sung kim 교수님 강의 의 자료를 활용했습니다. Gradient descent algorithm review Loss function(=cost function=objective function)은 실제 값과 추정 값의 차이를 나타내는 함수. 즉, 얼마나 틀렸냐?를 나타낸다. loss function을 최소화 하는 것이 우리의 목적이다. gradient descent algorithm(경사 하강법)은 loss를 최소화 하는 weight를 찾는 방법중 하나이다. 그럼 어떻게 loss를 최소화 하냐? 현재 위치에서 gradient(기울기)가 가장 급격한 방향으로 조금씩 이동하며 최소값으로 도달한다. 즉, 특정 weight에 대한 편미분을 통해 각각의 weight가 loss에 얼마나 영향을 ..
Perceptron(퍼셉트론)과 MLP(Multi-Layer Perceptron) Artificial Neural Network (인공신경망) Artificial Neural network(ANN, 인공신경망)은 상호 연결되어있는 뉴런들의 복잡한 webs로 구성되어있는 생물학적인 학습시스템에서 일부분 영감을 얻었다고 한다. 인간의 뇌는 대략 1011 개의 뉴런(각각 평균적으로 104의 connection을 가진다)의 밀도있게 연결된 네트워크를 가진다고 추정된다. 그리고 그렇게 상호 연결된 뉴런은 시냅스를 통해 신경전달물질을 분비해서 신호를 전달하거나/전달하지 않거나 행동을 취한다. ​ 다음 뉴런을 activation시키기 위해 뉴런에서는 어떻게 결정을 내리는 것일까? 그 rule을 design하는 neural network를 만드려는 여러 시도들이 있고 앞으로의 포스팅에서 차근히 살펴..