tensorflow

: 구글에서 딥러닝 연구 및 제품 개발용으로 만든 라이브러리

- 설치 : pip install tensorflow

 

MNIST (Modified National Institute of Standards and Technology)

: 손으로 쓴 숫자들로 이루어진 대형 DB

- NIST의 오지널 데이터셋의 샘플을 재혼합하여 만들어짐

- 28X28픽셀의 흑백 이미지

- 60000개의 학습용 이미지 + 10000개의 평가용 이미지

 

MNIST 손글씨 이미지 학습하기

- 28X28 픽셀 값이 입력으로 들어오기 때문에 입력층으로 784개의 데이터가 들어온다.

- 출력층에서는 0-9까지의 숫자 중 어떤 숫자인지 맞춰야하기 때문에 0-9까지의 숫자일 확률이 각각 출력된다.

- 손실함수 'sparse_categorical_crossentropy' : 입력값이 다양한 종류 중 어떤 종류인지 분류하는 문제에서 주로 사용

- 최적화 함수 'adam', 'rmsprop' (여기서는 'adam' 사용)

- 학습용 데이터를 몇번 반복할 것인지 정해야 한다. (여기서는 5번 반복하여 학습)

 

평가 과정

- 예측한 값과 정답이 얼마나 높은 비율로 일치하는지 평가하는 정확도로 평가

 

[ 실습 ]

#딥러닝 관련 라이브러리 불러오기
import tensorflow as tf
from tensorflow import keras
import numpy as np
import matplotlib.pyplot as plt

#MNIST 데이터셋 불러오기
mnist=keras.datasets.mnist

#MNIST 데이터셋 학습용(x,y), 테스트용(x,y)으로 나누기
(x_train, y_train), (x_test, y_test) = mnist.load_data()

#학습용 데이터 형태 살펴보기
x_train.shape

#학습용 첫번째 데이터 살펴보기 1
x_train[0]

#학습용 첫 번째 데이터 살펴보기 2
for x in x_train[0]:
  for i in x:
    print('{:3} '.format(i), end='')
  print()

#위 숫자가 어떤 숫자인지 확인해보기
y_train[0]

#데이터 전처리(0-1사이 숫자로)
x_train=x_train/255
x_test=x_test/255

#데이터 전처리 결과 확인
x_train[0]

#모델만들기 : 입력층(784)-은닉층1(256)-은닉층2(128)-은닉층3(64)-출력층(10)
model=keras.models.Sequential({
    keras.layers.Flatten(input_shape=(28,28)),
    keras.layers.Dense(256, activation='relu'),
    keras.layers.Dense(128, activation='relu'),
    keras.layers.Dense(64, activation='relu'),
    keras.layers.Dense(10, activation='softmax') #확률을 출력
})

#모델 컴파일 : 최적화 함수, 손실 함수 설정 + 평가 지표 설정 + 가중치 초기화
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])

#모델 확인
model.summary()

#모델 학습 : 전체 데이터는 5번 반복
model.fit(x_train, y_train, epochs=5)

#모델 평가
model.evaluate(x_test, y_test)

#예측 - 0번째 숫자 이미지로 보기
plt.imshow(x_train[0], cmap='gray')
plt.show()

#예측 - 0번째 숫자 예측하기
print(model.predict(x_train[0].reshape(1,28,28)))

#예측- 0번째 숫자 예측하기 by numpy
print(np.argmax(model.predict(x_train[0].reshape(1,28,28))))

 

+ Recent posts