말랑말랑제리스타일

[딥러닝 입문] 2D 텐서와 3D 텐서를 알기 위한 텐서의 개념 본문

프로그래밍/딥러닝

[딥러닝 입문] 2D 텐서와 3D 텐서를 알기 위한 텐서의 개념

제리제리 2024. 1. 24. 14:28

지난 글에서 훈련 데이터에 Reshape 함수를 서서 2D 텐서인 MNIST 데이터셋을 3D 텐서로 변환한다는 표현을 썼는데요. 저도 써놓고 뭔 소린지 텐서가 뭔지 개념이 안 잡혀서 2D 텐서가 뭔지, 3D 텐서가 뭔지를 알아봤습니다.

딥러닝에서 텐서란 무엇인가

먼저 딥러닝에서의 텐서가 뭔지를 알아야 2D 텐서와 3D 텐서의 의미를 알 수 있을거라 생각하고 텐서의 개념을 알아봤습니다.

일단 물리학에서의 텐서는 지금 알아볼 내용이 아닌 것 같고 수학의 영역인 선형 대수학에서 선형 관계를 나타내는 다중 선형 대수학의 대상이라는 뜻을 찾았습니다.

도통 무슨 소리인지 알기가 힘들죠.

 

그래서 좀 더 쉽게 이해할 수 있는 텐서의 개념을 알아봤는데요.

쉽게 이해하려면 배열이랑 같은 느낌으로 이해해도 된다고 하더라구요.

 

간단히 말하면 2D 텐서는 2차원 배열입니다.

그럼 3D 텐서는 당연히 3차원 배열이라는 말이죠.

더 나아가 1D 텐서는 1차원 배열이고 0D 텐서는 스칼라 값 즉, 변숫값 정도가 되겠네요.

 

Reshape 함수를 이용해 2D 텐서를 3D 텐서로 변환하는 작업

그럼 이제 지난 글에서 Reshape 함수를 이용해 2D 텐서를 3D 텐서로 변환하는 이유와 파라미터를 설명할 수 있을 것 같습니다.

먼저 함수를 사용한 예를 봅시다.

x_train = x_train.reshape(x_train.shape[0], 28, 28, 1)

x_train의 각 값은 MNIST 데이터셋에서 얻어온 결과로 28 * 28 픽셀에 각 값을 0~255 사이로 할당한 2차원 배열 즉, 2D 텐서입니다. 얘네를 60,000개 배열로 만든 게 x_train이라고 이해하면 쉽겠네요.

그러니까 x_train은 60,000개의 28 * 28 배열을 가진 텐서입니다.

이 내용이 x_train.shape 변수에 들어있는데요.

x_train.shape 변수를 조회하면 (60,000 , 28 , 28)이 됩니다.

 

그리고 reshape 함수를 이용해서 x_train에 있는 각각의 2D 텐서를 28*28*1의 3차원 배열, 즉 3D 텐서로 만드는 거죠.

총 4차원 배열이 되겠네요.

이렇게 채널이 하나라도 3D 텐서로 만들어주는 이유는 딥 러닝 모델이 학습 데이터로 3D 텐서 모델을 사용하기 때문이라고 합니다.

간단하게 정리해 텐서는 일반적으로 개발자가 생각하는 배열과 비슷한 의미라는 겁니다.

추가로 2D 텐서는 흑백 이미지와 같은 2차원 배열, 3D 텐서는 RGB 이미지와 같은 3차원 배열이라고 보면 되겠네요. 그럼 4D 텐서는 공간과 색깔이 있는 3D 모델 또는 시간에 따라 변하는 RGB 이미지 같은 형태가 될 것 같습니다.

반응형
Comments