PyTorch발행일 2024. 12. 12.원본 https://blog.naver.com/jword_/223690283059 ↗

pytorch(파이토치)의 기본 모듈 알아보기

pytorch(파이토치)의 기본 모듈 알아보기 — #pytorch #파이토치 #개발자의도구들 #파이토치모듈 #파이토치기본 #딥러닝옵티마이저 #파이토치transforms...

#pytorch#Naver Blog

#pytorch #파이토치 #개발자의도구들 #파이토치모듈 #파이토치기본 #딥러닝옵티마이저 #파이토치transforms #파이토치torchvision

​

컴퓨터공학과 학사과정 중 공부한 내용을 정리하였습니다.

\* 본글은 PC버전에 최적화 되어있습니다.

​

딥러닝 글을 정리하는 이유

AI series

AI가 핫하지만, AI에 대해서 공부해본 경험은 거의 없었습니다. 하지만, 이번학기에 기회가 생겨 딥러닝에 대해서 공부를 하며 실습을 진행했습니다. 이론으로 배운 개념들을 실습에 적용하기는 하는데, 원리를 모르니 그냥 막연하게 따라만 하는 것 같아서 많이 답답했습니다.

​

이번 시험기간에 공부한 내용을 최대한 정리해서 저와 같이 파이토치에 입문하시는 분들에게 도움이 되었으면 좋겠습니다.

INDEX

  • 학습법
  • Modules
  • torchivision
  • transforms
  • 정규화?
  • dataLoader
  • iter()
  • functional
  • optimizer

​

학습법

딥러닝을 응용하여 모델을 만드는 걸 뭐라고 정의해야할지 모르겠습니다.. 딥러닝을 입문하면 거의 99%책에서 신경망, 퍼셉트론, CNN, RNN 등에 대해 다루는데, 우선 기본적으로 해당 이론들을 충분히 익히는 단계가 필요합니다.

​

해당 이론을 어느정도 안다 싶으면, 실습에 들어가면 되는데, 대부분 pytorch module에서 이론에서 배운 식들을 구현해두었기 때문에 가져다가 쓰는 느낌으로 접근하면 될 것 같습니다.

​

그럼 해당 모듈이 어떤 기능들을 지원하는지 알아둬야 하는데, 암기할 필요는 없고, 사용하다보면 익숙해지리라 생각됩니다. (물론 저는 시험 때문에 암기를 했습니다.)

Modules

이번글에서는 모든 pytorch 모듈을 다루지는 않을 것이고, 제가 공부하면서 이건 왜쓰는거지 궁금했던 모듈들 위주로 정리하였습니다.

📦 torchvision

torchvision은 파이토치 생태계 내에서 컴퓨터 비전과 관련된 다양한 기능, 데이터 및 모델을 제공하는 모듈입니다.

​

  • 대표적으로 이미지 분류, 물체 감지, 세그멘테이션 등에 사용되는 유명 데이터 셋 CIFAR10, ImageNet, COCO 등을 쉽게 로드할 수 있습니다.
  • 이미지 전처러(변환) 함수나 유명한 사전 학습 모델 ResNet, VGG, AlexNet등을 쉽게 불러오고 활용이 가능합니다.
python 코드 예제
                                    import torchvision

trainset = torchvision.datasets.CIFAR10( #torchvision의 datasets은 다양한 데이터를 제공
    root = '/data',     # 데이터 저장 경로
    train = True,       # 학습용 데이터로 지정
    downlad = True,     # 데이터가 없다면 원격 다운로드 허용
    transform=transform # 데이터 변환적용
)
📦 transforms

torchvision에 포함된 모듈로 이미지 데이터 전처리를 손쉽게 할 수 있는 여러가지 변환 함수를 제공합니다.

​

  • 이미지를 텐서로 변환: toTensor()
  • 이미지 크기 조정 : Resize()
  • 랜덤 자르기 : RandomCrop()
  • 좌우 반전: RandomHorizontalFlip()
  • 정규화 : Normalize()

​

이런 변환들은 transfroms.Compose를 통해 연쇄적으로 적용할 수 있습니다.

python 코드 예제
                                    import torchvision.transforms as transforms

# custom transform을 정의한다.
custom_transform = transforms.Compose([  # transform 변환을 연쇄 적용 하겠다.
    transforms.toTensor(),   # transform이 적용되면 해당 데이터를 Tensor로 변환
    transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))  # 정규화 시행
])
text 코드 예제
                                    🙋‍♂️ 정규화란?
- 이미지 데이터를 전처리하는 과정이다.
- toTensor() 적용시 모든 픽셀 값의 범위가 [0, 1] 사이의 값을 가지게 된다 - 이것도 정규화의 일종
- Normalize는 해당 픽셀의 RGB값을 조정하는 것이다.
  - .Normalize((R채널 평균, G채널 평균, B채널 평균),
               (R채널 표준편차, G채널 표준편차, B채널 표준편차))
- 해당 픽셀 값에서 평균을 빼고, 표준편차로 나눈 값으로 새롭게 값이 조정된다.

🙋‍♂️ 반정규화
- 정규화된 데이터를 원래대로 되돌리러면 정규화 과정을 역으로 수행하면 된다.
   - 정규화된 값에 표준편차를 곱하고 평균을 더해주면 됨
📦DataLoader

기본적으로 딥러닝 모델은 막대한 데이터를 통해 학습을 합니다. 이 막대한 데이터를 메모리에 한번에 올려서 처리할 수가 없습니다(물리적 한계). 데이터를 처리하기 위해서는 분할하여 부분씩 처리를 하면되는데 이런 기능이 가능하도록 하는 것이 바로 DataLoader입니다.

​

  • pytorch 내장 모듈입니다.
  • 데이터를 효율적으로 메모리에 load할 수 있도록 돕습니다.
  • DataSet 객체로 부터 샘플을 가져와 모델 학습에 용이한 형태로 batch 단위로 묶습니다.
  • 데이터 섞기(shuffle), 병렬처리(num\_workers), 배치 크기(batch\_size)을 쉽게 조정할 수 있습니다.

​

text 코드 예제
                                    my_test_data = torchvision.datasets.CIFAR10(
    root = './data',
    train = True,
    download = True,
    transform=custom_transform
)
# 학습 데이터 가져오기

test_data_loader = torch.utils.data.DataLoader(
    my_test_data,
    batch_size = 4, # 배치 사이즈 설정
    shuffle = True, # 데이터 무작위로 섞기
    num_workers=2   # Data load에 사용할 스레드 수
)
📦iter()

iter() 함수는 DataLoader를 순회 가능한 iterator로 변환한 객체입니다.

text 코드 예제
                                    my_data_iter = iter(test_data_loader) # test_data_loader를 iterable한 객체로 변환한다.
images. label = next(my_data_iter)    # next()로 해당 iter를 호출시, 한 배치의 데이터를 가져옴
                                      # 지금은 데이터가 images와 label 형태로 저장되어있다.
📦nn.functional
python 코드 예제
                                    import torch.nn as nn
import torch.nn.functional as F

functioanl 모듈은 함수형 인터페이스를 제공하는 모듈입니다. 신경망 계층에서 사용되는 연산을 함수 형태로 제공하기 때문에 매우 편리하게 연산을 수행시킬 수 있습니다.

​

상태를 가지지 않고 단순히 입력 텐서에 해당 연산을 수행하는 순수 함수형 연산을 모아둔 모듈입니다.

📦optimizer (feat. Adam)

optimizer은 학습과정에서 손실함수를 최소화 하는데 적용되는 알고리즘입니다. 깊게 알아보면 학습 분량이 많아져서 우선은 이런게 있고, 자주 사용한다 정도만 알면 될 것 같습니다..

​

Adam은 Adpative Moment Estimation의 약어로 하이퍼 파라미터에서도 빠르고 안정적인 수렴을 도와 현재에서 가장 많이 사용되는 알고리즘 중 하나입니다.

참고자료

https://pytorch.org/docs/stable/nn.functional.html

https://www.educative.io/answers/what-is-pytorch-dataloader

https://teddylee777.github.io/pytorch/torchvision-transform/

https://musstafa0804.medium.com/optimizers-in-deep-learning-7bf81fed78a0

​