PyTorch는 무엇인가?

ML 문서 번역 > PyTorch Tutorial > PyTorch와 함께하는 딥러닝: 60분 리뷰 > 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

코드 다운로드

김태완 avatar
작성자: 김태완
1999년 부터 Java, Framework, Middleware, SOA, DB Replication, Cache, CEP, NoSQL, Big Data, Cloud를 키워드로 살아왔습니다. 현재는 빅데이터와 Machine Learning을 중점에 두고 있습니다.
E-mail: taewanme@gmail.com