AI & Data/Deep Learning

[딥러닝] PyTorch - Tensor

테드리 2024. 8. 16. 11:11

1. Tensor

Tensor(torch.Tensor)

  • Numpy의 배열(Array)와 행렬(Matrix)와 매우 유사한 구조
  • Pytorch에서 scalar, vector, matrix, tensor 등을 표현하는데 사용

https://dmcworks-2019-deep-learning.tistory.com/5

 

  • Pytorch의 Tensor는 GPU나 TPU같은 연산 가속을 위한 특수한 하드웨어에서 사용할 수 있다
  • Backward Pass에서 계산된 Gradient(.grad)를 저장한다
  • 기본적으로 torch.Tensor에 어떤 operation (더하기, 곱셈) 등을 취하면 해당 operation이 Computational Graph에 기록된다

 

Tensor란?
데이터를 표현하는 단위로, 다차원 배열의 일반화된 모습이다. 
Pytorch에서 Tensor를 가지고 연산을 수행하면, 해당 연산은 Computational Graph 상에 표현되고, 나중에 Backward Propagation을 통해 Gradient를 계산할 수 있다.

 

 

2. Tensor을 정의하는 방법

1. 지정된 값으로 초기화

2. 랜덤한 값으로 초기화

3. Numoy Array로부터 초기화

 

import numpy as np
import torch

#초기화 방법 1
data = [[1,2], [3,4]]
x_data = torch.tensor(data)

print(x_data)

#초기화 방법 2
shape = (2,3)

rand_tensor = torch.rand(shape)
ones_tensor = torch.ones(shape)
zeros_tensor = torch.zeros(shape)

print(f"Random Tensor: {rand_tensor}")
print(f"Ones Tensor: {ones_tensor}")
print(f"Zeros Tensor: {zeros_tensor}")

#초기화 방법 3
data = [[1,2], [3,4]]
x_array = np.array(data)

print(x_array)

 

 

3. Tensor Data의 형식

1. int 형식

  • torch.int8, torch.int16, torch.int32, torch.int64, torch.long
  • torch.uint8 : unsinged integer로 양의 정수 0 ~ 255 사이의 값, 주로 이미지 데이터 다룰 때 사용

2. float 형식

  • torch.float16, torch.float32, torch.float64

3. boolean 형식

  • torch.bool

 

다른 Device로 Tensor 옮기기

1. GPU가 사용 가능한지 확인하기

2. 다른 Device로 Tensor 옮기기

3. 특정 Device에 Tensor가 있는지 확인하기

 

#1. GPU 사용 가능한지 확인
torch.cuda_is_available()


#2-1. GPU로 Tensor 옮기기
x_data = x_data.to("cuda")

#2-2. CPU로 Tensor 옮기기
x_data = x_data.to("cpu")


#3. 어떤 Device 상에 Tensor가 있는지 확인
x_data.device

 

 

4. Tensor를 활용한 연산

1. Indexing and Slicing

2. Concatentation

3. Arithmetic

4. Inplace-Operation

 

1. Indexing & Slicing

import torch

tensor = torch.ones(4,4)

print(f"first row: {tensor[0]}")
print(f"first column: {tensor[:, 0]}")
print(f"last column: {tensor[:, -1]}")

tensor[:, 1] = 0  #index 1에 해당하는 열의 값을 모두 0으로 변경
print(tensor)
print(tensor[0:2, 0:2])  #slicing: 	3번째 행과 열까지만 출력

 

2. Concatenation

import torch

tensor = torch.ones(3,3)

t1 = torch.cat([tensor, tensor, tensor], dim = 1)
t1

 

3. Arithmetic

import torch

tensor = torch.ones(2,3)

y1 = tensor @ tensor.T
y2 = tensor.matmul(tensor.T)

print(y1)
print(y2)


#Element-Wise Multiplication
z1 = tensor * tensor
z2 = tensor.mul(tensor)

 

4.  Inplace Operation

import torch

tensor = torch.ones(2,2)

t1 = tensor.add_(5)  #모든 element에 5 더하기
t2 = tensor.sub_(3)	 #모든 element에 3 빼기