첫 번째 신경망 훈련하기: 기초적인 분류 문제

suyeon-jung·2021년 9월 16일
0

tensorflow

목록 보기
2/2

TensorFlow 공식문서
텐서플로 공식문서 튜토리얼을 공부한 내용이다.

케라스란?
거의 모든 종류의 딥러닝 모델을 간편하게 만들고 훈련시킬 수 있는 파이썬으로 작성된 오픈소스 신경망 라이브러리이다.

운동화나 셔츠 같은 옷 이미지를 분류하는 신경망 모델을 훈련하는 예제이다.

# tensorflow, keras 임포트
import tensorflow as tf
from tensorflow import keras

# 헬퍼(helper) 라이브러리
import numpy as np
import matplotlib.pyplot as plt

print(tf.__version__)

데이터셋 로드


load_data() 함수 호출시 네 개의 numpy 배열 반환

fashion_mnist = keras.datasets.fashion_mnist
(train_images, train_labels), (test_images, test_labels) = fashion_mnist.load_data()
  • label: [0~9], 10가지의 클래스
class_names = ['T-shirt/top', 'Trouser', 'Pullover', 'Dress', 'Coat',
               'Sandal', 'Shirt', 'Sneaker', 'Bag', 'Ankle boot']

데이터 탐색

train_images.shape
len(train_labels)
train_labels

데이터 전처리

plt.figure()
plt.imshow(train_images[0])
plt.colorbar()
plt.grid(False)
plt.show()

값 범위 조정 [0-255] 에서 [0-1]

train_images = train_images/255.0
test_images = test_images/255.0

훈련 데이터 처음 25개 이미지, 클래스 이름 출력해보기

plt.figure(figsize(10, 10))
for i in range(25):
	plt.subplot(5, 5, i+1)
    plt.xticks([])
    plt.yticks([])
    plt.grid(False)
    plt.imshow(train_images[i], cmap=plt.cm.binary)
    plt.xlabel(class_names[train_labels[i]])
plt.show()

모델 구성


model = keras.Sequential([
	keras.layers.Flatten(input_shape=(28, 28)), # 2차원 배열의 이미지 포맷을 28*28=784픽셀의 1차원 배열로 변환
    keras.layers.Dense(128, activation='relu'), # 128개의 노드
    keras.layers.Dense(10, activation='softmax') # 10개의 노드
)]

모델 컴파일


  • 손실 함수: 훈련 중 모델이 얼마나 정확한지 측정
  • 옵티마이저: 모델이 인식하는 데이터와 해당 손실함수를 기반으로 모델이 업데이트 되는 방식
  • 메트릭: 훈련 및 테스트 단계를 모니터링 할 때 사용
model.compile(optimizer='adam',
loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
metrics=['accuracy'])

모델 훈련


  1. 훈련 데이터 모델에 주입(train_images, train_labels 배열)
  2. 모델이 이미지와 레이블 매핑하는 방법 배움
  3. 테스트 셋에 대한 모델의 예측을 만듦(test_images배열을 통한 예측이 test_labels 배열의 레이블과 맞는지 확인)
  4. 예측이 test_labels 배열의 레이블과 일치하는지 확인
  • 훈련 시작
model.fit(train_images, train_labels, epochs=10)
  • 정확도 평가
test_loss, test_acc = model.evaluate(test_images, test_labels, verbose=2)
print("\n테스트 정확도: ", test_acc)
  • 예측하기
probability_model = tf.keras.Sequential([model, tf.keras.layers.Softmax()])

# 첫번째 예측
predictions = model.predict(test_images)
predictions[0]
# 가장 높은 신뢰도 가진 레이블 찾기
np.argmax(predictions[0])
# 예측과 test_label 비교
test_labels[0]

0개의 댓글