Python/Pytorch

[Pytorch] 파이토치 텐서 변환, 선언하는 방법

jimmy_AI 2021. 11. 14. 22:53
반응형

이번 포스팅에서는 파이토치를 사용하기 위한 첫 단계로,

텐서를 선언하는 여러 방법에 대해서 살펴보도록 하겠습니다.

 

파이토치 텐서 변환 (list, array -> tensor)

우선 리스트를 텐서로 변환하는 방법부터 살펴보도록 하겠습니다.

import torch

list_ex = [1, 2, 3, 4.5]

tensor_int = torch.IntTensor(list_ex) # integer tensor -> 1, 2, 3, 4
tensor_long = torch.LongTensor(list_ex) # long tensor -> 1, 2, 3, 4 (int보다 더 큰 범위 가능)
tensor_float = torch.FloatTensor(list_ex) # float tensor -> 1.0, 2.0, 3.0, 4.5
tensor_double = torch.DoubleTensor(list_ex) # double tensor -> 1.0, 2.0, 3.0, 4.5 (float보다 더 정교)

정수 자료형은 int, long 자료형을 예시로 가져왔고,

실수 자료형은 float, double 자료형을 예시로 가져왔습니다.

 

위 네 변수의 출력값은 각각 다음처럼 나옵니다.

print(tensor_int)
print(tensor_long)
print(tensor_float)
print(tensor_double)

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

tensor([1, 2, 3, 4])

tensor([1.0000, 2.0000, 3.0000, 4.5000])

tensor([1.0000, 2.0000, 3.0000, 4.5000], dtype=torch.float64)

 

파이토치에서는 자료형을 적절히 선언하는 것이 성능 / 메모리 활용 측면에서 매우 중요하게 작용하니,

자료형이 다양하다는 점을 일단 참고해주세요!

 

넘파이에서 제공하는 array도 리스트와 마찬가지로 텐서 변환이 가능합니다.

import torch
import numpy as np

array_ex = np.array([1, 2, 3, 4.5])

tensor_int = torch.IntTensor(array_ex)

다른 자료형도 리스트와 마찬가지로 텐서로 변환 가능합니다.

 

2차원 텐서도 한번 만들어보겠습니다.

list_2d_ex = [[1, 2, 3, 4], [5, 6, 7, 8]]

tensor_int_2d = torch.IntTensor(list_2d_ex)

tensor([[1, 2, 3, 4], [5, 6, 7, 8]], dtype=torch.int32)

 

n차원 텐서도 마찬가지로 생성해볼 수 있겠지요!

파이토치 랜덤 텐서 선언 - randn, randint

이번에는 랜덤 값을 가지는 텐서를 선언해보도록 하겠습니다.

먼저 -1 ~ 1 사이의 실수 자료 값을 가지는 다양한 차원의 텐서입니다.

randn 함수로 진행하며, input으로 차원을 넣어주면 됩니다.

tensor_1d_rand = torch.randn(5) # 1차원
tensor_2d_rand = torch.randn(4, 2) # 2차원
tensor_3d_rand = torch.randn(2, 2, 3) #3차원

각 변수는 다음과 같은 출력값을 가집니다. (실행시마다 결과는 달라집니다.)

 

tensor([-0.9916, -0.8591, 0.2898, -1.2078, -0.8522])

tensor([[ 0.4901, 0.9815], [ 0.3756, -0.8239], [-0.2567, -0.4305], [-0.9049, 0.5960]])

tensor([[[ 9.2261e-01, -1.1395e-04, 9.2114e-01], [ 1.8738e-01, -4.6721e-01, 9.6585e-01]], [[ 1.5232e+00, 2.8341e-02, 4.8175e-01], [ 8.1800e-01, 4.1028e-01, -1.3585e-01]]])

 

이번에는 랜덤 정수 값을 가지는 텐서를 선언해보겠습니다.

randint 함수를 사용하며, 선언 방법은 (최소 값, 최대 값, (차원))으로 넣어주면 됩니다.

tensor_1d_randint = torch.randint(1, 5, (5, )) # 1차원
tensor_2d_randint = torch.randint(1, 10, (3, 3)) # 2차원
tensor_3d_randint = torch.randint(-5, 5, (3, 2, 2)) #3차원

단, 1차원 텐서 선언 시 차원 숫자 뒤에 콤마(,)를 붙여준다는 점을 기억하세요!

 

출력 결과는 다음과 같았습니다. (역시 실행시마다 결과는 달라집니다.)

 

tensor([4, 4, 1, 4, 4])

tensor([[5, 7, 9], [4, 3, 4], [2, 2, 4]])

tensor([[[-1, 0], [-3, -2]], [[ 3, -1], [ 0, -5]], [[ 2, 3], [ 3, 0]]])

 

이상으로 파이토치 사용의 첫 걸음이라할 수 있는 텐서 변환 및 선언 방법에 대해서 알아보았습니다. 다음번에는 기초적인 텐서 연산에 대해서 알아보도록 하겠습니다.