본문 바로가기

Python

(73)
[Pytorch] Dataset과 Dataloader 데이터 샘플을 처리하는 코드는 지저분(messy)하고 유지보수가 어려울 수 있다. 더 나은 가독성(readability)과 모듈성(modularity)을 위해 데이터셋 코드를 모델 학습 코드로부터 분리하는 것이 이상이다. PyTorch는 torch.utils.data.DataLoader와 torch.utils.data.Dataset의 두 가지 데이터 기본 요소를 제공하여 미리 준비된(pre-loaded) 데이터셋 뿐만 아니라 가지고 있는 데이터를 사용할 수 있도록 한다. Dataset은 샘플과 정답(label)을 저장하고, DataLoader는 Dataset을 샘플에 쉽게 접근할 수 있도록 순회 가능한 객체(iterable)로 감싼다. PyTorch의 도메인 특화 라이브러리들은 (FashionMNIST와..
[Pytorch] .requires_grad(), torch.no_grad(), model.eval() .requires_grad() 신경망에서, 변화도를 계산하지 않는 매개변수를 일반적으로 고정된 매개변수(frozen parameter)라고 부른다. 이러한 매개변수의 변화도가 필요하지 않다는 것을 미리 알고 있으면, 신경망 모델의 일부를 "고정(freeze)"하는 것이 유용하다. (이렇게 하면 autograd 연산량을 줄임으로써 성능상의 이득을 제공한다.) 미세조정(finetuning)을 하는 과정에서, 새로운 정답(label)을 예측할 수 있도록 모델의 대부분을 고정한 뒤 일반적으로 분류 계층(classifier layer)만 변경한다. torch.no_grad() gradient 계산을 비활성화하는 context manager이다. no_grad()는 Tensor.backward()를 부르지 않아도 ..
Custom Dataset 생성 Dataset의 기본 구성 요소from torch.utils.data import Dataset # torch.utils.data의 Dataset 라이브러리 상속class CustomDataset(Dataset): def __init__(self): pass def __getitem__(self, index): pass def __len__(self): pass __init__ 메서드데이터의 위치나 파일명과 같은 초기화 작업을 위해 동작한다. 일반적으로 CSV파일이나 XML파일과 같은 데이터를 이때 불러온다. 이렇게 함으로써 모든 데이터를 메모리에 로드하지 않고 효율적으로 사용할 수 있다. 여기에 이미지를 처리할 transforms들을 Compos..
[Python] directory 다루기 1. OS OS 모듈을 사용해서 directory를 다룰 수 있다. os.mkdir 디렉토리를 만든다 import os os.mkdir("log") os.path.isdir 디렉토리가 있는지 확인 if not os.path.isdir("log"): os.mkdir("log") os.listdir() 지정한 디렉토리 내의 모든 파일과 디렉토리의 list를 리턴한다. os.path.splitext 확장자만 따로 떨어뜨린다. name = r'c:\temp\python\data.txt' print(os.path.splitext(name)) # ('c:\\temp\\python\\data', '.txt') 2. glob glob는 파일들의 리스트를 뽑을 때 사용한다. 파일의 경로명을 이용해서 입맛대로 사용할 수 ..
[Python] tqdm tqdm은 아랍어로 Progress라는 의미(taqadum, تقدّم)로 작업 진행률을 표시할 수 있다. from tqdm import tqdm from time import sleep for i in tqdm(range(1, 600)): sleep(0.1) # 무언가 시간이 많이 소요되는 연산군 위의 코드를 실행시키면 아래와 같이 진행상황에 대한 정보가 시각화 된다. 위의 진행상태에 대한 정보에서 43%는 진행률, 257/599는 전체 599번 중 현재 257번째 작업 수행중, 00:27
주피터 노트북 괄호() 자동으로 닫히게 하기 Settings에 auto close bracket
[Python] 이진 탐색 라이브러리 bisect 알고리즘 문제를 풀다 보면 이진 탐색을 사용해야할 때가 많다. 다른 언어에서는 다음과 같이 직접 반복문을 만들어, 이진 탐색 알고리즘을 구현한다 def bisect(a, x, lo=0, hi=None): if lo < 0: raise ValueError('lo must be non-negative') if hi is None: hi = len(a) while lo < hi: mid = (lo + hi) // 2 if a[mid] < x: lo = mid + 1 else: hi = mid return lo mylist = [1, 2, 3, 7, 9, 11, 33] print(bisect(mylist, 3)) 파이썬에서는 bisect.bisect 메소드를 사용하면 훨씬 간단하게 코드를 짤 수 있다. bise..
[Python] heapq (min heap) 힙은 모든 부모 노드가 자식보다 작거나 같은 값을 갖는 이진 트리이다. 힙은 모든 k에 대해 heap[k]