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
import numpy as np
# 손실율과 정확도 출력
loss, accuracy = model.evaluate(testX, testY)
print(loss, accuracy)
# 결과
0.4634006917476654 0.8521000146865845
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