국문과 유목민

[일일리포트] Day 06 본문

IT 견문록/2022_부스트캠프 AITech 3기(100일)

[일일리포트] Day 06

논곰 2022. 1. 24. 23:45

해당 일일리포트에서는 네이버 커넥트에서 진행하는 '부스트캠프 AI Tech 3기'에서 배운 내용을 다루고 있습니다. 저작권 이슈 때문에 관련 자료를 올릴 수 없어, 핵심 이론과 코드 위주로 정리하고 있기에 내용이 부족할 수 있습니다.

▶ Today I Learned (핵심 요약 정리)

Introduction_to_Pytorch

  • TensorFlow & Pytorch: 딥러닝 표준으로 사용되는 프레임워크
  • Computational Graph: 연산 과정을 그래프로 표현하는 것을 의미
    • TensorFlow는 Define and run 이라는 특성을 가지며, 그래프를 먼저 정의하고 실행시점에 넣어준다.
    • Pytorch는 Dynamic Computational Graph라는 특성을 가지며, 실행을 하면서 그래프를 생성하는 방식이다.
  • Pytorch 사용이유
    • 사용하기 편하기 때문에 Pytorch를 사용한다.
      • Numpy 구조
      • AutoGrad를 지원
      • 다양한 형태의 DL을 지원하는 함수와 모델을 지원 (Dataset, Multi-GPU, Data-Augmentation)

PytorchBasics

  • Tensor: 다차원 Array를 표현하는 pytorch 클래스이며, 사실상 numpy의 ndarray와 동일하다. torch.Tensor(np.arange(10)) 데이터 타입도 numpy와 동일하게 사용 가능
  • Numpy like operations: 기본적인 numpy의 함수들은 Tensor에서 동일하게 사용할 수 있다.
data = [[3, 5, 20],[10, 5, 50], [1, 5, 10]]
# tensor
x_data = torch.tensor(data)
x_data.flatten()

# numpy
x_data.numpy()
x_data.shape
x_data.dtype
x_data.T

torch.ones_like(x_data)
x_data.device # 모델 돌리는 위치(CPU, GPU)

# 런타임 GPU로 변경 시
if torch.cuda.is_available():
    x_data_cuda = x_data.to('cuda')
x_data_cuda.device
  • Tensor Operations: view, squeeze, unsqueeze 등으로 tensor조정가능
    • view: reshape와 동일하게 tensor의 shape을 변환 (reshape보다는 view 사용 권장)
    • squeeze: 차원의 개수가 1인 차원을 삭제(압축)
    • unsqueeze: 차원의 개수가 1인 차원을 추가
  • view와 reshape의 차이: view는 메모리를 가져오지만, reshape는 copy를 해서 아예 새로운 값을 가져온다.
  • Numpy의 수학연산 대부분 사용가능하지만 행렬 곱셈 시에는 'dot'이 아닌 'mm' or 'matmul'함수를 사용한다.

Tensor Operations for ML/DL formula

import torch
import torch.nn.functional as F
# softmax 함수
tensor = torch.FloatTensor([0.5, 0.7, 0.1])
h_tensor = F.softmax(tensor, dim=0)

# one-hot벡터
F.one_hot(y_label)

# 카르티잔 곱
tensor_a = torch.tensor(a)
tensor_b = torch.tensor(b)
torch.cartesian_prod(tensor_a, tensor_b) #모든 곱의 경우의 수를 구해준다.

AutoGrad

$$ Q = 3a^3 - b^2 $$

a = torch.tensor([2., 3.], requires_grad=True) # 임의로 넣은 값?
b = torch.tensor([6., 4.], requires_grad=True)
Q = 3*a**3 - b**2

external_grad = torch.tensor([1., 1.])
Q.backward(gradient=external_grad) # gradient값
a.grad

Pytorch_Project_Structure

  • 템플릿 사용의 필요성
    • 프로젝트 초기 단계에서는 디버깅 등을 위해 대화식 개발과정이 유리하다. 하지만, 배포 및 공유 단계에서 개발 용이성 확보 및 유지보수 향상의 필요성 때문에 (템플릿을 사용해) 프로그램화 시킬 필요가 있다.
  • 코드도 레고블록처럼 OOP + 모듈을 모아 '프로젝트'를 만들 수 있다.
    • 다양한 프로젝트 템플릿이 존재하며 실행, 데이터, 모델, 설정, 로깅, 지표, 유틸리티 등 다양한 모듈들를 분리해 프로젝트가 템플릿화되어있다
  • 참조 Git 링크) https://github.com/victoresque/pytorch-template

기본과제

▶ Review (생각)

 저번주 파이썬과 수학을 배우고 오늘 바로 파이토치 수업을 들어가게 되었다. 일주일 강의 분량이 8시간도 되지 않아서 쉽게 생각했었는데, 과제가 메인인 수업이었다는 것을 오늘 깨달아버렸다. 오전에 들은 파이토치 강의는 기초 강의로 간단한 설치나 기본적인 이론 수업이었다면, 과제는 조금 더 딥하게 들어가서 파이토치의 기초부터 쌓아올리는 느낌이 강했다.

 파이토치 과제의 분량이 많기는 했으나, 꽤나 정성들여 써있었고 파이토치 초심자라도 설명대로 따라가면 스스로 이해하고 코드를 작성할 수 있게 되어있었다. 관련된 내용을 조금 더 다루고 싶었지만, 시간적으로 한계가 있기도 하고 저작권 관련 이슈 때문에 좀 더 깊게 정리하지 못하는 부분이 아쉬웠다. 그래서 나중에 파이토치에서 자주 사용하게 될 함수나 모듈 등에 대해서는 별도의 포스팅으로 정리해보고자 한다.

 과제를 하면서 이전에 사용해봤던 파이토치를 조금 더 깊게 이해하게 됐다는 느낌을 받았다. 파이토치 공식 Docs를 활용하는 방법을 익히고, 이를 활용해 예제 코드를 직접 구현해보면서 설명을 더 잘 이해할 수 있었다. 그리고 nn.module의 개념이나 파이토치가 구동하는 방식 등을 여러 Case를 통해 접해보면서 스스로 이해할 수 있는 기회가 됐던 것 같다.

'IT 견문록 > 2022_부스트캠프 AITech 3기(100일)' 카테고리의 다른 글

[일일리포트] Day 08  (0) 2022.01.26
[일일리포트] Day 07  (0) 2022.01.25
[1주차] 학습 정리 및 회고  (0) 2022.01.21
[일일리포트] Day 05  (0) 2022.01.21
[일일리포트] Day 04  (0) 2022.01.20
Comments