pytorch 12

[PyTorch] Troubleshooting 팁

GPUtil GPU의 상태를 보여주는 모듈이다. !pip install GPUtil import GPUtil GPUtil.showUtilization() OOM (Out Of Memory) GPU에서 메모리가 부족할 때 발생한다. batch 사이즈를 줄인 뒤, GPU를 clean 시키고 재실행시켜 본다. del 명령어 python에서는 loop이 끝나도 loop 안에서 선언된 변수가 메모리를 차지하고 있기 때문에, del 명령어를 사용해서 삭제해주는 것이 필요하다. for x in range(10): i = x print(i) # 출력: 9 torch.cuda.empty_cache() 사용되지 않는 GPU 캐시를 정리하여 가용 메모리를 확보한다. del은 객체를 삭제하지만, 해당 객체에 대한 모든 참조가..

AI/PyTorch 2023.03.23

[PyTorch] Transfer Learning (전이 학습)

Transfer Learning 대량의 데이터 셋이 학습되어 있는 pre-trained model에 현재 데이터를 학습시켜 사용하는 방식이다. freeze pre-trained model을 가져와 일부 layer만 학습시키고 싶은 경우에 사용한다. 학습시키지 않을 layer를 freeze하여 파라미터 값이 업데이트되지 않게 한다. from torch import nn from torchvision import models class MyNewNet(nn.Module): def __init__(self): super(MyNewNet, self).__init__() # pre-train된 vgg19 모델 불러오기 self.vgg19 = models.vgg19(pretrained=True) self.linea..

AI/PyTorch 2023.03.23

[PyTorch] 모델 저장하기 및 불러오기

PyTorch를 사용하다보면, 학습 결과를 저장한 뒤, 불러와야 하는 경우가 생긴다. 이러한 상황을 위해 PyTorch로 만든 모델을 저장하고, 불러오는 방법에 대해 알아보자. state_dict란? 각 layer의 파라미터에 대한 정보가 들어있는 dict 타입의 객체이다. # 모델 정의 class TheModelClass(nn.Module): def __init__(self): super(TheModelClass, self).__init__() self.conv1 = nn.Conv2d(3, 6, 5) self.pool = nn.MaxPool2d(2, 2) self.conv2 = nn.Conv2d(6, 16, 5) self.fc1 = nn.Linear(16 * 5 * 5, 120) self.fc2 = n..

AI/PyTorch 2023.03.20

[PyTorch] Autograd

PyTorch에서 신경망 학습을 위해 지원하는 자동 미분 엔진인 Autograd에 대해 간단한 예제를 통해 알아보자. Autograd import torch from torchvision.models import resnet18, ResNet18_Weights model = resnet18(weights=ResNet18_Weights.DEFAULT) data = torch.rand(1, 3, 64, 64) labels = torch.rand(1, 1000) prediction = model(data) # 순전파 단계(forward pass) loss = (prediction - labels).sum() loss.backward() # 역전파 단계(backward pass) # 옵티마이저 생성 optim ..

AI/PyTorch 2023.03.20

[PyTorch] 모듈들에 custom 함수 적용시키기

모듈 안에는 하나 이상의 모듈들이 포함될 수 있고, 여러 모듈을 포함한 하나의 거대한 모듈을 모델이라고 부른다. 대부분의 torch.nn.Module의 method들은 모델에 method를 적용하면, 모델 내부의 모든 모듈들에도 적용시키는 기능을 지원한다. 그러나 우리가 직접 만든 custom 함수는 이 기능을 지원하지 않기 때문에, apply를 사용해 모델의 하위 모듈들에 함수를 재귀적으로 적용시킬 수 있다. Apply import torch from torch import nn from torch.nn.parameter import Parameter # Function class Function_A(nn.Module): def __init__(self, name): super().__init__() ..

AI/PyTorch 2023.03.17

[PyTorch] hook

Hook hook이란, 프로그래머가 본인의 패키지에 사용자가 custom 코드를 실행시킬 수 있도록 만든 인터페이스이다. def program_A(x): print('program A processing!') return x + 3 def program_B(x): print('program B processing!') return x - 3 class Package(object): """프로그램 A와 B를 묶어놓은 패키지 코드""" def __init__(self): self.programs = [program_A, program_B] self.hooks = [] def __call__(self, x): for program in self.programs: x = program(x) # Package를 ..

AI/PyTorch 2023.03.17

[Pytorch] Dataset과 DataLoader

대용량 데이터의 일부만 메모리에 적재하여 효율적으로 학습시키기 위해 필요한 Dataset과 DataLoader에 대해 알아보자. Dataset 모델에 입력할 데이터의 형태를 정의한다. torch.utils.data.Dataset을 상속받아 생성한 Custom Dataset 클래스는 __init__, __len__, __getitem__을 구현해야 한다. __init__ CSV 파일이나 XML 파일과 같은 데이터를 불러온다. 데이터의 전처리를 수행할 수 있다. __len__ 데이터셋의 전체 개수를 반환한다. __getitem__ 데이터셋에서 주어진 인덱스에 해당하는 데이터를 반환한다. import torch import pandas as pd from torch.utils.data import Datase..

AI/PyTorch 2023.03.16

[PyTorch] 파라미터 구현하기

PyTorch에서 모듈의 파라미터를 torch.nn.parameter.Parameter 클래스를 활용해 구현하는 방법에 대해 알아보자. torch.nn.parameter.Parameter Tensor의 하위 클래스로, 모듈의 파라미터 역할을 하는 클래스이다. Tensor 클래스가 아닌, Parameter 클래스로 모듈의 파라미터를 만들어야 모듈의 파라미터 목록에 자동으로 등록된다. import torch from torch import nn from torch.nn.parameter import Parameter class MyModel(nn.Module): def __init__(self): super().__init__() self.W1 = torch.Tensor([5]) self.W2 = Param..

AI/PyTorch 2023.03.16

[PyTorch] 신경망 모델과 torch.nn.module

PyTorch에서 제공하는 신경망 모델의 기본 클래스인 torch.nn.module 클래스에 대해 알아보자. torch.nn.module 모델의 구성 요소인 layer와 parameter를 담는 컨테이너이다. function이 모여 layer를 구성하고, layer가 모여 model이 만들어진다. torch.nn.module을 상속받은 클래스는 function이 될 수도 있고, layer, model이 될 수도 있다. import torch.nn as nn # 모델 클래스 예시 class MyModel(nn.Module): def __init__(self, input_dim, hidden_dim, output_dim): # 부모 클래스인 nn.Module 클래스의 생성자를 호출한다. super(MyMod..

AI/PyTorch 2023.03.16

[PyTorch] torch.reshape과 torch.Tensor.view의 차이

PyTorch에서 tensor의 차원을 재구성하는 함수인 reshape 함수와 view 함수의 각각의 특징과 차이점에 대해 알아보자. torch.reshape contiguous 속성을 만족하는 tensor가 인자로 주어진 경우, 데이터를 복사하지 않고, 같은 메모리 공간을 공유하는 새로운 tensor를 반환한다. 반면, contiguous 속성을 만족하지 않는 tensor가 인자로 주어진 경우, 데이터를 복사해 새로운 tensor를 생성해 반환한다. contiguous란 무엇일까? contiguous는 ‘인접한’이라는 뜻을 가진 단어로, tensor의 데이터들이 인덱스 순서대로 메모리가 인접해 있는지를 나타내는 속성이다. tensor1 = torch.randn(2, 3) tensor2 = tensor1..

AI/PyTorch 2023.03.14