파이토치(PyTorch)
페이스북이 초기 루아(Lua)언어로 개발된 토치(Torch)를 파이썬 버전으로 개발하여 2017년도에 공개
초기에 토치(Torch)는 넘파이(Numpy) 라이브러리처럼 과학 연산을 위한 라이브러리로 공개
이후 GPU를 이용한 텐서 조잦 및 동적 신경망 구축이 가능하도록 딥러닝 프레임워크로 발전시킴
파이썬답게 만들어졌고, 유연하면서도 가속화된 계산 속도를 제공
파이토치 모듈 구조
PyTorch의 구성요소
torch: Main Namespace, Tensor등의 다양한 수학 함수가 포함
torch.autograd: 자동 미부 기능을 제공하는 라이브러리
torch.nn: 신경망 구축을 위한 데이터 구조나 레이어 등의 라이브러리
torch.multiprocessing: 병렬처리 기능을 제공하는 라이브러리
torch.optim: SGD(Stochastic Gradient Descent)를 중심으로 한 파라미터 최적화 알고리즘 제공
torch.utils: 데이터 조작등 유틸리티 기능 제공
torch.onnx: ONNX(Open Neural Network Exchange), 서로 다른 프레임워크 간의 모델을 공유할 때 사용
텐서(Tensor): 다차원에 대한 데이터 표현 방법
데이터 표현을 위한 기본 구조로 텐서(tensor)를 사용
텐서는 데이터를 담기위한 컨테이너로서 일반적으로 수치형 데이터를 저장
넘파이(Numpy)의 ndarray와 유사
GPU를 사용한 연산 가속 기능
데이터타입
import torchimport torch
torch.__version__
'1.13.0+cu116'
초기화 되지 않은 텐서
x = torch.empty(4, 2)
print(x)
tensor([[1.3304e-34, 0.0000e+00],
[3.5032e-44, 0.0000e+00],
[ nan, 5.6052e-44],
[1.1578e+27, 7.1463e+22]])
무작위로 초기환된 텐서
x = torch.rand(4, 2) print(x)
tensor([[0.5768, 0.0050],
[0.0353, 0.9202],
[0.8369, 0.9583],
[0.1250, 0.4208]])
데이터 타입(dtype)이 long이고, 0으로 채워진 텐서 x = torch.zeros(4, 2, dtype=torch.long)
print(x)
tensor([[0, 0],
[0, 0],
[0, 0],
[0, 0]])
사용자가 입력한 값으로 텐서 초기화
x = torch.tensor([3, 2.3]) print(x)
tensor([3.0000, 2.3000])
2 x 4 크기, double 타입, 1로 채워진 텐서
x = x.new_ones(2, 4, dtype=torch.double)
print(x)
tensor([[1., 1., 1., 1.],
[1., 1., 1., 1.]], dtype=torch.float64)
x와 같은 크기, 5oat타입, 무작위로 채워진 텐서
x = torch.rand_like(x, dtype=torch.float)
print(x)
tensor([[0.0466, 0.7348, 0.2137, 0.4524],
[0.8704, 0.1938, 0.6929, 0.7039]])
텐서의 크기 계산
print(x.size())
torch.Size([2, 4])
ft = torch.FloatTensor([1, 2, 3])
print(ft)
print(ft.dtype)
tensor([1., 2., 3.])
torch.float32
print(ft.short()) # 타입변환 print(ft.int()) print(ft.long())
tensor([1, 2, 3], dtype=torch.int16)
tensor([1, 2, 3], dtype=torch.int32)
tensor([1, 2, 3])
it = torch.IntTensor([1,2,3])
print(it)
print(it.dtype)
tensor([1, 2, 3], dtype=torch.int32)
torch.int32
print(it.float())
print(it.double())
print(it.half())
tensor([1., 2., 3.])
tensor([1., 2., 3.], dtype=torch.float64)
tensor([1., 2., 3.], dtype=torch.float16)
CUDA Tensors
.to 메소드를 사용하여 텐서를 어떠한 장치(cpu, gpu)로도 옮길 수 있음
x = torch.randn(1)
print(x)
print(x.item())
print(x.dtype)
tensor([-1.3493])
-1.3493293523788452
torch.float32
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
print(device)
y = torch.ones_like(x, device=device)
print(y)
x = x.to(device)
print(x)
z = x+y
print(z)
print(z.to('cpu', torch.double))
cuda
tensor([1.], device='cuda:0')
tensor([-1.3493], device='cuda:0')
tensor([-0.3493], device='cuda:0')
tensor([-0.3493], dtype=torch.float64)
다차원 텐서 표현
0D Tebsor(Scalar)
하나의 숫자를 담고 있는 텐서 축과 형상이 없음
t0 = torch.tensor(0)
print(t0.ndim)
print(t0.shape)
print(t0)
0
torch.Size([])
tensor(0)
1D Tensor
t1 = torch.tensor([1,2,3])
print(t1.ndim)
print(t1.shape)
print(t1)
1
torch.Size([3])
tensor([1, 2, 3])
2D Tensor(Matrix)
행렬과 같은 모양으로 두개의 축이 존재
일반적인 수치, 통계 데이터셋이 해당
주로 샘플(sample)과 특성(features)을 가진 구조로 사용
t2 = torch.tensor([[1,2,3],[4,5,6],[7,8,9]])
print(t2.ndim)
print(t2.shape)
print(t2)
2
torch.Size([3, 3])
tensor([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
3D Tensor 큐브(cube)와 같은 모양으로 세개의 축이존재
데이터가 연속된 시퀀스 데이터나 시간 축이 포함된 시계열 데이터에 해당 주식 가격 데이터셋, 시간에 따른 질병 발병 데이터 등이 존재
주로 샘플(sample), 타입스텝(timestep), 특성(feautre)을 가진 구조로 사용
import torch
t3 = torch.tensor([[[1,2,3],
print(t3.ndim)
print(t3.shape)
print(t3)
[4,5,6],
[7,8,9]],
[[1,2,3],
[4,5,6],
[7,8,9]],
[[1,2,3],
[4,5,6],
[7,8,9]]])
3
torch.Size([3, 3, 3])
tensor([[[1, 2, 3],
[4, 5, 6],
[7, 8, 9]],
[[1, 2, 3],
[4, 5, 6],
[7, 8, 9]],
[[1, 2, 3],
[4, 5, 6],
[7, 8, 9]]])
4D Tensor
4개의 축
컬러 이미지 데이터가 대표적인 사례(흑백 이미지 데이터는 3D Tensor로 가능)
주로 샘플(sample), 높이(height), 너비(weidth), 컬러 채널(channel)을 가진 구조로 사용
5D Tensor
5개의 축
비디오 데이터가 대표적인 사례
주로 샘플, 프레임(frame), 높이, 너비, 컬러 채널을 가진 구조로 사용
'IT > 머신러닝공부' 카테고리의 다른 글
PyTorch - numpy를 활용하기 간단 정리 Colab (0) | 2023.01.04 |
---|---|
PyTorch - 텐서의 조작(Manipulating the Tensor) 간단 정리 Colab (0) | 2023.01.04 |
AI Snake Game - Reinforcement Learning with PyTorch[1] by Patrick Loeber (2) | 2023.01.02 |
Kaggle Surface Crack Detection data Example script (0) | 2022.12.31 |
GTSRB(German Traffic Sign Recognition Benchmark) Project 간단 정리 및 Example script (0) | 2022.12.31 |