Data is ___ ?
article thumbnail

🔎 텐서 합치기

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
profile

Data is ___ ?

@콩순이컴퓨터

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

profile on loading

Loading...