앎을 경계하기

Machine Learning

PyTorch - What is PyTorch (1)

양갱맨 2019. 10. 16. 02:05

WHAT IS PyTorch?

가장 먼저 PyTorch를 시작하려면 import 해야한다.

import torch

텐서 생성

import torch

x = torch.empty(5, 3)
y = torch.rand(5, 3)
z = torch.zeros(5, 3, dtype=torch.long)
u = torch.tensor([5.5, 3])
x = x.new_ones(5, 3, dtype=torch.double)
y = torch.randn_like(x, dtype=torch.float)
  • torch.empty(size)
    • 초기화 되지않은 tensor 생성
  • torch.rand(size)
    • [0,1) 값 랜덤하게 초기화된 tensor 생성
  • torch.zeros(size)
    • 0으로 채워진 tensor 생성
  • torch.tensor(data)
    • data 그대로 tensor로 생성
  • tensor.new_ones(size)
    • 1로 채워진 tensor 반환
  • torch.randn_like(input)
    • 정규분포로부터의 랜덤 넘버들을 input과 같은 사이즈의 tensor에 채워서 반환

tensor.Size()로 tensor 사이즈를 확인할 수 있다.

텐서 연산

sum 연산은

import torch
x = torch.rand(5, 3)
y = torch.rand(5, 3)
print(x + y)
print(torch.add(x, y))
y.add_(x)
print(y)

tensor+tensor, torch.add(tensor, tensor), tensor.add_(tensor)나 같다.

차이는 tensor.add_(tensor) 같은 경우 y에 x를 더하여 y 자체의 값이 변한다.

파이토치에서 '_'가 붙는 함수들이 있는데,

x.copy_(y), x.t_() 이러한 함수들은 x가 변한다는 것을 의미한다.

PyTorch에서 tensor 출력은 Numpy에서와 같이 사용할 수 있다.

x[:,1]은 전체 행, 1열의 데이터를 tensor 형태로 출력한다.

텐서 shape 변경

tensor.view(size) 를 통해 tensor를 resizing할 수 있다.

x = torch.randn(4, 4)
y = x.view(16)
z = x.view(-1, 8)
print(x.size(), y.size(), z.size())

위 코드의 결과는 torch.Size([4, 4]) torch.Size([16]) torch.Size([2, 8]) 이 된다.

z = x.view(-1, 8)-1은 다른 차원이 정해지면 자동으로 계산되어 정해짐을 의미한다.

4x4 -> ?x8 로 변해야하기때문에 ?는 2가 되는 것이다.

1x1 tensor의 data 출력

scalar 값처럼 1x1 size의 텐서의 요소 출력은 tensor.item() 함수를 사용해서 출력할 수 있다.

NumPy와 PyTorch 사용

import torch
import numpy as np

a = torch.ones(5)    # tensor
b = a.numpy()        # numpy array        (torch to numpy)
a.add_(1)
print(a)    # tensor([2., 2., 2., 2., 2.])
print(b)    # [2. 2. 2. 2. 2]
a = np.ones(5)    # [1. 1. 1. 1. 1.]
b = torch.from_numpy(a)    # tensor([1., 1., 1., 1., 1.])        (numpy to torch)
np.add(a, 1, out=a)        # a에 1을 브로드캐스팅으로 더하고 output은 a에 저장

CUDA 사용하기

if torch.cuda.is_available():    # cuda 사용할 수 있으면 True
    device = torch.device("cuda")    # cuda device(GPU) object
    y = torch.ones_like(x, device=device)    # GPU에 tensor 바로 생성
    x = x.to(device)    # x를 GPU로 보냄 (.to("cuda")도 가능)
    z = x+y
    print(z)
    print(z.to("cpu", torch.double))    # CPU에서 torch.double로 변환
tensor([0.5163], device='cuda:0')
tensor([0.5163], dtype=torch.float64)

'Machine Learning' 카테고리의 다른 글

선형(Linear)에 대한 이해  (0) 2019.11.23
Monte Carlo Tree Search  (0) 2019.10.28
Keras - ImageDataGenerator  (0) 2019.10.16
코세라 - 04 Multiple features  (0) 2019.08.30
코세라 - 03 Gradient Descent  (0) 2019.08.30