텐서는 3개의 핵심 속성으로 정의됩니다.
- 축의 개수(랭크): 예를 들어 3D 텐서에는 3개의 축이 있고, 행렬에는 2개의 축이 있습니다. 넘파이 라이브러리에서는 ndim속성에 저장되어 있습니다.
- 크기(shape): 텐서의 각 축을 따라 얼마나 많은 차원이 있는지를 나타낸 파이썬의 튜플(tuple)입니다. 예를 들어 앞에 나온 행렬의 크기는 (3, 5)이고 3D 텐서의 크기는 (3, 3, 5)입니다. 벡터의 크기는 (5,) 처럼 1개의 원소로 이루어진 튜플입니다. 배열 스칼라는 ()처럼 크기가 없습니다.
- 데이터 타입(넘파이에서는 dtype에 저장됩니다): 텐서에 포함된 데이터의 타입입니다. 예를 들어 텐서의 타입은 float32, unit8, float64 등이 될 수 있습니다. 드물게 char타입을 사용합니다. 텐서는 사전에 할당되어 연속된 메모리에 저장되어야 하므로 넘파이 배열은(그리고 대부분 다른 라이브러리는) 가변 길이의 문자열을 지원하지 않습니다.
이를 구체적으로 확인 해 보기 위해서 MNIST예제에서 사용했던 데이터를 다시 들여다 봅시다. 먼저 MNIST데이터셋을 불러들입니다.
from keras.datasets import mnist
(train_images, train_labels), (test_images, test_labels) = mnist.load_data()
그다음 train_images 배열의 ndim 속성으로 축의 개수를 확인 합니다.
>>> print(train_images.ndim)
3
다음은 배열의 크기입니다.
>>> print(train_images.shape)
(60000, 28, 28)
dtype 속성으로 데이터 타입을 확인합니다.
>>> print(train_images.dtype)
unit8
이 배열은 8비트 정수형 3D 텐서입니다. 좀 더 정확하게는 28 * 28 크기의 정수 행렬 6만 개가 있는 배열입니다. 각 행렬은 하나의 흑백 이미지이고, 행렬의 각 원소는 0에서 255 사이의 값을 가집니다.
이 3D 텐서에서 다섯 번째 샘플을 (파이썬의 표준 과학 라이브러리 중 하나인) 맷플롯립( Matplotlib) 라이브러리를 사용해서 확인해 봅시다
digit = train_image[4]
import matplotlib.pyplot as plt
plt.imshow(digit, cmap=plt.cm.binary)
plt.show()
댓글 없음:
댓글 쓰기