반응형
Pytorch
View
- numpy의 reshape와 동일
t = np.array([[[0,1,2],[3,4,5]],
[[6,7,8],[9,10,11]]]
ft = torch.FloatTensor(t)
ft
-> tensor([[[ 0., 1., 2.],
[ 3., 4., 5.]],
[[ 6., 7., 8.],
[ 9., 10., 11.]]])
ft.shape
-> torch.Size([2, 2, 3])
ft.view([-1,3]).shape
-> torch.Size([4, 3])
ft.view([4,1,3]).shape
-> torch.Size([4, 1, 3])
Squeeze
- 차원이 1인 경우에는 해당 차원을 제거함
ft = torch.FloatTensor([[0],[1],[2]])
ft.shape
-> torch.Size([3, 1])
ft.squeeze()
-> tensor([0., 1., 2.])
ft.shape
-> torch.Size([3])
Unsqueeze
- 특정 위치에 1인 차원을 추가
ft = torch.Tensor([0, 1, 2])
ft.shape
-> torch.Size([3])
ft.unsqueeze(0)
-> tensor([[0., 1., 2.]])
ft.unsqueeze(0).shape
-> torch.Size([1, 3])
ft.unsqueeze(1)
-> tensor([[0.],
[1.],
[2.]])
ft.unsqueeze(1).shape
-> torch.Size([3, 1])
Type Casting
- tensor의 type을 변경
lt = torch.LongTensor([1,2,3,4])
-> tensor([1, 2, 3, 4])
lt.float()
-> tensor([1., 2., 3., 4.])
bt = torch.ByteTensor([True,False,False])
-> tensor([1, 0, 0], dtype=torch.uint8)
bt.long()
-> tensor([1, 0, 0])
bt.float()
-> tensor([1., 0., 0.])
Concatenate
x = torch.FloatTensor([[1,2],[3,4]])
y = torch.FloatTensor([[5,6],[7,8]])
torch.cat([x,y],dim=0)
-> tensor([[1., 2.],
[3., 4.],
[5., 6.],
[7., 8.]])
torch.cat([x,y],dim=1)
-> tensor([[1., 2., 5., 6.],
[3., 4., 7., 8.]])
Stacking
- concatenate보다 편함
x = torch.FloatTensor([1,4])
y = torch.FloatTensor([2,5])
z = torch.FloatTensor([3,6])
torch.stack([x,y,z])
-> tensor([[1., 4.],
[2., 5.],
[3., 6.]])
torch.stack([x,y,z], dim=1)
-> tensor([[1., 2., 3.],
[4., 5., 6.]])
# concatenate와 비교
x.shape
-> torch.Size([2])
x.unsqueeze(0).shape
-> torch.Size([1, 2])
torch.cat([x.unsqueeze(0), y.unsqueeze(0), z.unsqueeze(0)], dim=0)
-> tensor([[1., 4.],
[2., 5.],
[3., 6.]])
Ones and Zeros
- 같은 차원으로 생성함
x = torch.FloatTensor([[1,4],[2,3]])
torch.ones_like(x)
-> tensor([[1., 1.],
[1., 1.]])
torch.zeros_like(x)
-> tensor([[0., 0.],
[0., 0.]])
In-place Operation
- _연산으로 새로운 메모리를 사용하지 않고 inplace 연산을 함
- Python에서는 Garbage Collector가 효율적으로 잘 설계되어 있어서 inplace연산을 하더라도 큰 이점이 없을 수 있음
x = torch.FloatTensor([[1,4],[2,3]])
x.mul(2)
-> tensor([[2., 8.],
[4., 6.]])
x = torch.FloatTensor([[1,4],[2,3]])
x.mul_(2)
-> tensor([[2., 8.],
[4., 6.]])
반응형
'부스트캠프 AI Tech 2기 > Precourse' 카테고리의 다른 글
Gradient Descent 심화 (0) | 2021.08.01 |
---|---|
Linear Regression (0) | 2021.07.29 |
Tensor Manipulation 1 (0) | 2021.07.28 |
파이썬 시각화 툴 (4) | 2021.07.27 |
통계학 맛보기 (0) | 2021.07.26 |