본문 바로가기
Python/PyTorch

[PyTorch] 파이토치와 텐서

by _sweep 2022. 2. 22.

 

이수안컴퓨터연구소파이토치(PyTorch) 기초 영상을 보고 정리한 내용입니다.

PyTorch

파이토치(PyTorch)는 딥러닝 프레임워크이다.

텐서플로, 케라스 등 다른 딥러닝 프레임워크들에 비해 파이토치는 파이썬에 가깝고 편한 인터페이스를 제공한다.

 

import torch

 

파이토치의 구성요소는 다음과 같다.

  • torch : 텐서를 생성하는 라이브러리
  • torch.autograd : 자동미분 기능을 제공하는 라이브러리
  • torch.nn : 신경망을 생성하는 라이브러리
  • torch.multiprocessing : 병렬처리 기능을 제공하는 라이브러리
  • torch.utils : 데이터 조작 등 유틸리티 기능을 제공
  • torch.legacy : 파이토치는 Torch로부터 포팅해온 코드이므로 기존 torch를 사용하던 사람들에게 호환성을 제공
  • torch.onnx : ONNX(Open Neural Network Exchange), 서로 다른 프레임워크 간의 모델을 공유할 때 사용

 

 

Tensors

텐서(Tensors)는 NumPy의 ndarray와 유사하다.

NumPy의 행렬과 PyTorch의 텐서가 같은 개념이라고 생각하면 된다.

텐서는 GPU를 사용한 연산 가속도 가능하다.

 

✔️ 초기화되지 않은 텐서

x = torch.empty(4, 2)
print(x)

# output
# tensor([[-1.3981e-15,  3.0917e-41],
#         [ 3.3631e-44,  0.0000e+00],
#         [        nan,  0.0000e+00],
#         [ 1.1578e+27,  1.1362e+30]])

 

NumPy에서 ndarray를 생성하는 것과 같이 생성할 텐서의 shape을 지정한다.

torch.empty를 사용하면 해당하는 shape의 텐서가 생성되는데 초기화하지 않아 쓰레기값이 들어있는 것을 확인할 수 있다.

 

✔️ 무작위로 초기화된 텐서

x = torch.rand(4, 2)
print(x)

# output
# tensor([[0.6076, 0.5946],
#         [0.1489, 0.2871],
#         [0.4052, 0.9998],
#         [0.1159, 0.0903]])

 

torch.rand를 사용해 해당 shape의 무작위로 값이 초기화된 텐서를 생성할 수 있다.

 

✔️ 0으로 초기화된 텐서

x = torch.zeros(4, 2, dtype=torch.long)
print(x)

# output
# tensor([[0, 0],
#         [0, 0],
#         [0, 0],
#         [0, 0]])

 

torch.zeros로 0으로 채워진 텐서를 생성할 수 있다.

이때 dtype 옵션을 주어 데이터타입을 지정할 수 있다.

 

✔️ 텐서 직접 만들기

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

# output
# tensor([3.0000, 2.3000])

x = x.new_ones(2, 4, dtype=torch.double)
print(x)

# output
# tensor([[1., 1., 1., 1.],
#         [1., 1., 1., 1.]], dtype=torch.float64)

x = torch.randn_like(x, dtype=torch.float)
print(x)

# output
# tensor([[ 0.4511,  0.1676, -1.3794, -0.2974],
#         [-0.1277, -1.3263,  1.3783, -0.0649]])

 

torch.tensor()로 원하는 데이터를 넣은 텐서를 직접 생성할 수 있다.

 

이때 생성한 텐서에 .new_ones()를 적용하면 인자로 주어진 형태로 shape을 변경한다.

.new_ones()를 적용하며 데이터 타입을 torch.double로 주었을 때 torch.float64로 자동 변경된 것을 확인할 수 있다.

 

torch.randn_like()는 인자로 주어진 텐서의 shape을 가져와 랜덤한 값으로 채운 텐서를 생성한다.

 

✔️ 텐서의 크기

print(x.size())

# output
# torch.Size([2, 4])

 

텐서의 크기는 .size()로 확인할 수 있다.

 

 

 

 

 

'Python > PyTorch' 카테고리의 다른 글

[PyTorch] Torchvision과 utils.data  (0) 2022.02.23
[PyTorch] nn과 nn.functional  (0) 2022.02.23
[PyTorch] CUDA와 자동미분  (0) 2022.02.23
[PyTorch] 텐서의 연산과 조작  (0) 2022.02.22

댓글