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 |