이번 포스팅에서는 파이토치를 사용하기 위한 첫 단계로,
텐서를 선언하는 여러 방법에 대해서 살펴보도록 하겠습니다.
파이토치 텐서 변환 (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]]])
이상으로 파이토치 사용의 첫 걸음이라할 수 있는 텐서 변환 및 선언 방법에 대해서 알아보았습니다. 다음번에는 기초적인 텐서 연산에 대해서 알아보도록 하겠습니다.
'Python > Pytorch' 카테고리의 다른 글
[Pytorch] 원소 반복 텐서 확장 : expand, expand_as, repeat 사용법 (0) | 2022.01.26 |
---|---|
[Pytorch] squeeze와 unsqueeze 함수 사용법 정리 (2) | 2022.01.25 |
[Pytorch] 쿠다 버전 확인, 파이토치 버전 체크, 업데이트 방법 (0) | 2022.01.23 |