본문 바로가기

728x90

Programming/PyTorch

(8)
[PyTorch] 모델 내 일부 레이어 freeze 하기 pretrained 모델을 가져와서 나의 데이터에 맞게 학습시킬 때 기존 모델의 전체적인 weight은 그대로 가져오고 classifier 역할을 하는 마지막 레이어만 내 데이터에 맞게 학습시키고 싶어졌다. 모델 내 레이어를 부분적으로 freeze 하기 위한 방법을 찾아보니 다음과 같이 모델의 파라미터를 불러와 requires_grad를 False로 두어 freeze하고 싶은 부분은 freeze하고, 가중치 업데이트를 하고 싶은 부분은 그대로 두면 된다! 나같은 경우는 모델의 마지막 레이어 'fc'만 학습을 시키고 싶어 아래와 같이 코드를 구성했다. for name, param in model.named_parameters(): if name.split('.')[1] == 'fc' : pass else ..
[PyTorch] IndexError: Dimension out of range (expected to be in range of [-1, 0], but got 1) torch.nn.CrossEntropyLoss() 를 사용해서 loss를 구하는 과정에서 만난 에러! 다름이 아니라 아무 생각 없이 accuracy를 구할 때처럼 argmax로 target을 넣어 loss를 구해서 난 에러였다! crossentropy의 계산 공식을 생각해보면 말도 안된다는 걸 알 수 있다. 당연히 각 타겟 별로의 confidence 값이 있어야 crossentropy를 구할 수 있는 것인데! 따라서 CrossEntropyLoss를 구할 때에는 argmax로 예측한 target을 넣기 전 confidence 값을 그대로 넣어주어야 한다.
[PyTorch] Tensor와 tensor PyTorch를 사용하다보면 Tensor가 있고, tensor가 있다. 그 둘의 차이는 무엇일까? 1. Tensor torch.Tensor란 PyTorch의 자료구조 클래스이다. tensor형 데이터를 담고 있는 클래스를 의미한다. 2. tensor torch.tensor는 어떤 데이터를 tensor 자료형으로 만들어주는 함수이다. (내부적으로는 데이터를 copy하는 구조) 즉, tensor를 통해서 어떠한 데이터를 Tensor 데이터 타입으로 만들어준다고 보면 된다. 다음 코드를 보면 의미를 이해하기 더 쉬울 것이다. >>> a = torch.tensor([1]) >>> a tensor([1]) >>> type(a) torch.Tensor 아래 document를 살펴보면 Tensor 구조체에서 사용할 ..
[PyTorch] DataLoader의 역할 및 사용법 DataLoader는 데이터를 미니 배치 단위로 나누어서 제공해주는 역할을 합니다. 학습을 하기 위해서 데이터를 읽어올 때 사용하게 됩니다. dataset 인자에는 pytorch Dataset 객체를 넣어주면 됩니다. DataLoader(dataset, batch_size=1, shuffle=False, sampler=None, batch_sampler=None, num_workers=0, collate_fn=None, pin_memory=False, drop_last=False, timeout=0, worker_init_fn=None, *, prefetch_factor=2, persistent_workers=False) 인자를 하나씩 살펴보겠습니다. - batch_size : 말 그대로 batch_si..
[PyTorch] Dataset Types 정리 (Map-style datasets, Iterable-style datasets) 파이토치에서는 크게 두 가지 타입의 데이터셋을 지원해줍니다. 1) Map-style datasets map-style datasets은 __getitem__()과 __len()__을 구현하는 데이터셋으로 index(key)를 통해 데이터에 접근할 수 있는 경우를 의미합니다. dataset[index]를 통해 데이터셋의 특정 데이터에 접근할 수 있는 형태입니다. from torch.utils.data import Dataset class MyMapDataset(Dataset): def __init__(self, data): self.data = data def __len__(self): return len(self.data) def __getitem__(self, index): return self.dat..
[PyTorch] torch.nn.Embedding 의 역할 * PyTorch 공식 문서를 참고했습니다. Embedding — PyTorch 1.10.0 documentation Shortcuts pytorch.org torch.nn.Embedding 모듈은 학습 데이터로부터 임베딩 벡터를 생성하는 역할을 합니다. 보통은 pretrain된 임베딩을 사용하는 경우도 많습니다! 임베딩을 만드는 원리는 아래 사이트에 자세한 설명이 되어 있으니 한 번 읽어보시면 좋을 것 같습니다. 07. 파이토치(PyTorch)의 nn.Embedding() 파이토치에서는 임베딩 벡터를 사용하는 방법이 크게 두 가지가 있습니다. 바로 임베딩 층(embedding layer)을 만들어 훈련 데이터로부터 처음부터 임베딩 벡터를 학습 ... wikidocs.net 간략하게 설명하자면 과정은 다..
[PyTorch] torch.clamp 함수 * Pytorch 공식 페이지 설명을 참고했습니다. torch.clamp — PyTorch 1.10.0 documentation Shortcuts pytorch.org Clamp 함수는 입력으로 들어오는 모든 값들을 [min, max]의 범위 안으로 조정해주는 역할을 합니다. 조정해주는 방법은 다음 식과 같습니다. input 값과 min 값 중 큰 값 = a a와 max 값 중 작은 값 = 최종 반환 값 즉, 입력 값이 min < x(input) < max이면 x가 그대로 나오지만 min 보다 작으면 min 값이, max 보다 크면 max 값이 나오는 구조입니다! 참고로 min 값과 max를 꼭 둘다 설정할 필요는 없습니다. min을 설정하지 않으면(min = None), lower bound가 존재하지..
[PyTorch] torch.nn.ModuleList()란? Tensorflow만 주로 사용하다가 pytorch를 사용한 모델을 베이스로 개선하려니 모르는 것 투성이라서 하나씩 정리해보기로 한다! ModuleList — PyTorch 1.10.0 documentation Shortcuts pytorch.org [ModuleList] 모듈을 리스트 형태로 저장하는 것을 의미한다. 파이썬의 일반적인 리스트처럼 인덱스로 접근이 가능하다. 공식 홈페이지에 있는 사용 예제를 살펴보자. class MyModule(nn.Module): def __init__(self): super(MyModule, self).__init__() self.linears = nn.ModuleList([nn.Linear(10, 10) for i in range(10)]) def forward(se..

728x90