pytorch

[pytorch] tensor(텐서) 생성/이해/조작

독립성이 강한 ISFP 2023. 3. 19. 22:40
728x90
반응형

 

텐서는 파이토치에서 가장 기본이 되는 데이터 구조이다. 넘파이의 ndarray와 비슷하며 GPU에서의 연산도 가능하다.

 

1. 텐서(tensor) 생성

import torch

print(torch.tensor([[1,2],[3,4]])) # 2차원 형태의 텐서 생성
print(torch.tensor([[1,2],[3,4]], device = "cuda:0")) # GPU에 텐서 생성
print(torch.tensor([[1,2],[3,4]], dtype = torch.float64))# dtype을 이용하여 텐서 생성

2. 텐서를 ndarray로  변환

temp = torch.tensor([[1,2],[3,4]])

temp.numpy() # 텐서를 ndarray로  변환
temp.to("cpu").numpy() # GPU상의 텐서를 CPU의 텐서로 변환한 후 ndarray로 변환

 

3. 텐서의 자료형

- torch.FloatTensor : 32비트의 부동 소수

- torch.DoubleTensor : 64비트의 부동 소수

- torch.LongTensor : 64비트의 부호가 있는 정수

이와에도 다양한 유형의 텐서가 존재한다.

4. 텐서의 인덱스 / 슬라이스 

텐서는 넘파이의 ndarray를 조작하는 것과 유사하게 동작하기 때문에 배열처럼 인덱스를 바로 지정하거나 슬라이스 등을 사용할 수 있다.

temp = torch.FloatTensor([1,2,3,4,5,6,7])

print(temp[0], temp[1], temp[-1])
print(temp[2:5],temp[4:-1])

5. 텐서 연산

텐서는 넘파이의 ndarray와 같이 다양한 수학 연산이 가능하며, GPU를 사용하면 더 빠르게 연산할 수 있다. 참고로 텐서 간의 타입이 다르면 연산이 불가능하다. 

v = torch.tensor([1,2,3])
w = torch.tensor([3,4,6])

print(w-v)

6. 텐서 조작(view)

view는 넘파이의 reshape과 유사하다.

temp = torch.tensor([[1,2],[3,4]]) # 2x2 행렬 생성
temp

temp.view(4,1) # 2x2 -> 4x1 변형
temp.view(-1) # 2x2 -> 1차원 벡터
temp.view(1,-1) # 2x2 -> 1x4

 

 

 

 

728x90
반응형