네이버부스트캠프aitech 6

Week_7 CV-Autograd

Autograd 는 Automatic Gradient calculating API의 약자로서, 자동으로 gradient를 계산해주는 Deep Learning 특화 library 이다. 과거에는 backward pass로 미분값을 구할때 수식으로 전개해 일일히 대입하는 방법을 썼다. autograd는 아래와 같은 computational graph를 사용해 자동으로 구할 수 있다. Autograd 1. backward backward는 backpropagation이다. 위 예시에서 눈에 띄는것은 보통 미분값을 구하고자 하는 변수가 y 라 할때, y.backward()를 사용하는데, 사진에서는 backward(gradients)라고 되어 있다. 이 기능은 backprop의 chain rule을 살짝쿵 적용한..

Week_3 Pytorch - Out of Memory, OOM 해결

Out Of Memory 딥러닝 모델을 돌리다 보면 종종 OOM 에러가 뜨면서 프로그램이 중단되는 현상이 발생한다. gpu내부 메모리가 꽉차서 발생하는 현상인데, 해결하기 어려운 이유들은 아래와 같다. - 왜 발생했나? → 알기 어려움 - 그럼 어디서 발생했나? → 알기 어려움 - 어찌저찌 Error backtracking해봄 → 엉뚱한데로 감 - 실행하자마자 띡 하고 종료되는게 아니라 누적돼서 특정 시점에 빵하고 터진경우일수 있는데, 이럴때 중단 전 메모리 상황파악이 어려움. 등등,, 가지각색의 이유로 발생하는 OOM은 처리하기 까다롭지만 무시할수 있는 에러가 아니기 때문에 해결해야한다. 해결방법 우선, GPUUtil 사용해서 iter마다 메모리 쌓이는지 확인해보자 #!pip install GPUtil..

Week_3 Pytorch - Dataset & Dataloader

Pytorch에서는 Data를 처리할때 Dataset과 Dataloader라는 클래스를 사용한다. 오늘은 각각의 클래스들이 어떤 구조를 갖고 있고 무슨 역할을 하는지 알아보겠다. 모델을 학습시키기 위해서는 Data가 필수적이다. 데이터 수집부터, 클렌징(쓰레기 값 제거), 전처리 등등을 거친 Data가 주어졌을때, 이 Data는 크게 두개의 과정을 거쳐서 실제 모델에 피딩된다. 과정을 나누는 기준은 data를 어떤 묶음으로 보느냐로 생각하면 편하다. 예를들면, 공장에서 내가 좋아하는 초코파이를 생산할때, Dataset : 초코파이 하나하나를 같은 형식으로 만듬 Dataloader : 초코파이 8개를 한상자에 넣어서 출고시킴. 정도로 이해하면 된다. 이제 각각의 클래스가 어떤 역할을 하는지 살펴보자. 1...

Week_3 Pytorch - Transfer Learning, 모델 저장 및 불러오기

딥러닝 모델을 짜다보면 모델 or 가중치들을 공유하거나 불러오는 일이 다분합니다. 불러온 pretrained 모델에 input 형식만 잘 맞춰줘도 어느정도 성능은 보장이 됩니다. 이를 Transfer Learning, 전이학습이라고 합니다. Transfer Learning : 이미지넷과 같이 아주 큰 데이터셋에 훈련된 모델의 가중치를 가지고 와서 우리가 해결하고자 하는 과제에 맞게 재보정해서 사용하는 것 전이학습을 위해서는 모델을 불러와야하는데, Pytorch에서 모델을 불러오는 법에는 크게 두가지가 있습니다. 1. Model의 state_dict를 저장 및 불러오기 모델의 파라미터를 저장 torch.save(model.state_dict(),PATH) model.load_state_dict(torch...

Week_3 Pytorch - view vs. reshape

두번째로 헷갈리는 개념은 view 와 reshape이다. reshape함수는 numpy에서도 자주 쓰이는 함수여서 친숙할 것이다. 이름 그대로 shape를 '다시' 정해준다. view도 거의 똑같다. 같은 기능을 하지만 하나의 차이점은 데이터 값의 복사 유뮤 인데, 이를 이해하기 위해서는 우선 Contiguous라는 개념을 알아야한다. Contiguous : Torch의 Array의 값이 연속적인 메모리 위치를 가지는 상태 [ Contiguous vs. Noncontiguous ] 왼쪽 그림을 보면 이해가 쉬운데, 맨 윗줄이 메모리 공간을 쭉 펴논거라고 하자. 왼쪽은 앞에서부터 순차적으로 메모리 위치가 이어진다. 오른쪽은 메모리 위치가 섞여 있다. view : contiguous tensor에서만 작동함..

Week_3 Pytorch - Squeeze vs. Unsqueeze

Python과 Pytorch의 특장점 중 하나는 미리 구현된 라이브러리와 모듈들이 풍부하다는 점이다. 하지만 풍부할 수록 알아야할 가짓수는 n만개,, 그중에서도 헷갈리지만 유용한 개념 몇가지에 대해 리뷰하겠다. 우선 Squeeze 와 Unsqueeze! 기본적으로 data dimension manipulation에 관한 함수이다. 딥러닝 모델을 구축하다보면 input data의 차원을 맞춰야 하는 경우가 생기는데, 그럴때 유용하게 사용가능하다. Squeeze : Tensor의 차원을 줄이는 것 squeeze_tensor = torch.rand(size=(2,1,2)) #tensor([[[0.1117, 0.8158]], # [[0.2626, 0.4839]]]) squeeze_tensor.squeeze() ..