[PT_S] Pytorch Study - Day 1

박인성 (Bahk InSung)·2022년 8월 15일

Pytorch_Study

목록 보기
1/3
post-thumbnail

Pytorch Study를 본격적으로 시작해볼려고 한다. 일단 시작은 가짜연구소 에서 올라온 Pytorch 가이드를 보면서 시작할려고 한다. 기초부, 이론부, 적용부, 활용부 이렇게 나뉘어져 있을 것을 보아 천천히 시작해보면 도움이 될 것이라고 생각된다. 내 Velog에는 내용을 그대로 갖다 적기 보다는 정리 노트 처럼 쓰일 예정이다.


💫 Tensor 및 Pytorch에서의 변수 개념

Pytorch 에서는 기본적으로 아래 4개의 변수 구조가 있다.

  • 스칼라
  • 벡터
  • 행렬
  • 텐서

모두 수학에서 나오는 개념과 동일하다. 4개의 큰 차이는 차원이 다르다는 점이다. 스칼라는 상수 인 만큼 따로 차원이 없고, 벡터는 1차원, 행렬은 2차원, 텐서는 3차원 혹은 그 이상으로 이루어져 있다.
그 중에서 텐서가 가장 벡터, 행렬을 닮아 유사하게 할 수 있으며 모델의 입·출력을 담당하게 된다.

⌨️ torch.tensor, Python 적용 코드!

import torch
1d_tensor = torch.tensor([1, 2, 3, 4, 5, 6, 7, 8, 9])

위 와 같은 방법으로 하면 1차원의 텐서가 생기게 된다. 벡터와 굉장히 유사하다. 1d_tensor1, 2, 3, 4, 5, 6, 7, 8, 9 로 이루어져 있는 1차원 텐서인 셈이다. 2차원 텐서도 위와 같이 하면 된다.

import torch
2d_tensor = torch.tensor([
	[1., 2., 3.,],
    [4., 5., 6.,],
    [7., 8., 9.,]
])

이렇게 구성된 텐서의 차원을 확인 할 수도 있다.

print(2d_tensor.dim())

dim() Method를 통해서 확인이 가능하다. 2d_tensor는 2차원으로 구성했기 때문에 2가 반환될 것이다. Tensor의 형태를 확인할 때에도 유사한 방법으로 쓰이게 된다. Numpy를 자주 써본 사람이라면 알겠지만 shape() Method로 크기가 확인이 가능하다. Pytorch도 유사하다.

print(2d_tensor.size())
print(2d_tensor.shape())

size(), shape() 두 Method 활용할 수 있다.

이렇게 텐서를 정해줄 수도 있지만 텐서의 크기에 따라서도 내가 직접 정할 수도 있다.

⌨️ Tensor 크기에 따라 Tensor 생성하기

텐서의 shape를 Tuple로 선언하여 그 크기에 맞는 Tensor 를 만들수 있다.

shape = (2, 3,)
random_tensor = torch.randn(shape)
ones___tensor = torch.ones(shape)
zeros__tensor = torch.zeros(shape)

2행 3열 크기의 텐서를 만들게 된다. 3개의 함수를 통해서 만들수 있다. torch.randn()random integer 의 약자로 랜덤한 인자를 2행 3열 크기의 텐서로 만든다. torch.ones() 는 텐서의 인자를 모두 1로 채우는 함수이다. torch.zeros() 는 텐서의 인자를 모두 0으로 채우는 함수이다.

🔥 실전!

사실 실제 개발을 하게 되면 List, dictionary 형태로 저장을 하게 된다. 그렇기 때문에 텐서로 변환을 어떻게 해주냐가 중요하다. 어렵진 않다. 위에 있던 내용을 그대로 하면 된다.

import torch
list_X = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
tensor_X = torch.tensor(list_X)

list_X 를 원본 데이터라고 가정을 하자. 뭐, 대부분 list 형태가 많이 쓰이기 때문에 위와 같은 예시를 해보았다. 그리고 그대로 텐서로 넣어주면 된다.

print("Dimension : ", tensor_X.dim())
print("Size : ", tensor_X.size())

Dimension : 1
Size : torch.Size([10])

차원은 1차원이고, 사이즈는 10이다. list_X가 List가 하나로 되어 있고 길이는 10개로 되어 있다. 그렇기에 1차원, 10 사이즈가 나오는 것이다. 만약에

list_X = [[1, 2, 3],
		  [4, 5, 6],
          [7, 8, 9]]
tensor_X = torch.tensor(list_X)          

이렇게 되면 2차원이 된다. 크기는 3 x 3 와 같은 형태로 되어 있다. 하지만 주의 해야할 것이 있다.

list_X = [[1, 2, 3], 
		  [4, 5, 6, 7],
          [8, 9, 0]]

위와 같은 형태가 되어 있다면 텐서의 크기가 다 맞지가 않기 때문에 변환이 안된다. Numpy 에서도 이를 array 로 바꿀수가 없다. 그렇기에 Numpy 에서 dtype=object 으로 해줘야 올바르게 할 수 있다.

profile
Just normal person, that know COBOL

0개의 댓글