Ch 02. PyTorch Tutorial
Part.5 실습 텐서 생성하기
-
PyTorch Tensor
import torch
Tensor Allocation
- 가장 많이 쓰이는 Tensor는 Float Tensor
- 32bit의 Float Tensor = 말 그대로 실수(Float) 값을 담는 Tensor이다.
# 2차원 (Matrix), torch.FloatTensor(): float의 값을 담는 tensor
ft = torch.FloatTensor([[1, 2],
[3, 4]])
ft
# 결과 값
tensor([[1., 2.],
[3., 4.]])
- LongTensor = 정수값을 담는 Tensor, 주로 index(정수값) & ByteTensor (0 &1을 담는 Tensor)에 사용
# Long : int (정수값)
lt = torch.LongTensor([[1, 2],
[3, 4]])
lt
# 결과 값
tensor([[1, 2],
[3, 4]])
- ByteTensor
# Bite : 0 or 1
bt = torch.ByteTensor([[1, 0],
[0, 1]])
bt
# 결과 값
tensor([[1, 0],
[0, 1]], dtype=torch.uint8)
-
Tensor Size만 원할때는 이렇게 사이즈만 지정해서 만드는 경우도 있음 (쓰레기 값 들어가도 상관 없을시)
x = torch.FloatTensor(3, 2) x
# 결과 값 tensor([[0.0000e+00, 4.6566e-10], [0.0000e+00, 4.6566e-10], [9.8091e-45, 0.0000e+00]])
NumPy Compatibility
- NumPy = Pytorch랑 호환이 잘되는게 장점이다.
import numpy as np
# Define numpy array. -> PyTorch 선언 하는것과 같다.
# np -> numpy import 해서 torch 선언 하는것과 같음
x = np.array([[1, 2],
[3, 4]])
print(x, type(x))
# 결과 값
[[1 2]
[3 4]] <class 'numpy.ndarray'>
- Numpy를 torch로 가져오고 싶으면?
- torch.from_numpy(x) 함수를 이용하면 된다. 그러면 torch의 형태로 나온다.
x = torch.from_numpy(x)
print(x, type(x))
# 결과 값
tensor([[1, 2],
[3, 4]]) <class 'torch.Tensor'>
- torch.tensor를 numpy의 ndarray로 보내고 싶으면 x.numpy로 실행하면 return이 된다.
x = x.numpy()
print(x, type(x))
# 결과 값
[[1 2]
[3 4]] <class 'numpy.ndarray'>
Tensor Type-casting
-
Float, Long이 서로 다르면 맞춰 줘야한다.
- 무슨말이냐? Float Tensor는 Float Tensor 끼리, Long Tensor는 Long Tensor 끼리 값을 맞춰줘서 더해줘야 한다. 안맞추면? 오류나요 ㅎㅎ
- Float Tensor를 Long Tensor로 봐꾸려면?
ft.long()
# 결과 값. Long Tensor로 return 된다.
tensor([[1, 2],
[3, 4]])
- Long Tensor를 FloatTensor로 봐꾸려면?
- Float Tensor로 봐꾸듯이 반대로만 적어주면 된다.
lt.float()
# 결과 값. Float Tensor로 return 된다.
tensor([[1., 2.],
[3., 4.]])
-
If. Byte Tensor로 봐꾸려면 Tensor 뒤에 ‘byte()’ 만 적어주면 된다.
# FloatTensor 끼리 계산해야 한다. torch.FloatTensor([1, 0]).byte()
# 결과 값 tensor([1, 0], dtype=torch.uint8)
Get Shape
- Tensor의 size를 알고 싶을때 쓰는 함수이다.
-
Ex) x = (3,2,2) Tensor
-
x = torch.FloatTensor([[[1, 2],
[3, 4]],
[[5, 6],
[7, 8]],
[[9, 10],
[11, 12]]])
-
x.size() 함수를 쓰면 튜플처럼 size를 return 해준다.
- 또한 x.shape 함수를 써줘도 상관은 없음.
- 단, size처럼 뒤에 ‘( )’ 붙이면 오류난다야… 함수가 안되기 때문. 제대로된 return 값이 안나온다.
print(x.size()) print(x.shape)
# 결과 값 # |x| = (3,2,2) torch.Size([3, 2, 2]) torch.Size([3, 2, 2])
- 또한 x.shape 함수를 써줘도 상관은 없음.
-
‘x.dim()’ 함수를 쓴다면 Tensor의 차원개수를 알수 있다.
- ‘x.size()’ 를 쓰면 list or tuple의 형식으로 나온다. 거기앞에 len을 쓰면 차원의 개수(Tensor의 모양)를 알수 있다.
# dim: 차원
print(x.dim())
print(len(x.size()))
# 결과 값
3
3
- 특정 차원의 숫자를 알고 싶으면 ‘x.size()’ 이렇게 함수를 써주면 된다.
-
x Tensor는 x = (3,2,2) 였으므로 (0,1,2) 순서. 그러면 1의 순서의 값인 2를 출력하는 것이다. - 근데 x.shape는 함수가 아니므로 뒤에 꼭 index를 적어줘야 한다.
-
print(x.size(1))
print(x.shape[1])
# 결과 값
2
2
- -1를 쓰게 되면 마지막 순서 or 알아서 채우라는 뜻.
- -1은 마지막 순서를 의미 함으로 2가 된다.
# -1의 의미: 알아서 컴퓨터가 채우라는뜻
print(x.size(-1))
print(x.shape[-1])
# 결과 값
2
2