반응형
PyTorch에서 Numpy array를 Tensor 자료형으로 바꾸기 위한 방법을 알아보자. 데이터를 읽어와서 네트워크의 입력인 Tensor로 변환하여 Dataset를 만드는데 다음과 같은 연산이 필요하다. Pytorch의 2가지 변환함수와 그 차이점은 아래와 같다.
torch.Tensor() 와 torch.from_numpy()
torch.Tensor() 는 Numpy array의 사본일 뿐이다. 그래서 tensor의 값을 변경하더라도 Numpy array자체의 값이 달라지지 않는다. 하지만 torch.from_numpy()는 자동으로 input array의 dtype을 상속받고 tensor와 메모리 버퍼를 공유하기 때문에 tensor의 값이 변경되면 Numpy array값이 변경된다. 예시를 통해 알아보자.
Numpy에서 Teonsor로
torch.Tensor()
teonsor로 변환할 때 새 메모리를 할당한다.
import torch
import numpy as np
a=np.array([1,2,3,4])
b=torch.Tensor(a)
print('output tensor:',b)
b[0]=-1
print('It cannot change np.array:',a)
실행결과
torch.from_numpy()
tensor로 변환할 때, 원래 메모리를 상속받는다. (=as_tensor())
a=np.array([1,2,3,4])
b=torch.from_numpy(a)
print('output tensor:',b)
b[0]=-1
print('It can change np.array:',a)
실행결과
Tensor에서 Numpy로
numpy()
반대로 Tensor를 Numpy array로 바꾸고 싶다면 numpy함수를 사용하면 된다. 사용법은 아래와 같다.
import torch
import numpy as np
a = torch.rand(3,3)
b = a.numpy()
Reference
반응형
'Pytorch' 카테고리의 다른 글
[Pytorch] Custom dataset & dataloader 만들기 (0) | 2021.06.21 |
---|---|
[Pytorch] CNN을 이용한 MNIST (0) | 2021.06.07 |
[Pytorch] DNN을 이용한 MNIST (0) | 2021.06.07 |
[Pytorch] 튜토리얼(2) (0) | 2021.05.17 |
[Pytorch] 튜토리얼(1) (0) | 2021.05.17 |
댓글