728x90
반응형
지난 포스트에서 Tensorflow에서 왜 Keras를 사용하는지와 Keras의 코드 흐름이 어떻게 흘러가는지를 알아보았다. 지금까지의 Tensorflow 과제에서는 진행 과정을 큰 시야에서 보았다면, 이번 포스트부턴 디테일하게 각 부분이 어떻게 흘러가는지를 보도록 하겠다.
MNIST Dataset
LeCun 교수가 만든 MNIST Dataset은 머신러닝 학습에서 가장 기본적으로 사용되는 데이터로, Tensorflow, Pytorch와 같은 수많은 딥러닝 라이브러리의 예제에서 해당 데이터를 다루는 것을 볼 수 있다.
이번 학습에서는 MNIST 데이터에서 가장 대표적인 데이터인 손으로 쓴 숫자를 분류하는 모델을 만들어보도록 하겠다.
# Import Module
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras.layers import (Dense, BatchNormalization, Dropout)
from tensorflow.keras.datasets.mnist import load_data
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# Import Dataset
(train_images, train_labels), (test_images, test_labels)= load_data()
- 해당 코드를 처음 실행한다면, Dataset이 다운로드 된다.
- 때문에 인터넷이 안 되는 환경에서는 해당 데이터를 다운로드할 수 없으므로, 외부망에서 미리 다운로드를 하여 가상 환경을 반입하도록 하자.
- 데이터가 어떻게 생겼는지 보도록 하자.
# Dataset의 모양
>>> train_images.shape
(60000, 28, 28)
>>> train_labels.shape
(60000,)
>>> test_images.shape
(10000, 28, 28)
>>> test_labels.shape
(10000,)
- train set은 총 60,000개, test set은 10,000개의 Data로 이루어져 있으며, 각각 28*28의 형태로 구성되어 있다.
- Label Data는 각 Row가 무슨 숫자인지를 의미한다.
- 이미지 데이터이므로, 이미지가 어떻게 생겼는지 봐보자.
def show_images(dataset, label, nrow, ncol):
# 캔버스 설정
fig, axes = plt.subplots(nrows=nrow, ncols=ncol, figsize=(2*ncol,2*nrow))
ax = axes.ravel()
xlabels = label[0:nrow*ncol]
for i in range(nrow*ncol):
image = dataset[i]
ax[i].imshow(image, cmap='gray')
ax[i].set_xticks([])
ax[i].set_yticks([])
ax[i].set_xlabel(xlabels[i])
# 빈 칸 없이 꽉 채우기
plt.tight_layout()
plt.show()
show_images(train_images, train_labels, 4, 5)
- 이미지 데이터의 모습은 위와 같다. 아래에 있는 숫자는 각 Data에 해당하는 Label을 붙인 것이다.
- 실제 데이터인 텐서의 모습은 다음과 같다.
>>> print(train_images[0])
[[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0 0 0 0 0 3 18 18 18 126 136 175 26 166 255 247 127 0 0 0 0]
[ 0 0 0 0 0 0 0 0 30 36 94 154 170 253 253 253 253 253 225 172 253 242 195 64 0 0 0 0]
[ 0 0 0 0 0 0 0 49 238 253 253 253 253 253 253 253 253 251 93 82 82 56 39 0 0 0 0 0]
[ 0 0 0 0 0 0 0 18 219 253 253 253 253 253 198 182 247 241 0 0 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0 80 156 107 253 253 205 11 0 43 154 0 0 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0 0 14 1 154 253 90 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0 0 0 0 139 253 190 2 0 0 0 0 0 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0 0 0 0 11 190 253 70 0 0 0 0 0 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0 0 0 0 0 35 241 225 160 108 1 0 0 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0 0 0 0 0 0 81 240 253 253 119 25 0 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 45 186 253 253 150 27 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 16 93 252 253 187 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 249 253 249 64 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 46 130 183 253 253 207 2 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0 0 0 0 0 39 148 229 253 253 253 250 182 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0 0 0 24 114 221 253 253 253 253 201 78 0 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0 23 66 213 253 253 253 253 198 81 2 0 0 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 18 171 219 253 253 253 253 195 80 9 0 0 0 0 0 0 0 0 0 0 0 0]
[ 0 0 0 0 55 172 226 253 253 253 253 244 133 11 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[ 0 0 0 0 136 253 253 253 212 135 132 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]]
- 이미지를 어떻게 텐서로 만드는 가에 대해 의문이 들 수 있는데, 위 데이터와 실제 사진을 비교해보면 굉장히 단순한 원리로 만들어졌음을 알 수 있다.
- 위 텐서에서 0에 가까울수록 사진에서는 검게 나왔으며, 숫자가 최댓값인 255에 가까울수록 희게 나온 것을 알 수 있다.
- 즉, 흑백 사진의 텐서화는 색의 농도로 나타나는 것을 알 수 있다.
- 만약, 이 것이 칼라 사진인 경우, RGB 총 3개의 채널(Channel)에 대해 각 색의 농도를 행렬로 만들어, 3차원 배열로 만들면, 텐서가 생성된다.
다음 포스트에서는 검증셋(Validation set)에 대해 자세히 알아보고, 검증셋을 직접 추출해보도록 하겠다.
728x90
반응형
'Machine Learning > TensorFlow' 카테고리의 다른 글
Tensorflow-3.3. 이미지 분류 모델(3)-모델 생성 (0) | 2021.02.16 |
---|---|
Tensorflow-3.2. 이미지 분류 모델(2)-검증 셋(Validation set) (0) | 2021.02.16 |
Tensorflow-3.0. Keras 소개 (0) | 2021.02.15 |
Tensorflow-2.5. 타이타닉 다중 분류 모델(4) (0) | 2021.02.15 |
Tensorflow-2.4. 타이타닉 생존자 분류 모델(3)-하이퍼 파라미터 튜닝 (0) | 2021.02.10 |