Naver Project (fashion_MNIST-keras)

Jacob Kim·2024년 1월 28일
0

Naver Project Week 1

목록 보기
21/28
import tensorflow as tf
from tensorflow.keras import layers

from sklearn.model_selection import train_test_split

import numpy as np
import matplotlib.pyplot as plt

tf.__version__
#2.15.0
# Load training and eval data from tf.keras
(train_data, train_labels), (test_data, test_labels) = \
    tf.keras.datasets.fashion_mnist.load_data()

train_data, valid_data, train_labels, valid_labels = \
    train_test_split(train_data, train_labels, test_size=0.1, shuffle=True)

train_data = train_data / 255.
train_data = train_data.reshape(-1, 784)
train_data = train_data.astype(np.float32)
train_labels = train_labels.astype(np.int32)

test_data = test_data / 255.
test_data = test_data.reshape(-1, 784)
test_data = test_data.astype(np.float32)
test_labels = test_labels.astype(np.int32)

valid_data = valid_data / 255.
valid_data = valid_data.reshape(-1, 784)
valid_data = valid_data.astype(np.float32)
valid_labels = valid_labels.astype(np.int32)


print(train_data.shape, train_labels.shape)
print(test_data.shape, test_labels.shape)
print(valid_data.shape, valid_labels.shape)
#(54000, 784) (54000,)
#(10000, 784) (10000,)
#(6000, 784) (6000,)
def one_hot_label(image, label):
  label = tf.one_hot(label, depth=10)
  return image, label
batch_size = 32
max_epochs = 50

# for train
train_dataset = tf.data.Dataset.from_tensor_slices((train_data, train_labels))
train_dataset = train_dataset.map(one_hot_label)
train_dataset = train_dataset.repeat().batch(batch_size=batch_size)
print(train_dataset)

# for test
test_dataset = tf.data.Dataset.from_tensor_slices((test_data, test_labels))
test_dataset = test_dataset.map(one_hot_label)
test_dataset = test_dataset.batch(batch_size=batch_size)
print(test_dataset)

# for test
valid_dataset = tf.data.Dataset.from_tensor_slices((valid_data, valid_labels))
valid_dataset = valid_dataset.map(one_hot_label)
valid_dataset = valid_dataset.batch(batch_size=batch_size)
print(valid_dataset)
#<_BatchDataset element_spec=(TensorSpec(shape=(None, 784), dtype=tf.float32, name=None), TensorSpec(shape=(None, 10), dtype=tf.float32, name=None))>
#<_BatchDataset element_spec=(TensorSpec(shape=(None, 784), dtype=tf.float32, name=None), TensorSpec(shape=(None, 10), dtype=tf.float32, name=None))>
#<_BatchDataset element_spec=(TensorSpec(shape=(None, 784), dtype=tf.float32, name=None), TensorSpec(shape=(None, 10), dtype=tf.float32, name=None))>
model = tf.keras.Sequential()

model.add(layers.Dense(units=256, activation='relu'))
model.add(layers.Dense(units=128))
model.add(layers.Activation("relu"))
model.add(layers.Dense(units=64, activation='relu'))
model.add(layers.Dense(units=32, activation='relu'))
model.add(layers.Dense(units=16, activation='relu'))

# model.add(layers.Dense(units=10, activation='softmax')) # from_logits=False
model.add(layers.Dense(units=10))# from_logits=True
model.compile(optimizer=tf.keras.optimizers.Adam(1e-4),
              loss=tf.keras.losses.CategoricalCrossentropy(from_logits=True),
              #loss=tf.keras.losses.categorical_crossentropy,
              #tf.keras.losses.categorical_crossentropy(lable, pred)
              metrics=['accuracy'])
# without training, just inference a model in eager execution:
predictions = model(train_data[0:1], training=False)
print("Predictions: ", predictions.numpy())
#Predictions:  [[-0.46533424  0.00344373  0.24656051  0.5124425   0.71339065 -0.6960791
#   0.11535165 -0.45339873 -0.63152814 -0.23279011]]
model.summary()
#output
Model: "sequential"
_________________________________________________________________
 Layer (type)                Output Shape              Param #   
=================================================================
 dense (Dense)               (1, 256)                  200960    
                                                                 
 dense_1 (Dense)             (1, 128)                  32896     
                                                                 
 activation (Activation)     (1, 128)                  0         
                                                                 
 dense_2 (Dense)             (1, 64)                   8256      
                                                                 
 dense_3 (Dense)             (1, 32)                   2080      
                                                                 
 dense_4 (Dense)             (1, 16)                   528       
                                                                 
 dense_5 (Dense)             (1, 10)                   170       
                                                                 
=================================================================
Total params: 244890 (956.60 KB)
Trainable params: 244890 (956.60 KB)
Non-trainable params: 0 (0.00 Byte)
_________________________________________________________________
# using `tf.data.Dataset`
history = model.fit(train_dataset, epochs=max_epochs,
                    steps_per_epoch=len(train_data) // batch_size,
                    validation_data=valid_dataset,
                    validation_steps=len(valid_data) // batch_size)
Epoch 1/50
1687/1687 [==============================] - 17s 8ms/step - loss: 0.7797 - accuracy: 0.7376 - val_loss: 0.5150 - val_accuracy: 0.8150
Epoch 2/50
1687/1687 [==============================] - 8s 5ms/step - loss: 0.4492 - accuracy: 0.8423 - val_loss: 0.4543 - val_accuracy: 0.8366
Epoch 3/50
1687/1687 [==============================] - 8s 5ms/step - loss: 0.3992 - accuracy: 0.8594 - val_loss: 0.4403 - val_accuracy: 0.8416
Epoch 4/50
1687/1687 [==============================] - 8s 5ms/step - loss: 0.3705 - accuracy: 0.8681 - val_loss: 0.4204 - val_accuracy: 0.8474
Epoch 5/50
1687/1687 [==============================] - 8s 5ms/step - loss: 0.3500 - accuracy: 0.8754 - val_loss: 0.4073 - val_accuracy: 0.8539
Epoch 6/50
1687/1687 [==============================] - 8s 5ms/step - loss: 0.3337 - accuracy: 0.8806 - val_loss: 0.3881 - val_accuracy: 0.8588
Epoch 7/50
1687/1687 [==============================] - 8s 5ms/step - loss: 0.3195 - accuracy: 0.8847 - val_loss: 0.3826 - val_accuracy: 0.8633
Epoch 8/50
1687/1687 [==============================] - 8s 5ms/step - loss: 0.3073 - accuracy: 0.8886 - val_loss: 0.3666 - val_accuracy: 0.8693
Epoch 9/50
1687/1687 [==============================] - 9s 5ms/step - loss: 0.2961 - accuracy: 0.8919 - val_loss: 0.3588 - val_accuracy: 0.8742
Epoch 10/50
1687/1687 [==============================] - 9s 5ms/step - loss: 0.2863 - accuracy: 0.8958 - val_loss: 0.3517 - val_accuracy: 0.8757
Epoch 11/50
1687/1687 [==============================] - 8s 5ms/step - loss: 0.2769 - accuracy: 0.8986 - val_loss: 0.3448 - val_accuracy: 0.8793
Epoch 12/50
1687/1687 [==============================] - 8s 5ms/step - loss: 0.2685 - accuracy: 0.9014 - val_loss: 0.3388 - val_accuracy: 0.8824
Epoch 13/50
1687/1687 [==============================] - 9s 5ms/step - loss: 0.2602 - accuracy: 0.9045 - val_loss: 0.3381 - val_accuracy: 0.8845
Epoch 14/50
1687/1687 [==============================] - 8s 5ms/step - loss: 0.2527 - accuracy: 0.9073 - val_loss: 0.3322 - val_accuracy: 0.8860
Epoch 15/50
1687/1687 [==============================] - 8s 5ms/step - loss: 0.2448 - accuracy: 0.9104 - val_loss: 0.3315 - val_accuracy: 0.8880
Epoch 16/50
1687/1687 [==============================] - 9s 5ms/step - loss: 0.2381 - accuracy: 0.9125 - val_loss: 0.3255 - val_accuracy: 0.8882
Epoch 17/50
1687/1687 [==============================] - 8s 5ms/step - loss: 0.2308 - accuracy: 0.9152 - val_loss: 0.3284 - val_accuracy: 0.8922
Epoch 18/50
1687/1687 [==============================] - 10s 6ms/step - loss: 0.2245 - accuracy: 0.9178 - val_loss: 0.3286 - val_accuracy: 0.8904
Epoch 19/50
1687/1687 [==============================] - 10s 6ms/step - loss: 0.2180 - accuracy: 0.9202 - val_loss: 0.3273 - val_accuracy: 0.8914
Epoch 20/50
1687/1687 [==============================] - 8s 5ms/step - loss: 0.2125 - accuracy: 0.9226 - val_loss: 0.3339 - val_accuracy: 0.8905
Epoch 21/50
1687/1687 [==============================] - 9s 5ms/step - loss: 0.2063 - accuracy: 0.9248 - val_loss: 0.3332 - val_accuracy: 0.8917
Epoch 22/50
1687/1687 [==============================] - 8s 5ms/step - loss: 0.2005 - accuracy: 0.9271 - val_loss: 0.3401 - val_accuracy: 0.8899
Epoch 23/50
1687/1687 [==============================] - 8s 4ms/step - loss: 0.1951 - accuracy: 0.9289 - val_loss: 0.3365 - val_accuracy: 0.8919
Epoch 24/50
1687/1687 [==============================] - 9s 5ms/step - loss: 0.1892 - accuracy: 0.9314 - val_loss: 0.3368 - val_accuracy: 0.8919
Epoch 25/50
1687/1687 [==============================] - 8s 5ms/step - loss: 0.1842 - accuracy: 0.9329 - val_loss: 0.3425 - val_accuracy: 0.8897
Epoch 26/50
1687/1687 [==============================] - 8s 5ms/step - loss: 0.1788 - accuracy: 0.9353 - val_loss: 0.3532 - val_accuracy: 0.8902
Epoch 27/50
1687/1687 [==============================] - 9s 5ms/step - loss: 0.1735 - accuracy: 0.9372 - val_loss: 0.3451 - val_accuracy: 0.8912
Epoch 28/50
1687/1687 [==============================] - 8s 4ms/step - loss: 0.1684 - accuracy: 0.9392 - val_loss: 0.3593 - val_accuracy: 0.8879
Epoch 29/50
1687/1687 [==============================] - 9s 5ms/step - loss: 0.1631 - accuracy: 0.9409 - val_loss: 0.3554 - val_accuracy: 0.8887
Epoch 30/50
1687/1687 [==============================] - 9s 5ms/step - loss: 0.1606 - accuracy: 0.9422 - val_loss: 0.3521 - val_accuracy: 0.8899
Epoch 31/50
1687/1687 [==============================] - 7s 4ms/step - loss: 0.1539 - accuracy: 0.9452 - val_loss: 0.3712 - val_accuracy: 0.8872
Epoch 32/50
1687/1687 [==============================] - 9s 5ms/step - loss: 0.1485 - accuracy: 0.9469 - val_loss: 0.3724 - val_accuracy: 0.8877
Epoch 33/50
1687/1687 [==============================] - 8s 5ms/step - loss: 0.1455 - accuracy: 0.9479 - val_loss: 0.3766 - val_accuracy: 0.8884
Epoch 34/50
1687/1687 [==============================] - 8s 5ms/step - loss: 0.1407 - accuracy: 0.9503 - val_loss: 0.3825 - val_accuracy: 0.8885
Epoch 35/50
1687/1687 [==============================] - 9s 5ms/step - loss: 0.1347 - accuracy: 0.9525 - val_loss: 0.3984 - val_accuracy: 0.8827
Epoch 36/50
1687/1687 [==============================] - 8s 5ms/step - loss: 0.1315 - accuracy: 0.9538 - val_loss: 0.3995 - val_accuracy: 0.8840
Epoch 37/50
1687/1687 [==============================] - 9s 5ms/step - loss: 0.1267 - accuracy: 0.9555 - val_loss: 0.4112 - val_accuracy: 0.8827
Epoch 38/50
1687/1687 [==============================] - 9s 5ms/step - loss: 0.1240 - accuracy: 0.9570 - val_loss: 0.4069 - val_accuracy: 0.8882
Epoch 39/50
1687/1687 [==============================] - 8s 5ms/step - loss: 0.1222 - accuracy: 0.9575 - val_loss: 0.4143 - val_accuracy: 0.8875
Epoch 40/50
1687/1687 [==============================] - 9s 5ms/step - loss: 0.1146 - accuracy: 0.9604 - val_loss: 0.4058 - val_accuracy: 0.8904
Epoch 41/50
1687/1687 [==============================] - 9s 5ms/step - loss: 0.1106 - accuracy: 0.9630 - val_loss: 0.4182 - val_accuracy: 0.8890
Epoch 42/50
1687/1687 [==============================] - 8s 5ms/step - loss: 0.1101 - accuracy: 0.9621 - val_loss: 0.4404 - val_accuracy: 0.8870
Epoch 43/50
1687/1687 [==============================] - 9s 5ms/step - loss: 0.1050 - accuracy: 0.9634 - val_loss: 0.4228 - val_accuracy: 0.8904
Epoch 44/50
1687/1687 [==============================] - 9s 5ms/step - loss: 0.1003 - accuracy: 0.9659 - val_loss: 0.4312 - val_accuracy: 0.8907
Epoch 45/50
1687/1687 [==============================] - 7s 4ms/step - loss: 0.0978 - accuracy: 0.9667 - val_loss: 0.4527 - val_accuracy: 0.8862
Epoch 46/50
1687/1687 [==============================] - 9s 5ms/step - loss: 0.0950 - accuracy: 0.9675 - val_loss: 0.4713 - val_accuracy: 0.8859
Epoch 47/50
1687/1687 [==============================] - 9s 5ms/step - loss: 0.0914 - accuracy: 0.9696 - val_loss: 0.4621 - val_accuracy: 0.8874
Epoch 48/50
1687/1687 [==============================] - 8s 5ms/step - loss: 0.0878 - accuracy: 0.9708 - val_loss: 0.4743 - val_accuracy: 0.8869
Epoch 49/50
1687/1687 [==============================] - 9s 5ms/step - loss: 0.0858 - accuracy: 0.9712 - val_loss: 0.4744 - val_accuracy: 0.8910
Epoch 50/50
1687/1687 [==============================] - 9s 5ms/step - loss: 0.0834 - accuracy: 0.9719 - val_loss: 0.4940 - val_accuracy: 0.8850
acc = history.history['accuracy']
val_acc = history.history['val_accuracy']

loss = history.history['loss']
val_loss = history.history['val_loss']

epochs_range = range(max_epochs)

plt.figure(figsize=(8, 8))
plt.subplot(1, 2, 1)
plt.plot(epochs_range, acc, label='Training Accuracy')
plt.plot(epochs_range, val_acc, label='Validation Accuracy')
plt.legend(loc='lower right')
plt.title('Training and Valid Accuracy')

plt.subplot(1, 2, 2)
plt.plot(epochs_range, loss, label='Training Loss')
plt.plot(epochs_range, val_loss, label='Validation Loss')
plt.legend(loc='upper right')
plt.title('Training and Valid Loss')
plt.show()

results = model.evaluate(test_dataset)
#313/313 [==============================] - 1s 3ms/step - loss: 0.5602 - accuracy: 0.8801
profile
AI, Information and Communication, Electronics, Computer Science, Bio, Algorithms

0개의 댓글