본문 바로가기
Language&Framework&Etc/Pytorch

Pytorch란 무엇인가요? - 시작하기 (Pytorch 학습 1)

by 머리올리자 2021. 4. 16.

1. 초기화되지 않은 행렬 선언

import torch

x = torch.empty(5, 3)
print(x)

- 초기화되지 않은 행렬이 선언되었지만, 사용하기 전에는 명확히 알려진 값을 포함하고 있지는 않는다.

- 위의 empty와 같이 초기화되지 않은 행렬이 생성되면 그 시점에 할당된 메모리에 존재하던 값들이 초기값.

 

출력 (shape : 5 x 3)

tensor([[8.4490e-39, 9.6429e-39, 9.2755e-39],
        [1.0286e-38, 9.0919e-39, 8.9082e-39],
        [9.2755e-39, 8.4490e-39, 1.0194e-38],
        [9.0919e-39, 8.4490e-39, 9.6429e-39],
        [1.0653e-38, 9.6429e-39, 1.0745e-38]])

 

 

 

2. 초기화된 행렬 생성

import torch

x = torch.rand(5, 3)
print(x)

 

- empty와 달리 torch.rand는 특정 조건에 의해 초기화된다.

 

아래 torch.rand 함수를 보면

pytorch.org/docs/stable/generated/torch.rand.html

 

torch.rand — PyTorch 1.8.1 documentation

Shortcuts

pytorch.org

즉, 연속균등분포를 따르는 0~1 사이의 숫자를 반환하는 것을 알 수 있다.

(연속균등분포는 연속 확률 분포로, 분포가 특정 범위 내에서 균등하게 나타나 있을 경우를 가르킨다 - 위키피디아)

 

결과

tensor([[0.7322, 0.8493, 0.8200],
        [0.8501, 0.2248, 0.0999],
        [0.7542, 0.7537, 0.5483],
        [0.0982, 0.0477, 0.8583],
        [0.4503, 0.9542, 0.4660]])

 

 

3. 0으로 채워진 행렬 생성(자료형이 long인 경우)

import torch

x = torch.zeros(5, 3, dtype=torch.long)
print(x)

결과

tensor([[0, 0, 0],
        [0, 0, 0],
        [0, 0, 0],
        [0, 0, 0],
        [0, 0, 0]])

 

4. 데이터로부터 tensor를 직접 생성

import torch

x = torch.tensor([5.5, 3])
print(x)

결과

tensor([5.5000, 3.0000])

 

 

5. 기존 tensor를 바탕으로 새로운 tensor 생성

import torch

# 1
x = torch.tensor([5.5, 3])
print(x)

# 2
x = x.new_ones(5, 3, dtype=torch.double) # shape : 5 x 3
print(x)

# 3
x = torch.randn_like(x, dtype=torch.float) # dtype을 오버라이드
print(x)

 

결과 확인

tensor([5.5000, 3.0000])
tensor([[1., 1., 1.],
        [1., 1., 1.],
        [1., 1., 1.],
        [1., 1., 1.],
        [1., 1., 1.]], dtype=torch.float64)
tensor([[ 0.5951,  0.6310,  0.1281],
        [ 0.7716, -0.5226,  0.1680],
        [-0.8349,  1.2805, -0.3398],
        [ 1.2791, -0.3563,  1.2629],
        [-0.6927,  0.7865, -0.7172]])

 

위 1번을 보면 데이터로부터 tensor를 직접 생성한 것과 같고

 

2번의 경우, 아래 함수 정의에 따라, x에 정의된 값들을 지정해준 shape(5 x 3)에 맞춰 변환하고 값들을 전부 1로 바꿔줬다.

 

3번의 경우, 아래 함수 정의에 따라 input인 x와 같은 사이즈의 tensor를 반환하는데 그 tensor의 값들은 평균 0과 분산 1을 따르는 정규 분포(normal distribution)로부터 랜덤으로 추출된 값이다.

 

6. 행렬 사이즈 계산

import torch

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

print(x.size())

결과

torch.Size([2, 3])