pytorch의 tensor 기초 조작을 정리 해보았습니다.
1) Pytorch에서 텐서(Tensor)란?
- 텐서 : 배열(array)와 행렬(matrix)과 유사한 자료구조로 텐서를 이용하여 모델의 입출력을 합니다.
- 텐서는 GPU나 다른 하드웨어 가속기에서 실행하는 점만 제외하면 Numpy의 ndarray와 매우 유사합니다.
- 자동미분(Autograd)에 최적화 되어있습니다.
텐서(Tensor) 초기화
import torch
import numpy as np
- torch와 numpy 라이브러리를 임포트 해준다고 생각하고 이번 포스팅을 진행하겠습니다.
1. 데이터로부터 직접 실행
data = [[1,2],[3,4]]
x_data = torch.tensor(data)
x_data, type(x_data)
- 결과)
- pytorch에서 tensor의 자료형은 자동으로 유추합니다.
2. Numpy 배열로부터 생성
np_array = np.array(data)
x_np = torch.tensor(np_array)
x_np, type(x_np)
- 결과)
3. 무작위(random)와 상수(constant) 값을 사용하여 생성
shape = (2,3,)
rand_tensor = torch.rand(shape)
ones_tensor = torch.ones(shape)
zeros_tensor = torch.zeros(shape)
rand_tensor, ones_tensor, zeros_tensor
- shape는 텐서의 차원을 나타내는 튜플입니다.
- 결과)
2) 텐서(Tensor)의 속성
텐서의 속성이란 모양(shape), 자료형(datatype) 및 어느 장치에 저장되는지 나타내는 것입니다.
tensor = torch.rand(3,4)
tensor
결과)
속성 확인
tensor.shape, tensor.dtype, tensor.device
결과)
- 위의 tensor의 모양인 (3,4)를 나타내고 dtype은 자료형을 나타내며 device는 돌아가는 디바이스를 나타냅니다.
3) 텐서(Tensor) 연산
- 기본적으로 텐서는 CPU에 생성됩니다. .to 메서드를 사용하면 GPU 가용성을 확인한 뒤 GPU로 이동할 수 있습니다.
- 그렇지만 장치들 간에 큰 텐서들을 복사하는 것은 메모리와 시간이 많이 든다는 것을 기억해야 합니다.
if torch.cuda.is_available():
tensor = tensor.to('cuda')
- 텐서를 GPU로 가동하게 되며 속도가 상승합니다!
- Numpy 라이브러리에 익숙하신 분이라면 tensor를 사용하기는 아주 쉽습니다.
tensor = torch.ones(4,4)
print("Frist row : ", tensor[0])
print("First column : ", tensor[:, 0])
print("Last Colunm : ", tensor[..., -1])
tensor[:, 1] = 0
print(tensor)
- .ones나 슬라이싱 하는 것들도 비슷하기 때문에 쉽게 접근하고 사용할 수 있습니다.
결과)
텐서 합치기 : 주어진 차원에 따라 텐서를 연결이 가능합니다.
torch.cat과 torch.stack으로 합치기가 가능합니다.
tensor = torch.cat([tensor, tensor, tensor], dim=1) # 가로 합치기
tensor
결과)
- torch.cat은 가로로 텐서를 합쳐서 결과로 보여줍니다.
tensor = torch.ones(4,4)
tensor = torch.stack([tensor, tensor, tensor], dim=1) # 세로 합치기
tensor
결과)
- torch.stack은 텐서를 가로로 합쳐줍니다.
- Pytorch의 Tensor의 기초 부분을 학습해 보았고 정리했습니다
다음은 Tensor 기초를 더 살펴보겠습니다
감사합니다 :)
'AI > Pytorch' 카테고리의 다른 글
[Pytorch] Transform(변형) (0) | 2021.07.27 |
---|---|
[Pytorch] Dataset과 Dataloader (0) | 2021.07.26 |
[Pytorch] 텐서(Tensor) 조작 기초(3) (0) | 2021.07.22 |
[Pytorch] 텐서(Tensor) 조작 기초(2) (0) | 2021.07.21 |