[tensorflow] #5. 케라스 기본 데이터로 훈련 연습을 해보자

exoluse·2021년 10월 26일
0

python - tensorflow

목록 보기
5/7
post-thumbnail

텐서플로우 import

import tensorflow as tf

케라스가 기본으로 제공하는 이미지와 정답

# [inputimage, 정답] [테스트용 image, 테스트용 정답]
(trainX, trainY), (testX, testY) = tf.keras.datasets.fashion_mnist.load_data()

# 실제 정답의 값
classNames = ['T-shirt/top', 'Trouser', 'Pullover', 'Dress'
                , 'Coat', 'Sandal', 'Shirt', 'Sneaker', 'Bag', 'Ankle']

모델 만들기

model = tf.keras.models.Sequential([

    # model.summary()를 보고싶다면 레이어 갯수와 입력할 모양 집어넣음
    # 예시 : input_shape=(28,28)
    tf.keras.layers.Dense(64, input_shape=(28,28), activation="relu"),
    tf.keras.layers.Dense(128, activation="relu"),
    tf.keras.layers.Flatten(),

    # 카테고리 예측 문제는 softmax
    # softmax 값을 다 더하면 1이 나옴.
    tf.keras.layers.Dense(10, activation="softmax")
])

만들 모델의 요약본 출력

model.summary()
Model: "sequential"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
dense (Dense)                (None, 28, 64)            1856      
_________________________________________________________________
dense_1 (Dense)              (None, 28, 128)           8320      
_________________________________________________________________
flatten (Flatten)            (None, 3584)              0         
_________________________________________________________________
dense_2 (Dense)              (None, 10)                35850     
=================================================================
Total params: 46,026
Trainable params: 46,026
Non-trainable params: 0

1. dense (Dense) : 첫번째 단계 레이어, 
2. (None, 28, 128) : 128개의 데이터가 28개 있는 레이어임
3. 1856/8320/0/35850 : 파라미터 갯수
4. flatten (Flatten) : 레이어를 통해 나온 결과를 1차원으로 다져줌

컴파일

# OneHotEncoding 인 경우 categorical_crossentropy 사용
model.compile(loss="sparse_categorical_crossentropy", optimizer="adam", metrics=['accuracy'])

훈련 시작

# 훈련용 이미지, 정답을 넣고 5번 학습
model.fit(trainX, trainY, epochs=5)

전체 소스

import tensorflow as tf


# [inputimage, 정답] [테스트용 image, 테스트용 정답]
(trainX, trainY), (testX, testY) = tf.keras.datasets.fashion_mnist.load_data()

# 실제 정답 인덱스와 동일한 값
classNames = ['T-shirt/top', 'Trouser', 'Pullover', 'Dress'
                , 'Coat', 'Sandal', 'Shirt', 'Sneaker', 'Bag', 'Ankle']


# 모델 만들기(10개종류 확률)
model = tf.keras.models.Sequential([

    # model.summary()를 보고싶다면 레이어 갯수와 입력할 모양 집어넣음. 없어도 돌아는 간다.
    # 예시 : input_shape=(28,28)
    tf.keras.layers.Dense(64, input_shape=(28,28), activation="relu"),
    tf.keras.layers.Dense(128, activation="relu"),
    tf.keras.layers.Flatten(),

    # 카테고리 예측 문제는 softmax
    # softmax 값을 다 더하면 1이 나옴.
    tf.keras.layers.Dense(10, activation="softmax")
])

# 만들 모델의 요약본 출력
model.summary()

# OneHotEncoding 인 경우 categorical_crossentropy 사용
model.compile(loss="sparse_categorical_crossentropy", optimizer="adam", metrics=['accuracy'])

# 훈련용 이미지, 정답을 넣고 5번 학습
model.fit(trainX, trainY, epochs=5)

훈련 결과

2021-10-26 21:43:09.093578: I tensorflow/compiler/mlir/mlir_graph_optimization_pass.cc:185] None of the MLIR Optimization Passes are enabled (registered 2)
Epoch 1/5
1875/1875 [==============================] - 6s 3ms/step - loss: 1.3807 - accuracy: 0.8011
Epoch 2/5
1875/1875 [==============================] - 5s 3ms/step - loss: 0.4381 - accuracy: 0.8480
Epoch 3/5
1875/1875 [==============================] - 5s 3ms/step - loss: 0.4093 - accuracy: 0.8570
Epoch 4/5
1875/1875 [==============================] - 5s 3ms/step - loss: 0.3847 - accuracy: 0.8641
Epoch 5/5
1875/1875 [==============================] - 5s 3ms/step - loss: 0.3612 - accuracy: 0.8716

add-on : 테스트 데이터로 손실율과 정확도 구하기

  1. 넘파이 import
import numpy as np
  1. 손실율/정확도 구하기
# 손실율과 정확도 출력
loss, accuracy = model.evaluate(testX, testY)
print(loss, accuracy)

# 결과
0.4634006917476654 0.8521000146865845
  1. 테스트 데이터로 예측하기
pred = model.predict(testX)
print(pred[0], np.argmax(pred[0]))

# 결과 : 전체 확률과 가장 높은 확률의 카테고리를 구한다.
[4.3984619e-06 1.5291361e-08 3.5611663e-07 2.1789783e-07 2.1934561e-07
 2.4688734e-02 1.5883238e-06 5.0154282e-03 5.5301293e-06 9.7028345e-01] 9

0개의 댓글