🔎 텐서 합치기
torch.cat
- concatenate 해주는 함수로써 concatenate하고자 하는 차원을 증가시킨다. (단, 차원의 수는 유지)
- concatenate하고자 하는 차원을 지정해주면 그 차원으로 두 텐서의 차원을 더한 값으로 변경
- dimension 지정해주지 않으면 default=0으로 설정
- (예를 들어) 10x2, 10x2인 두 텐서가 있을 때, cat 기준이 0이면 20x2, 1이면 10x4
import torch
batch_size, N, K = 3, 10, 256
x = torch.rand(batch_size, N, K) # [M, N, K]
y = torch.rand(batch_size, N, K) # [M, N, K]
output1 = torch.cat([x,y], dim=1) #[M, N+N, K]
output2 = torch.cat([x,y], dim=2) #[M, N, K+K]
# Tensor list를 한번에 tensor로 만들기
import torch
#(....중략)
list_ = []
for data in datas:
out = model(data)
list_.append(out)
output = torch.cat(list_, 0) # same as --> output = torch.cat(list_, dim=0)
# 참고, numpy로 변환
np_c = output.detach().cpu().numpy()
np_g = output.detach().numpy()
torch.stack
- 지정하는 차원으로 확장하여 tensor를 쌓아주는 함수
- 지정하는 차원에 새로운 차원이 생긴다 = 차원의 수가 증가한다.
- tensor를 쌓아주는 함수이기 때문에 두 tensor의 차원이 정확히 일치!!해야 쌓을 수 있다.
- dimension 지정해주지 않으면 default = 0으로 설정
import torch
batch_size, N, K = 3, 10, 256
x = torch.rand(batch_size, N, K) # [M, N, K]
y = torch.rand(batch_size, N, K) # [M, N, K]
output = torch.stack([x,y], dim=1) #[M, 2, N, K]
# Tensor list를 한번에 tensor로 만들기
import torch
#(....중략)
list_ = []
for data in datas:
out = model(data)
list_.append(out)
output = torch.stack(list_, 0)
🔎 차원수
차원 수 증가 : unsqueeze( )
- 개념
- 1인 차원을 생성하는 함수
- 어느 차원에 1인 차원을 생성할 지 꼭 지정해 주어야 한다.
- ⚠ Batch가 1일 때 batch 차원도 없애버리게 될 수도 있으므로, validation 단계에서 오류가 날 수 있기 때문에 주의해서 사용해야 한다.
- 코드
import torch
x = torch.rand(3, 20, 128)
x = x.unsqueeze(dim=1) #[3, 20, 128] -> [3, 1, 20, 128]
차원 수 감소 : squeeze( )
- 개념
- 차원이 1인 차원을 제거
- 따로 차원을 설정하지 않으면 1인 차원을 모두 제거한다. (차원을 설정해주면 그 차원만 제거)
- 코드
import torch
x1 = torch.rand(3, 1, 20, 128)
x1 = x1.squeeze() #[3, 1, 20, 128] -> [3, 20, 128] # 지정된 위치에 1차원 증가
x2 = torch.rand(1, 1, 20, 128)
x2 = x2.squeeze() # [1, 1, 20, 128] -> [20, 128] 1인 차원 모두 제거
x3 = torch.rand(1, 1, 20, 128)
x3 = x3.squeeze(dim=1) # [1, 1, 20, 128] -> [1, 20, 128] 지정된 위치 제거
🔎 차원 반복
torch.repeat(*sizes)
특정 텐서의 sizes 차원의 데이터를 반복
x = torch.tensor([1, 2, 3])
x.repeat(4, 2)
"""
tensor([[ 1, 2, 3, 1, 2, 3],
[ 1, 2, 3, 1, 2, 3],
[ 1, 2, 3, 1, 2, 3],
[ 1, 2, 3, 1, 2, 3]])
"""
------------------------------------------------------------------------------
x.repeat(4, 2, 1).size()
"""
torch.Size([4, 2, 3])
"""
torch.expand(*sizes)
'Programming > Pytorch' 카테고리의 다른 글
[Pytorch] GPU device (0) | 2023.01.28 |
---|---|
[Pytorch] Dataset, DataLoader (0) | 2023.01.27 |
[Pytorch] nn.Linear( ), MLP (0) | 2023.01.20 |
[Pytorch] 모듈 및 함수 정리 (0) | 2023.01.15 |
[Pytorch] 파이토치에서 모델 출력하기 (0) | 2023.01.03 |