인공지능/머신러닝

6. 딥러닝을 위한 프레임 워크 - 파이토치(PyTorch)

으노으뇨 2023. 9. 19. 22:56
728x90
반응형
SMALL

파이토치(PyTorch) 

개념

 파이썬 오픈소스 라이브러리

 딥러닝을 위한 프레임 워크 : 신경망을 생성하고 학습시킴

 자연어처리, 이미지 처리 등 다양한 처리를 위해 사용됨

모듈과 클래스
모듈/클래스 설명
torch 주요 네임 스페이스
torch.autograd 자동미분함수 내장
torch.nn 신경망 구축을 위한 데이터구조나 레이어 정의
torch.optim 확률적 경사하강법(SGD)를 중심으로 최적화 알고리즘 구현
torch.utils.data SGD 반복연산 시 사용하는 미니 배치용 유틸리티 함수 포함
torch.utils.data.DataLoader 순회가능한 객체(iterable)로 처리하여 Dataset의 샘플에 쉽게 접근할 수 있도록 함
torch.utils.data.Dataset 샘플과 정답을 저장
ex )
 from torch.utils.data import Dataset
 from torch.utils.data import DataLoader
torch.onnx 서로 다른 딥러닝 프레임워크간 모델 공유시 사용하는 포맷
onnx(open neural network exchange)의 포맷. export할때 사용
파이토치의 텐서

 텐서를 사용하여 모델의 입력(input), 출력(output), 매개변수들의 부호화(encode)진행

 벡터형태의 텐서 : 1차원으로 구성된 값

 행렬형태의 텐서 : 2차원으로 구성된 값

파이토치 문법
종류 소스 설명
텐서 초기화 변수명=torch.tensor(데이터) 데이터를 이용한 텐서 생성
torch.zeros_like(행렬) 0으로 채워진 텐서 생성
torch.ones_like(행렬) 1으로 채워진 텐서 생성
torch.rand_like(x, dtype=자료형)
ex ) 
data3=torch.rand_like(x, dtype=torch.float)
0~1사이의 소수로 채워진 텐서 생서
shape = (차원 ex : 2행 3열인경우 (2,3,))
변수명 = torch.rand(shape)
shape를 모두 랜덤으로 채운다
shape = (차원 ex : 2행 3열인경우 (2,3,))
변수명 = torch.ones(shape) 
shape를 모두 1로 채운다
shape = (차원 ex : 2행 3열인경우 (2,3,))
변수명 = torch.zeros(shape) 
shape를 모두 0으로 채운다
torch.from_numpy(넘파이 배열) 넘파이 배열을 텐서로 변경
import torch
import numpy as np
data=np.array([[1,2],[3,4]])
x=torch.tensor(data)
print(x)
data1=torch.ones_like(x) #x의 속성을 유지
print(data1)
data2=torch.zeros_like(x) #x의 속성을 유지
print(data2)
data3=torch.rand_like(x, dtype=torch.float) #x의 속성을 유지
print(data3)

결과)


차원 및 크기 관련 메서드
동작 소스 설명
차원 보여주기 변수명.dim() 차원 보여주기
크기 보여주기 변수명.size() 크기 보여주기
변수명.shape 크기 보여주기
텐서 크기 변경하기
(view 사용)
변수명.view[-1,n] 행은 상관없고, 열을 무조건 n개로 맞춤
변수명.view[n,-1] 열은 상관없고, 행을 무조건 n개로 맞춤
행렬의 차원 변경 Squeeze :1차원인경우, 차원 제거 위치를 지정하면 해당 위치의 1만 제거가능.
위치 지정하지 않으면 왼쪽부터 하나씩 제거
ex : shape=[3,1]인 경우 squeeze(1)이면, [3] 즉 벡터가 됨
UnSqueeze 차원 추가
위치를 지정하면 해당 위치에 size가 1인 빈 공간을 채워주며차원 확장
ex : shape=[3]인 경우 unsqueeze(0)이면 [1,3]의 행렬이 됨
import torch
t=torch.FloatTensor([[
[0.,1.,2.]
, [3.,4., 5.]]
, [[6.,7.,8.]
, [9.,10.,11.]]
])
print(t.view([-1, 2]))
print(t.view([-1, 1,2]))

실행결과
연산
연산 소스 설명
텐서의 합 변수명.sum(dim=0 or 1) dim=0 열단위, dim=1 행단위 연산. dim이 없으면 전체 텐서를 대상으로 연산
평균구하기 변수명.mean(dim=0 or 1)  
행렬곱 행렬1.matmul(행렬2) @을 적어도 무방
텐서 연결하기 touch.cat([])  
내용 덮어쓰기 _ 사용  

 

728x90
반응형
LIST