차원의 이해 (Tensor)

최한빈·2023년 11월 28일
0

딥러닝

목록 보기
3/10

칼럼의 개수가 n개라면 각 데이터는 n차원의 공간의 한 점으로 표현할 수 있다.
열이 4개인 경우 4차원이다.

x1 = np.array([5.1,3.5,1.4,0.2])
print(x1.ndim, x1.shape)

결과 : 1 (4,)

위와 같이 하나의 배열에 값이 들어가있는 모양을 1차원이라고 한다.
x1의 shape를 출력하면 숫자가 1개 들어있으므로 1차원이다.
숫자가 4인것은 4개의 요소를 지니고 있다는 뜻이다.

x2 = np.array([4.9,3.0,1.4,0.2])
x3 = np.array([4.7, 3.2, 1.3, 0.2])
아이리스 = np.array([x1,x2,x3])
print(아이리스.ndim, 아이리스.shape)

결과 : 2 (3,4)
1차원의 배열 3개를 품고 있는 배열 하나 ([x1, x2, x3])가 만들어졌다. 배열의 깊이가 2가 되었고 깊이가 2라서 shape를 출력하면 두개의 숫자 (3,4)가 들어 있다. 이것을 2차원 형태라고 한다.

이처럼 차원을 말할 때 데이터의 형태를 표현하는 맥락에서 사용하면 배열의 깊이는 차원수가 된다.

배열의 깊이 = 차원수

차원이라는 말은 맥락에 따라 다르게 사용된다. 변수의 개수를 차원수로 이해할 때도 있고, 배열의 깊이를 차우너수라고 이해할 때도 있다.

img1 = np.array([
[ 0, 255],
[255, 0]
])
print(img1.ndim, img1.shape)

결과 : 2 (2,2)
샘플로 구성한 데이터는 (2,2) 모양을 가지고 있다.

img2 = np.array([[255, 255], [255, 255]])
img3 = np.array([[0,0],[0,0]])

왼쪽의 관측치를 2개 추가했듯이 이미지를 2개 더 추가한다.
img1을 만들 때 작성한 코드와 달라 보이지만 같은 형태의 데이터를 만드는 코드이다.

아이리스 = np.array([x1, x2, x3])
print(아이리스.ndim, 아이리스.shape)

결과 : 2 (3,4)
관측치를 모아 하나의 표를 구성했다.

이미지셋 = np.array([img1, img2, img3])
print(이미지셋.ndim, 이미지셋.shape)

결과 : 3 (3,2,2)
이미지들을 모아서 이미지셋을 구성했다. 이렇게 만들어진 이미지셋은 3차원 형태로 표현되어 있고 (3,2,2) 모양인 것을 알 수 있다.

x1,x2,x3와 img1, img2, img3는 가지고 있는 요소들의 개수가 4개이다. 데이터 형태를 표현하는 관점에서 x1은 1차원 형태, img1은 2차원 형태로 서로 다르지만, 데이터 공간의 맥락에서는 x1과 img1 모두 동일하게 4차원 간의 한 점으로 표현할 수 있는 관측치이다.

데이터 형태의 맥락에서 다시 한번 보자,

d1 = np.array([1,2,3])
print(d1.ndim, d1.shape)

결과 : 1 (3, )
d1은 1차원 형태의 데이터이다. shape를 출력하면 3이라는 숫자 하나 뿐이다.

d2 = np.array([d1,d1,d1,d1,d1])
print(d2.ndim, d2.shape)

결과 : 2 (5,3)
d2는 d1을 5개 가지고 있다. 2차원 형태이고, shape를 출력하면 5와 3 두개의 숫자를 가지고 있으므로 2차원형태이다.

이렇게 1차원, 2차원 등 여러 차원 형태로 구성된 데이터의 모습을 텐서라고 한다.

텐서플로는 이러한 텐서가 흘러가면서 모델을 학습한다는 것에 착안하였다.

데이터 공간의 맥락에서는 '변수의 개수'가 차원의 수이다.
데이터 형태의 맥락에서는 '배열의 깊이'가 차원의 수이다.

profile
데이터 분석 공부하는 대학생

0개의 댓글