이수안컴퓨터연구소의 파이토치(PyTorch) 기초 영상을 보고 정리한 내용입니다.
✅ PyTorch
파이토치(PyTorch)는 딥러닝 프레임워크이다.
텐서플로, 케라스 등 다른 딥러닝 프레임워크들에 비해 파이토치는 파이썬에 가깝고 편한 인터페이스를 제공한다.
import torch
파이토치의 구성요소는 다음과 같다.
torch
: 텐서를 생성하는 라이브러리torch.autograd
: 자동미분 기능을 제공하는 라이브러리torch.nn
: 신경망을 생성하는 라이브러리torch.multiprocessing
: 병렬처리 기능을 제공하는 라이브러리torch.utils
: 데이터 조작 등 유틸리티 기능을 제공torch.legacy
: 파이토치는 Torch로부터 포팅해온 코드이므로 기존 torch를 사용하던 사람들에게 호환성을 제공torch.onnx
: ONNX(Open Neural Network Exchange), 서로 다른 프레임워크 간의 모델을 공유할 때 사용
✅ Tensors
텐서(Tensors)는 NumPy의 ndarray와 유사하다.
NumPy의 행렬과 PyTorch의 텐서가 같은 개념이라고 생각하면 된다.
텐서는 GPU를 사용한 연산 가속도 가능하다.
✔️ 초기화되지 않은 텐서
x = torch.empty(4, 2)
print(x)
# output
# tensor([[-1.3981e-15, 3.0917e-41],
# [ 3.3631e-44, 0.0000e+00],
# [ nan, 0.0000e+00],
# [ 1.1578e+27, 1.1362e+30]])
NumPy에서 ndarray를 생성하는 것과 같이 생성할 텐서의 shape을 지정한다.
torch.empty
를 사용하면 해당하는 shape의 텐서가 생성되는데 초기화하지 않아 쓰레기값이 들어있는 것을 확인할 수 있다.
✔️ 무작위로 초기화된 텐서
x = torch.rand(4, 2)
print(x)
# output
# tensor([[0.6076, 0.5946],
# [0.1489, 0.2871],
# [0.4052, 0.9998],
# [0.1159, 0.0903]])
torch.rand
를 사용해 해당 shape의 무작위로 값이 초기화된 텐서를 생성할 수 있다.
✔️ 0으로 초기화된 텐서
x = torch.zeros(4, 2, dtype=torch.long)
print(x)
# output
# tensor([[0, 0],
# [0, 0],
# [0, 0],
# [0, 0]])
torch.zeros
로 0으로 채워진 텐서를 생성할 수 있다.
이때 dtype 옵션을 주어 데이터타입을 지정할 수 있다.
✔️ 텐서 직접 만들기
x = torch.tensor([3, 2.3])
print(x)
# output
# tensor([3.0000, 2.3000])
x = x.new_ones(2, 4, dtype=torch.double)
print(x)
# output
# tensor([[1., 1., 1., 1.],
# [1., 1., 1., 1.]], dtype=torch.float64)
x = torch.randn_like(x, dtype=torch.float)
print(x)
# output
# tensor([[ 0.4511, 0.1676, -1.3794, -0.2974],
# [-0.1277, -1.3263, 1.3783, -0.0649]])
torch.tensor()
로 원하는 데이터를 넣은 텐서를 직접 생성할 수 있다.
이때 생성한 텐서에 .new_ones()
를 적용하면 인자로 주어진 형태로 shape을 변경한다.
.new_ones()를 적용하며 데이터 타입을 torch.double로 주었을 때 torch.float64로 자동 변경된 것을 확인할 수 있다.
torch.randn_like()
는 인자로 주어진 텐서의 shape을 가져와 랜덤한 값으로 채운 텐서를 생성한다.
✔️ 텐서의 크기
print(x.size())
# output
# torch.Size([2, 4])
텐서의 크기는 .size()
로 확인할 수 있다.
'Python > PyTorch' 카테고리의 다른 글
[PyTorch] Torchvision과 utils.data (0) | 2022.02.23 |
---|---|
[PyTorch] nn과 nn.functional (0) | 2022.02.23 |
[PyTorch] CUDA와 자동미분 (0) | 2022.02.23 |
[PyTorch] 텐서의 연산과 조작 (0) | 2022.02.22 |
댓글