본문 바로가기

개발/AI (ML, DL, DS, etc..)

[파이썬, 딥러닝, 파이토치] #3 "Tensor"

안녕하세요! 오늘은 pyTorch의 기본적인 내용을 정리하고자 합니다.
거두절미하고 달려볼까요~?

Tensor(텐서)란?
텐서란 데이터를 표현하는 단위입니다. 기본적으로 딥러닝 프레임워크는 다루고 있는 대상이 데이터이다보니 이를 표현할 수 있는 구조가 정해져있는데요, 파이토치에서의 표현을 알아보도록 하겠습니다.

- Scalar(스칼라)
우리가 흔히 알고있는 상수입니다. 하나의 값을 표현할 때 1개의 수치로 표현한 것을 의미합니다.
torch 모듈에 내장된 메서드나 기본적인 사칙연산 모두 적용됩니다.

import torch

scalar1 = torch.tensor([1.])
print(scalar1)
# tensor([1.])

scalar2 = torch.tensor([3.])
print(scalar2)
# tensor([3.])

torch.add(scalar1, scalar2)
print(scalar1 + scalar2)
# tensor([4.])

torch.sub(scalar1, scalar2)
print(scalar1 - scalar2)
# tensor([-2.])

torch.mul(scalar1, scalar2)
print(scalar1 * scalar2)
# tensor([3.])

torch.div(scalar1, scalar2)
print(scalar1 / scalar2)
# tensor([0.3333])

 

- Vector(벡터)
벡터는 하나의 값을 표현할 때 2개 이상의 수치로 표현한 것입니다.
스칼라와 동일한 속성을 지니지만 여러가지 수치값을 이용해 표현합니다.

import torch

vector1 = torch.tensor([1., 2., 3.])
print(vector1)
# tensor([1., 2., 3.])

vector2 = torch.tensor([4., 5., 6.])
print(vector2)
# tensor([4., 5., 6.])

torch.add(vector1, vector2)
print(vector1 + vector2)
# tensor([5., 6., 9.])

torch.sub(vector1, vector2)
print(vector1 - vector2)
# tensor([-3., -3., -3.])

torch.mul(vector1, vector2)
print(vector1 * vector2)
# tensor([4., 10., 18.])

torch.div(vector1, vector2)
print(vector1 / vector2)
# tensor([0.2500, 0.4000, 0.5000])

torch.dot(vector1, vector2)
# tensor([32.]) <- 벡터의 내적 값

 

- Matrix(행렬)
행렬은 2개 이상의 벡터 값을 통합해 구성된 값으로, 벡터 값 간 연산 속도를 빠르게 진행할 수 있는 선형 대수의 기본 단위입니다.

import torch

matrix = torch.tensor([[1., 2.], [3., 4.]])
print(matrix)
# tensor([[1., 2.], 
#			[3., 4.]])

matrix2 = torch.tensor([[5., 6.], [7., 8.]])
print(matrix2)
# tensor([[5., 6.], 
#			[7., 8.]])
# ================================================================
sum_matrix = matrix + matrix2
torch.add(matrix, matrix2)
print(sum_matrix)
# tensor([[6., 8.], 
#			[10., 12.]])

sub_matrix = matrix - matrix2
torch.sub(matrix, matrix2)
print(sub_matrix)
# tensor([[-4., -4.], 
#			[-4., -4.]])

mul_matrix = matrix * matrix2
torch.mul(matrix, matrix2)
print(mul_matrix)
# tensor([[5., 12.], 
#			[21., 32.]])

div_matrix = matrix / matrix2
torch.div(matrix, matrix2)
print(div_matrix)
# tensor([[0.2000, 0.3333], 
#			[0.4286, 0.5000]])

# =======================================
# 행렬 곱 연산 ▼
torch.matmul(matrix, matrix2)
# tensor([[19., 22.], 
#			[43., 50.]])

 

- Tensor(텐서)
행렬을 2차원 배열이라 표현할 수 있다면, 텐서는 2차원이상의 즉, 다차원 배열이라 표현할 수 있습니다.
이 역시 스칼라, 벡터, 행렬과 같은 논리로 적용됩니다.

import torch

tensor1 = torch.tensor([[[1., 2.],[3., 4.]],[[5., 6.],[7., 8.]]])
print(tensor1)
# tensor([[[1., 2.], 
#			[3., 4.]],
#           
#			[[5., 6.],
#			[7., 8.]]])

tensor2 = torch.tensor([[[9., 10.],[11., 12.]],[[13., 14.],[15., 16.]]])
print(tensor2)
# tensor([[[9., 10.], 
#			[11., 12.]],
#           
#			[[13., 14.],
#			[15., 16.]]])

# ===============================================================================
sum_tensor = tensor1 + tensor2
torch.add(tensor1, tensor2)
print(sum_tensor)
# tensor([[[10., 12.], 
#			[14., 16.]],
#           
#			[[18., 20.],
#			[22., 24.]]])

sub_tensor = tensor1 - tensor2
torch.sub(tensor1, tensor2)
print(sub_tensor)
# tensor([[[-8., -8.], 
#			[-8., -8.]],
#           
#			[[-8., -8.],
#			[-8., -8.]]])

mul_tensor = tensor1 * tensor2
torch.mul(tensor1, tensor2)
print(mul_tensor)
# tensor([[[9., 20.], 
#			[33., 48.]],
#           
#			[[65., 84.],
#			[105., 128.]]])

div_tensor = tensor1 / tensor2
torch.div(tensor1, tensor2)
print(div_tensor)
# tensor([[[0.1111, 0.2000], 
#			[0.2727, 0.3333]],
#           
#			[[0.3846, 0.4286],
#			[0.4667, 0.5000]]])

# ===============================================================================
# Tensor의 행렬곱 ▼
torch.matmul(tensor1, tensor2)
# tensor([[[31., 34.], 
#			[71., 78.]],
#           
#			[[155., 166.],
#			[211., 226.]]])