본문 바로가기

Python

(74)
[Pytorch] Transform 데이터가 항상 머신러닝 알고리즘 학습에 필요한 최종 처리가 된 형태로 제공되지는 않는다. 변형(transform)을 해서 데이터를 조작하고 학습에 적합하게 만들자. 모든 TorchVision 데이터셋들은 변형 로직을 갖는, 호출 가능한 객체(callable)를 받는 매개변수 두개 ( 특징(feature)을 변경하기 위한 transform과 정답(label)을 변경하기 위한 target_transform)를 갖는다 torchvision.transforms모듈은 주로 사용하는 몇가지 변형(transform)을 제공한다. FashionMNIST 특징(feature)은 PIL Image 형식이며, 정답(label)은 정수(integer)이다. 학습을 하려면 정규화(normalize)된 텐서 형태의 특징(feat..
[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. OSOS 모듈을 사용해서 directory를 다룰 수 있다.os.mkdir디렉토리를 만든다import osos.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') os.path.abspath(path)절대 경로 반환import osos.path.abspath(__file__)>>> '/Users..
[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 파이썬에서는 bisect.bisect 메소드를 사용하면 훨씬 간단하게 코드를 짤 수 있다. biset_left(a, x): 정렬된 순서를 유지하면서 배열 a에 x를 삽입할 가장 왼쪽 인덱스를 반환 ( C++의 lower_bound와 동일)bisect_right(a, x): 정렬된 순서를 유지하면서 배열 a에 x를 삽입할 가장 오른쪽 인덱스를 반환 (C++의 upper_bound와 동일) from bisect import bisect_left, bisect_righta = [1, 2, 4, ..