728x90
반응형
pytorch 홈페이지에 튜토리얼을 제공하고 있길래 한번 진행해 보았다.
첫번째 내용은 tensor와 덧셈연산, numpy 연동, cuda에서 tensor 생성에 대해 다룬다.
Pytorch tutorial 1¶
In [37]:
from __future__ import print_function #future가 뭐지? https://docs.python.org/3/reference/simple_stmts.html#future
import torch
tensors, 텐서¶
In [38]:
# Tensor: numpy의 ndarray와 비슷하다.
x = torch.empty(5, 3)
print(x)
In [39]:
#초기화된 값(random하게)
x = torch.rand(5, 3)
print(x)
In [40]:
#0으로 초기화
x = torch.zeros(5, 3, dtype=torch.long)
print(x)
print(x.dtype)
In [41]:
#직접 값 입력하기
x = torch.tensor([5.5, 3])
print(x)
In [42]:
x = x.new_ones(5, 3, dtype=torch.double) # new_* methods는 크기 입력을 받는다.
print(x)
x = torch.randn_like(x, dtype=torch.float) # type 오버라이딩도 가능, 기존의 1이 입력된 x에 임의의 값으로 덮어 쓴다.
print(x)
In [43]:
#size 역시 같다. torch.size의 경우 tuple 자료형처럼 적용된다.
print(x.size())
operation, 연산¶
In [44]:
print(x.size(), y.size()) #size 같아야 연산 가능
y = torch.rand(5, 3)
#더하기에는 2가지 방법이 있다.
print(x + y) #1
print(torch.add(x, y)) #2
In [45]:
#더한 값을 특정 변수에 넣기
result = torch.empty(5, 3)
torch.add(x, y, out=result)
print(result)
In [46]:
# adds x to y, 값을 삽입, 변수 y에 x+y을 넣는다. y = y+x
y.add_(x)
print(y)
In [47]:
#tensor변수의 값을 바꾸게되는 연산들은 뒤에 '_'가 붙는다. For example: x.copy_(y), x.t_(), will change x.
In [48]:
#numpy처럼 slicing가능
print(x[:, 1])
In [49]:
#tensor의 size를 변경하기
x = torch.randn(4, 4) #4*4=2*8=16*1
y = x.view(16) #4*4 -> 16*1
z = x.view(-1, 8) # -1은 나머지 값들로부터 유추된다. 여기서는 2가 된다.
print(x.size(), y.size(), z.size())
In [50]:
#tensor의 원소가 하나뿐이라면 하나의 값으로 받을 수 있다(array형태가 아닌).
x = torch.randn(1)
print(x)
print(x.item())
In [51]:
# tensor 연산 모음집: https://pytorch.org/docs/stable/torch.html
NumPy Bridge¶
In [54]:
# torch의 tensor와 numpy의 array는 (tensor가 cpu에서 돌아갈 경우) 같은 메모리를 공유한다. 따라서 서로 변환이 매우 쉽다.
In [55]:
#torch -> numpy로 변환,
a = torch.ones(5)
print(a)
b = a.numpy()
print(b)
In [56]:
# a: torch, b: numpy, a에만 더했는데, b도 변함, 같은 메모리를 공유하기 때문에!!
a.add_(1)
print(a)
print(b)
In [57]:
#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)
#모든 cpu에서 돌아가는 tensor(charTensor제외)는 numpy로 변환 또는 그 역변환이 가능하다.
In [60]:
# CUDA가 가능한 경우에만 사용
# ``torch.device``객체를 이용해 GPU에서(로) tensor를 이동시킬 수 있다.
if torch.cuda.is_available():
print('available!')
device = torch.device("cuda") # CUDA device 객체 받기
y = torch.ones_like(x, device=device) # GPU에서 tensor 생성
x = x.to(device) # tensor를 GPU로 보내서 생성``.to("cuda")``
z = x + y
print(z)
print(z.to("cpu", torch.double)) # ``.to`` method는 dtype도 바꿀 수 있다.
else:
not print('not available')
In [ ]:
In [ ]:
In [ ]:
In [ ]:
728x90
반응형
'컴퓨터' 카테고리의 다른 글
[pytorch] 파이토치 튜토리얼 4 (0) | 2020.02.10 |
---|---|
[pytorch] 파이토치 튜토리얼3 (0) | 2020.02.10 |
[pytorch] 파이토치 튜토리얼2 (0) | 2020.02.07 |
visual studio LNK1168: 쓰기용으로 열 수 없습니다 오류 (12) | 2020.02.01 |
파이토치(pytorch) 설치 방법 (0) | 2020.01.31 |
댓글