본문 바로가기
728x90
반응형

파이토치10

DataLoader num_workers에 대한 고찰 Pytorch에서 학습 데이터를 읽어오는 용도로 사용되는 DataLoader는 torch 라이브러리를 import만 하면 쉽게 사용할 수 있어서 흔히 공식처럼 잘 쓰고 있습니다. 다음과 같이 같이 사용할 수 있겠네요. from torch.utils.data import DataLoader 상세한 설명이 기술되어 있는 공식 문서는 아래 링크에서 살펴볼 수 있습니다. https://pytorch.org/docs/stable/data.html#torch.utils.data.DataLoader torch.utils.data — PyTorch 1.13 documentation torch.utils.data At the heart of PyTorch data loading utility is the torch.ut.. 2023. 2. 3.
[파이토치] zero_grad()의 이해 Neural Network에서 parameter들을 업데이트 할때 우리는 zero_grad()를 습관적으로 사용한다. import torch as T import torch,optimizer as optim optimizer = optim.Adam(lr=lr, params=self.parameters()) ... optimizer.zero_grad() loss.backward() optimizer.step() zero_grad()의 의미가 뭔지, 왜 사용하는지 알아보장 TORCH.OPTIM.OPTIMIZER.ZERO_GRAD Optimizer.zero_grad(set_to_none=False)[source] Sets the gradients of all optimized torch.Tensor s to .. 2023. 1. 26.
[파이토치] 파이토치로 CNN 모델을 구현해보자! (ResNet편) 2번에 걸친 포스팅에서 소개드렸다시피 컴퓨터 비전 대회 중에 ILSVRC (Imagenet Large Scale Visual Recognition Challenges)이라는 대회가 있는데, 본 대회는 거대 이미지를 1000개의 서브이미지로 분류하는 것을 목적으로 합니다. 아래 그림은 CNN구조의 대중화를 이끌었던 초창기 모델들로 AlexNet (2012) - VGGNet (2014) - GoogleNet (2014) - ResNet (2015) 순으로 계보를 이어나갔습니다. 위의 그림에서 layers는 CNN layer의 개수(깊이)를 의미하며 직관적인 이해를 위해서 아래처럼 그림을 그려보았습니다. ResNet 개요 소개 ResNet이 소개된 논문의 제목은 Going Deeper with Convolut.. 2023. 1. 25.
[PyTorch] `model.eval()` 의미 딥러닝 모델의 코드를 살펴보다 보면 Evaluation 부분에서 꼭 이런 코드가 등장한다. def evaluation(model, criterion, ...): model.eval() criterion.eval() ... 무슨 의미인지 궁금해서 찾아보니, nn.Module에서 train time과 eval time에서 수행하는 다른 작업을 수행할 수 있도록 switching 하는 함수라고 한다. stackoverflow train time과 eval time에서 다르게 동작해야 하는 대표적인 예들은 Dropout Layer BatchNorm Layer 등등이 있다고 한다. .eval() 함수는 evaluation 과정에서 사용하지 않아야 하는 layer들을 알아서 off 시키도록 하는 함수인 셈이다. e.. 2023. 1. 10.
[PYTORCH] POINTWISE OPS 파이토치의 공식 문서에 Math operations 부분을 살펴보면 pointwise로 연산을 한다고 한다. pointwise로 연산을 한다는 것은 문자 그대로 함수의 정의역에 있는 각 점마다 연산을 한다는 내용이다. 즉, 특정 속성이 각 값을 고려하여 정의 된다는 것이다. Tensor를 구성하는 각 data에 대해 각각 연산을 적용한다는 뜻이다. 따라서 입력 텐서와 출력 텐서의 차원의 크기는 서로 같다. ▼ pointwise에 대한 수학적 정의 파이토치의 공식문서에서 소개한 Pointwise Ops 중 3개를 예시코드로 함께 알아보려 한다. torch.addcmul torch.exp torch.pow torch.addcmul torch.addcmul은 pointwise로 tensor1에 tensor2를.. 2023. 1. 10.
torch.nn.functional.interpolate torch.nn.functional.interpolate(input, size=None, scale_factor=None, mode='nearest', align_corners=None, recompute_scale_factor=None) input을 주어진 size또는 scale factor에 맞게 upsampling 또는 downsampling한다. interpolation에 쓰이는 알고리즘은 model에 따라 달라진다. 현재 temporal, spatial, volumetric sampling이 지원되고 있다. 즉 예상되는 input은 3-D, 4-D, 5-D shape이다. input dimension은 mini-batch x channels x [optional depth] x [optional.. 2023. 1. 9.
[PyTorch] Tensor 합치기: cat(), stack() 실험이 돌아가는 동안 심심하니까 하는 포스팅. PyTorch에서 tensor를 합치는 2가지 방법이 있는데 cat과 stack이다. 두가지는 현재 차원의 수를 유지하느냐 확장하느냐의 차이가 있다. 그림과 코드를 통해 사용법을 알아보자. Cat함수란? cat함수는 concatenate를 해주는 함수이고 concatenate하고자 하는 차원을 증가시킨다 (차원의 수는 유지된다). concatenate하고자하는 차원을 지정해주면 그 차원으로 두 tensor의 차원을 더한 값으로 차원이 변경된다. concatenate하고자하는 dimension을 지정해주지 않으면 default=0으로 설정된다. Cat함수의 시각화 Python 코드 import torch batch_size, N, K = 3, 10, 256 x.. 2023. 1. 9.
[Pytorch] squeeze와 unsqueeze 함수 사용법 정리 torch squeeze vs unsqueeze 이번 글에서는 파이토치에서 squeeze와 unsqueeze 함수의 용도와 사용 예시에 대해서 살펴보도록 하겠습니다. 이 글은 파이토치의 squeeze, unsqueeze 함수에 대한 공식 문서를 바탕으로 작성되었습니다. Pytorch squeeze 함수 사용 방법 torch squeeze 함수의 원리는 (A x B x 1 x C x 1) 형태의 텐서에서 차원이 1인 부분을 제거하여 (A x B x C) 형태로 만들어 주는 것입니다. 또한, 원하는 dimension 위치를 따로 선택하면, 해당 위치의 1만 삭제가 가능합니다. 단, 해당 차원 위치의 size가 1이 아니라면, 삭제가 불가능합니다. import torch # (A, B, 1, C, 1) 차원 .. 2023. 1. 9.
파이토치 nn 모듈 파이토치에는 torch.nn이라는 모든 신경망 아키텍처를 만들 수 있는 빌딩 블럭이 있는 전용 서브모듈이 있다. 파이토치에서는 빌딩 블럭을 모듈(module)이라 부든다.(다른 프레임워크에서는 계층(layer)이라고 일컫는다.) 파이토치 모듈은 nn.Module 베이스 클래스에서 파생된 파이썬 클래쓰다. 모듈은 하나 이상의 Parameter 객체를 인자로 받고, 텐서타입이며 훈련 과정을 통해 값이 최적화된다. 참고 서브 모듈은 list난 dict 객체에 들어간 형태가 아닌 최상위 레벨 속성이어야 한다! 그렇지 않으면 옵티마이저가 서브 모듈(파라미터)을 찾지 못한다. 모델이 리스트나 딕셔너리 형태의 서브 모듈을 요구하는 경우에 대응할 목적으로 nn.ModuleList와 nn.ModuleDict를 파이토치에.. 2023. 1. 9.
[Pytorch] hook (forward_hook, backward_hook) Hook 패키지 중간에 자기가 원하는 코드 끼워넣을 수 있는 부분 정도로 이해하면 될 듯하다! (register hook) hook: 일반적으로 hook은 프로그램, 혹은 특정 함수 실행 후에 걸어놓는 경우를 일컬음. pre-hook: 프로그램 실행 전에 걸어놓는 hook forward hook register_forward_hook: forward 호출 후에 forward output 계산 후 걸어두는 hook # register_forward_hook should have the following signature hook(module, input, output) -> None or modified output input은 positional arguments만 담을 수 있으며 (index 같은?) .. 2023. 1. 9.
728x90
반응형