본문 바로가기
인공지능/딥러닝

[딥러닝] view, reshape 차이? 모델링 차원 크기 변경 방법

by 찌니와 용용 2024. 2. 4.
728x90
반응형

딥러닝 모델을 만들때 데이터 처리기술은 정말로 중요하다. 

 

처음 모델링을 한다면 위의 4가지 특징에 대하여 혼란이 있을 수 있다. 

따라서 한번 정리해보려 한다. 

 

딥러닝에서 view, squeeze, unsqueeze, reshape 는 텐서의 모양을 조작하고 변형하는데 중요한 연산작용을 한다. 이에 대한 각각의 기능과 예제를 통해 알아보자. 

 

1. view (차원 변경)

- view는 텐서의 원소의 개수를유지하면서 차원을 조정한다. 아래의 예시를 보면 원본 텐서 생성이 12이고 

12의 약수가 3 *4 이다. 따라서 이 원소의 개수를 유지하면서 차원을 변경한 형태이다. 

import torch

# 원본 텐서 생성
x = torch.arange(12)

# 텐서의 모양을 (3, 4)로 변경
y = x.view(3, 4)

print("Original Tensor:")
print(x)
print("Reshaped Tensor:")
print(y)

 

따라서 view를 이용하여 원하는 모양으로 변경하고자 할때 한번더 진행하면 아래와 같이 된다. 

import torch

# 크기가 (3, 4)인 텐서 생성
x = torch.randn(3, 4)

# 크기를 (2, 6)으로 변경
y = x.view(2, 6)

print("Original Tensor:")
print(x.size())
print("Tensor after view:")
print(y.size())

 

2. reshape

reshape 또한 원소의 개수를 유지하면서 텐서의 모양을 변경하는데 사용된다. 

import torch

# 원본 텐서 생성
x = torch.arange(12)

# 텐서의 모양을 (3, 4)로 변경
y = x.reshape(3, 4)

print("Original Tensor:")
print(x)
print("Reshaped Tensor:")
print(y)

 

reshape 에서 중요하게 생각할 것이 바로 -1 과 1 이다. reshape 함수에서 -1과 1을 사용하여 텐서의 차원을 조절하면 텐서의 크기를 자동으로 계산할 수 있어 딥러닝에서 유용하게 사용된다. 

 

아래는 -1을 이용한 예시이다. 

import torch

# 크기가 (2, 3, 4)인 텐서 생성
x = torch.randn(2, 3, 4)

# -1을 사용하여 마지막 차원의 크기를 자동으로 계산
y = x.reshape(-1)

print("Original Tensor:")
print(x.size())
print("Tensor after view:")
print(y.size())

 

위의 예시의 경우, 크가가 (2,3,4) 인 경우 (2*3*4,) 인 (24,) 로 텐서를 변환한다. 

그러면 1을 이용한 경우 어떻게 될까?

import torch

# 크기가 (2, 3, 4)인 텐서 생성
x = torch.randn(2, 3, 4)

# 1을 사용하여 차원을 추가하고 크기를 변경
y = x.reshape(2, 1, -1)

print("Original Tensor:")
print(x.size())
print("Tensor after view:")
print(y.size())

 

위의 예제에서는 (2,3,4) 의 텐서의 크기가 (2,1,12) 로 변환한다. 따라서 reshape 에서의 마지막 인지에 -1을 추가하면 가운데 차원에 1이되고, 마지막 차원에는 12 가 되어 마지막 차원의 크기를 자동으로 계산한다.

 

y = x.reshape(2, 1, -1) 에서 

 

첫번째 숫자 2의 의미: 첫번째 차원을 의미하며 이 경우 새로운 텐서y의 첫번째 차원은 원래 텐서 x의 두번째 텐서의 차원과 일치한다.

두번째 숫자 1의 의미 : 두번째 차원의 크기를 1로 설정하며 따라서 새로운 차원 y의 두번째 차원이 1이 된다. 이로써 y 는두번째 차원에 새로운 차원을 추가한 것이 된다. 

세번째 숫자 -1의 의미 : 이부분은 앞선 부분과 다르게 -1로사 차원을 자동 계산하게 된다. 따라서 세번째 차원의 크기는 원래 x의 나머지 차원들의 원소개수에 따라 자동으로 결정된다. 

 

view, reshape 차이?

view와 reshape는 기본적으로 유사하게 작동하지만 pytorch 에서 view는 continguous 한 텐서에만 사용가능하고 reshape는 continguous 여부에 관계없이 사용가능하다. 따라서 위에서 언급했던 -1과 1의 사용은 view와 reshape 에서 모두 사용가능하다. 

 

728x90
반응형