AI/Pytorch

[Pytorch] 텐서(Tensor) 조작 기초(1)

우준세 2021. 6. 28. 20:43
728x90
반응형

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 기초를 더 살펴보겠습니다

감사합니다 :) 

 

728x90
반응형