개발자의시작

[Pytorch] 01-2 Tensor Manipulation 2 본문

머신러닝(machine learning)

[Pytorch] 01-2 Tensor Manipulation 2

LNLP 2021. 11. 26. 16:36

글은 모두를위한딥러닝 시즌2 https://github.com/deeplearningzerotoall/PyTorch 을 정리한 글입니다.

 

GitHub - deeplearningzerotoall/PyTorch: Deep Learning Zero to All - Pytorch

Deep Learning Zero to All - Pytorch. Contribute to deeplearningzerotoall/PyTorch development by creating an account on GitHub.

github.com

 

View (Reshape)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import numpy as np
import torch
 
= np.array([[[012],
               [345]],
              
               [[678],
               [91011]]])
 
ft = torch.FloatTensor(t)
print(ft.shape)
 
print(ft.view([-13]))
print(ft.view([-13]).shape)
 
print(ft.view([-113]))
print(ft.view([-113]).shape)
 
 
 

 

Squeeze

※ 해당 dim의 element의 개수가 1일 경우 해당 dim을 없애준다.

squeeze(dim = ? )과 같은 형태로 특정 차원을 지정하여 적용할 수 있다.

1
2
3
4
5
6
ft = torch.FloatTensor([[0], [1], [2]])
print(ft)
print(ft.shape)
 
print(ft.squeeze())
print(ft.squeeze().shape)
 

 

 

Unsqueeze

※ Unsqueeze: 원하는 dim의 차원을 1로 만들어준다. (squeeze와 다르게 반드시 원하는 차원을 지정해줘야 한다.

unsqueeze( dim= ?)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
ft = torch.Tensor([012])
print(ft.shape)
 
print(ft.unsqueeze(0))
print(ft.unsqueeze(0).shape)
 
print(ft.view(1-1))
print(ft.view(1-1).shape)
 
print(ft.unsqueeze(1))
print(ft.unsqueeze(1).shape)
 
print(ft.unsqueeze(-1))
print(ft.unsqueeze(-1).shape)
 

 

Type Casting

※ 텐서의 타입을 바꿔주는 것.

※ bt= ByteTensor

1
2
3
4
5
6
7
8
9
10
lt = torch.LongTensor([1234])
print(lt)
 
print(lt.float())
 
bt = torch.ByteTensor([TrueFalseFalseTrue])
print(bt)
 
print(bt.long())
print(bt.flat())
 
 

 

Concatenate

※ Concatenate : 두 텐서를 이어 붙이는 것.

1
2
3
4
= torch.FloatTensor([[12], [34]])
= torch.FloatTensor([[56], [78]])
print(torch.cat([x, y], dim=0))
print(torch.cat([x, y], dim=1))
 

Stacking

※ concatenate의 작업을 단축시켜 놓은 것 ( 3개 이상의 텐서를 쌓을 수 있다)

1
2
3
4
5
6
7
8
= torch.FloatTensor([14])
= torch.FloatTensor([25])
= torch.FloatTensor([36])
 
print(torch.stack([x, y, z]))
print(torch.stack([x, y, z], dim=1))
 
print(torch.cat([x.unsqueeze(0), y.unsqueeze(0), z.unsqueeze(0)], dim=0))
 

 

Ones and Zeros

※ 프로그래밍 시 cpu 텐서와 gpu 텐서를 동시에 더하거나 빼는 등의 연산을 수행하면 에러가 난다. 같은 디바이스의 텐서여야만 연산을 할 수 있다. 이런 경우 ones와 zeros를 사용하면 같은 디바이스의 텐서를 선언해준다.

1
2
3
4
5
= torch.FloatTensor([[012], [210]])
print(x)
 
print(torch.ones_like(x))
print(torch.zeros_like(x))
 

In-place Operation

※ 같은 값을 곱하더라도 결과가 다르게 출력된다. In-place Operation은 연산 후 해당 값을 선언과 동시에 저장하여 새로운 텐서를 할당하지 않고도 연산을 수행할 수 있다. (Python의 경우 가비지 컬렉터가 효율적으로 설계돼 있어서 크게 신경 쓰지 않아도 된다.)

 

1
2
3
4
5
6
= torch.FloatTensor([[12], [34]])
 
print(x.mul(2.))
print(x)
print(x.mul_(2.))
print(x)
 

Comments