
torch : 주요 네임 스페이스
torch.autograd : 자동미분함수 내장
torch.nn : 신경망 구축을 위한 데이터구조나 레이어 정의
torch.optim : 확률적 경사하강법(SGD)를 중심으로 최적한 알고리즘 구현
torch.utils.data : SGD 반복 연산 시 사용하는 미니 배치용 유틸리티 함수 포함
(1) torch.utils.data.DataLoader :
순회 가능한 객체(iterable)로 처리하여 DataSet의 샘플에 쉽게 접근할 수 있도록 함
(2) torch.utils.data.DataSet :
샘플과 정답을 저장
(3) 예시
from torch.utils.data import DataSet
from torch.utils.data import DataLoader
torch.onnx
텐서 초기화
변수명 = torch.tensor(데이터)
(1) 0으로 채워진 텐서 : torch.zeros_like(행렬)
(2) 1으로 채워진 텐서 : torch.ones_like(행렬)
(3) 0 ~ 1 사이의 소수로 채워진 텐서 생성 : torch.ran_lie(x, dtype=자료형)
예시 : data3 = torch.rand_like(x, dtype=torch.float)
텐서 초기화 : 형상(shape)를 제시하고 텐서 생성
shape = (차원 ex: 2행 3열인 경우(2, 3))
변수명 = torch.rand(shape) # 바로 형상 적어도 됨 ex: torch.rand(2, 3)
변수명 = torch.ondes(shape) # 바로 형상 적어도 됨 ex: torch.ones(2, 3)
변수명 = torch.zeros(shape) # 바로 형상 적어도 됨 ex: torch.zeros(2, 3)
넘파이 배열을 텐서로 변경
torch.from_numpy(넘파이 배열)
import torch
import numpy as np
data = np.array([[1, 2], [3, 4]])
x = torch.tensor(data) # 텐서로 만듦
x
torch.ones_like(x) # x의 속성 유지
torch.zeros_like(x) # x의 속성 유지
torch.rand_like(x, dtype=torch.float) # x의 속성 유지
차원 보여주기
변수명.dim() # 차원 보여주기
크기 보여주기
변수명.sizez() # 크기 보여주기
텐서 크기 변경 : view 사용
변수명.view[-1,n] : 행은 상관없고, 열을 무조건 n개로 맞춤 변수명.view[n,-1] : 열은 상관없고, 행을 무조건 n개로 맞춤
ex :
print(t.view([-1, 2])) #열을 두개로
print(t.view([-1, 1,2])) # 행=1, 열 = 2
파이토치 문법 - 차원 및 크기
행렬의 차원 변경
(1) Squeeze : 1차원인 경우, 차원 제거
위치를 지정하면 해당 위치의 1만 제거 가능
위치 지정하지 않으면 왼쪽부터 하나씩 제거
예시 : shape=[3,1]인 경우 squeeze(1)이면, [3] 즉 벡터가 됨
(2) UnSqueeze : 차원 추가
위치를 지정하면 해당 위치에 size가 1인 빈 공간을 채워주면 차원 확장
예시 : shape=[3]인 경우 unsqueeze(0)이면 [1, 3]의 행렬이 됨
# 차원 및 크기
t = torch.FloatTensor([
[
[0., 1., 2.],
[3., 4., 5.]
],
[
[6., 7., 8.],
[9., 10., 11]
]
])
t.view([-1, 2]) # 열 2개로
t.view([-1, 1, 2]) # 행 = 1, 열 = 2
(1) 텐서의 합 / 평균 구하기
변수명.sum(dim = 0 or 1) # dim = 0 열 단위, dim=1 행단위 연산. dim이 없으면 전체 텐서를 대상으로 연산
변수명.mean(dim = 0, or 1)
(2) 사칙연산과 슬라이싱은 넘파이와 같음
(3) 행렬곱 : 행렬1.matnul(행렬2) # @를 적어도 무방
(4) 텐서 연결하기 : torch.cat([])
(5) 내용 덮어쓰기 : _ 사용
# 연산
data = np.array([[1, 2], [3, 4]])
x = torch.tensor(data)
x
x.sum(dim = 1) # 행 단위
import torch
import numpy as np
# 해보기 1
t = torch.FloatTensor([1, 2, 3])
t
t.dim() # 차원 보여주기
t.size() # 크기 보여주기
t2 = torch.FloatTensor([[1., 2.],
[3., 4.],
[5., 6.]])
t2
t2.dim()
t2.size()
import torch
import numpy as np
# 해보기 2
t3 = torch.FloatTensor([[1.], [2.]])
t4 = torch.FloatTensor([[3.]]) # 브로드 캐스팅
t3 + t4
t3.mean()
t3.mean(dim = 0)
t5 = torch.FloatTensor([[1., 2.], [3., 4.]])
t6 = torch.FloatTensor([[1.], [2.]])
t5.matmul(t6) # 행렬곱