PyTorch는 무엇인가?
ML 문서 번역 > PyTorch Tutorial > PyTorch와 함께하는 딥러닝: 60분 리뷰 > PyTorch는 무엇인가?
- 원문: http://pytorch.org/tutorials/beginner/blitz/tensor_tutorial.html#sphx-glr-beginner-blitz-tensor-tutorial-py
- 원문 제목: What is PyTorch?
PyTorch란 무엇인가?
PyTorch는 파이썬 기반의 과학 컴퓨팅 패키지로 두 집단을 대상으로 합니다.
- NumPy를 대체하고 GPU의 힘을 사용
- 최고의 유연성과 속도를 제공하는 딥러닝 연구 플랫폼
시작하기
Tensors
Tensors는 NumPy의 ndarrays와 유사하며, 차별점은 Tensors는 연산을 가속하는 GPU에서 사용될 수 있다는 점입니다.
from __future__ import print_function
import torch
- 초기화되지 않은 5X3 매트릭스 생성
x = torch.Tensor(5, 3)
print(x)
출력:
0.0000e+00 0.0000e+00 -1.3600e+05 4.5632e-41 -1.0988e+06 4.5632e-41 1.5302e-38 0.0000e+00 1.5301e-38 0.0000e+00 -1.6195e+10 4.5632e-41 -1.5802e+10 4.5632e-41 -1.2475e-21 [torch.FloatTensor of size 5x3]
- 임의로 초기화된 행렬 생성
x = torch.rand(5, 3)
print(x)
출력:
0.6852 0.4599 0.5286 0.2504 0.1677 0.6484 0.3631 0.6898 0.3250 0.0775 0.4226 0.7366 0.6672 0.4518 0.5942 [torch.FloatTensor of size 5x3]
- Tensors 사이즈 확인
print(x.size())
출력:
torch.Size([5, 3])
torch.Size
는 튜플이며, 모든 튜플 지능을 지원합니다.
연산(Operations)
연산에 대한 복수의 문법을 제공합니다. 다음 예제에서, 더하기 연산을 하는 방법을 확인할 수 있습니다.
- 더하기 연산: 문법 1
x = torch.rand(5, 3)
y = torch.rand(5, 3)
print(x + y)
출력:
1.4287 0.6300 0.6211 0.6446 1.0070 0.8954 1.3791 1.7791 0.7625 1.5698 0.7837 0.9626 0.7410 1.4610 1.5716 [torch.FloatTensor of size 5x3]
- 더하기 연산: 문법 2
print(torch.add(x, y))
출력:
1.4287 0.6300 0.6211 0.6446 1.0070 0.8954 1.3791 1.7791 0.7625 1.5698 0.7837 0.9626 0.7410 1.4610 1.5716 [torch.FloatTensor of size 5x3]
- 더하기 연산: 전달 인자로 출력 텐서 전달
result = torch.Tensor(5, 3)
torch.add(x, y, out=result)
print(result)
출력:
1.4287 0.6300 0.6211 0.6446 1.0070 0.8954 1.3791 1.7791 0.7625 1.5698 0.7837 0.9626 0.7410 1.4610 1.5716 [torch.FloatTensor of size 5x3]
- 더하기 연산: 객체 메서드(in-place)
# x를 y에 더함
y.add_(x)
print(y)
출력:
1.4287 0.6300 0.6211 0.6446 1.0070 0.8954 1.3791 1.7791 0.7625 1.5698 0.7837 0.9626 0.7410 1.4610 1.5716 [torch.FloatTensor of size 5x3]
텐서를 수정하는 모든 in-place 연산자는 _
로 끝납니다. 예를 들어서 x.copy_(y)
와 x.t_()
는 x 텐서를 변경합니다.
NumPy와 같은 방식의 인덱싱 표기법을 사용할 수 있습니다.
print(x[:, 1])
출력:
0.6262 0.8069 0.9057 0.5266 0.5330 [torch.FloatTensor of size 5]
- 크기 조정: torch.view를 사용하여 텐서의 사이즈를 변경하거나 Shape을 변경할 수 있습니다.
x = torch.randn(4, 4)
y = x.view(16)
z = x.view(-1, 8) # 사이즈가 -1로 설정되면 다른 차원으로 부터 해당 값을 유추
print(x.size(), y.size(), z.size())
출력:
torch.Size([4, 4]) torch.Size([16]) torch.Size([2, 8])
- 나중에 읽어볼 거리
행렬 전치, 인덱싱, 슬라이싱, 수학 연산, 선형 대수 연산, 난수 등을 포함한 100개 이상의 텐서 연산 상세 설명은 다음 URL에서 확인할 수 있습니다. - 텐서 연산 문서
NumPy 브릿지
Torch Tensor를 NumPy 배열로 변환하거나 그 반대로 변환하기는 쉽습니다.
Torch의 Tensor를 NumPy 배열 변환
a = torch.ones(5)
print(a)
출력:
1 1 1 1 1 [torch.FloatTensor of size 5]
b = a.numpy()
print(b)
출력:
[ 1. 1. 1. 1. 1.]
숫자로 NumPy 배열을 변경하는 방법은 다음과 같습니다.
a.add_(1)
print(a)
print(b)
출력:
2 2 2 2 2 [torch.FloatTensor of size 5] [ 2. 2. 2. 2. 2.]
NumPy 배열을 Torch 텐서로 변환
import numpy as np
a = np.ones(5)
b = torch.from_numpy(a)
np.add(a, 1, out=a)
print(a)
print(b)
출력:
[ 2. 2. 2. 2. 2.] 2 2 2 2 2 [torch.DoubleTensor of size 5]
CharTensor를 제외한 CPU에서 동작하는 모든 Tensor는 NumPy 변환과 NumPy로 부터의 Tensor 변환을 지원합니다.
CUDA Tensors
Tensors 객체는 .cuda
메서드를 사용하여 GPU용으로 변환 될 수 있습니다.
# CUDA가 사용 가능한 환경에소 동잡합니다.
if torch.cuda.is_available():
x = x.cuda()
y = y.cuda()
x + y
코드 다운로드
- Python Code 다운로드: tensor_tutorial.py
- Jupyter Notebook 다운로드: tensor_tutorial.ipynb