import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import keras
import tensorflow as tf
import sklearn as sk
from tensorflow.keras.layers import *
from tensorflow.keras.models import *
from tensorflow.keras.utils import *
from sklearn.preprocessing import *
import seaborn as sns
print(tf.__version__)
print(np.__version__)
print(pd.__version__)
print(sns.__version__)
print(sk.__version__)
2.11.0 1.21.5 1.4.4 0.11.2 1.0.2
from keras.datasets import cifar10
(X_train, Y_train), (X_test, Y_test) = cifar10.load_data()
X_train.shape, Y_train.shape, X_test.shape, Y_test.shape
((50000, 32, 32, 3), (50000, 1), (10000, 32, 32, 3), (10000, 1))
fig = plt.figure(figsize=(20,5))
for i in range(30):
ax = fig.add_subplot(3, 10, i+1, xticks=[], yticks=[])
ax.imshow(X_train[i])
print(X_train[0][0:1])
X_train_n = X_train/255.0
X_test_n = X_test /255.0
print(X_train_n[0][0:1])
[[[ 59 62 63] [ 43 46 45] [ 50 48 43] [ 68 54 42] [ 98 73 52] [119 91 63] [139 107 75] [145 110 80] [149 117 89] [149 120 93] [131 103 77] [125 99 76] [142 115 91] [144 112 86] [137 105 79] [129 97 71] [137 106 79] [134 106 76] [124 97 64] [139 113 78] [139 112 75] [133 105 69] [136 105 74] [139 108 77] [152 120 89] [163 131 100] [168 136 108] [159 129 102] [158 130 104] [158 132 108] [152 125 102] [148 124 103]]] [[[0.23137255 0.24313725 0.24705882] [0.16862745 0.18039216 0.17647059] [0.19607843 0.18823529 0.16862745] [0.26666667 0.21176471 0.16470588] [0.38431373 0.28627451 0.20392157] [0.46666667 0.35686275 0.24705882] [0.54509804 0.41960784 0.29411765] [0.56862745 0.43137255 0.31372549] [0.58431373 0.45882353 0.34901961] [0.58431373 0.47058824 0.36470588] [0.51372549 0.40392157 0.30196078] [0.49019608 0.38823529 0.29803922] [0.55686275 0.45098039 0.35686275] [0.56470588 0.43921569 0.3372549 ] [0.5372549 0.41176471 0.30980392] [0.50588235 0.38039216 0.27843137] [0.5372549 0.41568627 0.30980392] [0.5254902 0.41568627 0.29803922] [0.48627451 0.38039216 0.25098039] [0.54509804 0.44313725 0.30588235] [0.54509804 0.43921569 0.29411765] [0.52156863 0.41176471 0.27058824] [0.53333333 0.41176471 0.29019608] [0.54509804 0.42352941 0.30196078] [0.59607843 0.47058824 0.34901961] [0.63921569 0.51372549 0.39215686] [0.65882353 0.53333333 0.42352941] [0.62352941 0.50588235 0.4 ] [0.61960784 0.50980392 0.40784314] [0.61960784 0.51764706 0.42352941] [0.59607843 0.49019608 0.4 ] [0.58039216 0.48627451 0.40392157]]]
print(Y_train[0:3])
Y_train_n = to_categorical(Y_train)
Y_test_n = to_categorical(Y_test)
print(Y_train_n[0:3])
[[6] [9] [9]] [[0. 0. 0. 0. 0. 0. 1. 0. 0. 0.] [0. 0. 0. 0. 0. 0. 0. 0. 0. 1.] [0. 0. 0. 0. 0. 0. 0. 0. 0. 1.]]
model = Sequential()
model.add(Conv2D(filters=16, kernel_size=3,
padding='same', strides=1, activation='relu', input_shape=(32,32,3)))
model.add(MaxPool2D(pool_size=2))
model.add(Conv2D(filters=32, kernel_size=3,
padding='same', strides=1, activation='relu'))
model.add(MaxPool2D(pool_size=2))
model.add(Conv2D(filters=64, kernel_size=3,
padding='same', strides=1, activation='relu'))
model.add(MaxPool2D(pool_size=2))
# FCL(fully connected layer)
model.add(Flatten())
model.add(Dense(512, activation='relu'))
model.add(Dense(10, activation='softmax'))
model.summary()
Model: "sequential_1" _________________________________________________________________ Layer (type) Output Shape Param # ================================================================= conv2d_3 (Conv2D) (None, 32, 32, 16) 448 max_pooling2d_3 (MaxPooling (None, 16, 16, 16) 0 2D) conv2d_4 (Conv2D) (None, 16, 16, 32) 4640 max_pooling2d_4 (MaxPooling (None, 8, 8, 32) 0 2D) conv2d_5 (Conv2D) (None, 8, 8, 64) 18496 max_pooling2d_5 (MaxPooling (None, 4, 4, 64) 0 2D) flatten_1 (Flatten) (None, 1024) 0 dense_2 (Dense) (None, 512) 524800 dense_3 (Dense) (None, 10) 5130 ================================================================= Total params: 553,514 Trainable params: 553,514 Non-trainable params: 0 _________________________________________________________________
model.compile(loss='categorical_crossentropy',
optimizer='adam', metrics=['accuracy'])
model.fit(X_train_n, Y_train_n,
batch_size=128, epochs=5, validation_split=0.1)
Epoch 1/5 352/352 [==============================] - 131s 320ms/step - loss: 1.5761 - accuracy: 0.4236 - val_loss: 1.3098 - val_accuracy: 0.5252 Epoch 2/5 352/352 [==============================] - 88s 248ms/step - loss: 1.2142 - accuracy: 0.5637 - val_loss: 1.1304 - val_accuracy: 0.5892 Epoch 3/5 352/352 [==============================] - 68s 193ms/step - loss: 1.0565 - accuracy: 0.6249 - val_loss: 0.9866 - val_accuracy: 0.6552 Epoch 4/5 352/352 [==============================] - 69s 195ms/step - loss: 0.9303 - accuracy: 0.6702 - val_loss: 0.9041 - val_accuracy: 0.6826 Epoch 5/5 352/352 [==============================] - 52s 146ms/step - loss: 0.8391 - accuracy: 0.7052 - val_loss: 0.8463 - val_accuracy: 0.7064
<keras.callbacks.History at 0x164667a9280>
model.evaluate(X_test_n, Y_test_n)
313/313 [==============================] - 8s 25ms/step - loss: 0.8713 - accuracy: 0.6951
[0.8713232278823853, 0.6951000094413757]
from tensorflow.keras.layers import LeakyReLU
model = Sequential()
model.add(Conv2D(filters=16, kernel_size=3,
padding='same', strides=1, input_shape=(32,32,3)))
model.add(LeakyReLU(alpha=0.2))
model.add(MaxPool2D(pool_size=2))
model.add(Conv2D(filters=32, kernel_size=3, padding='same', strides=1))
model.add(LeakyReLU(alpha=0.2))
model.add(MaxPool2D(pool_size=2))
model.add(Conv2D(filters=64, kernel_size=3, padding='same', strides=1))
model.add(LeakyReLU(alpha=0.2))
model.add(MaxPool2D(pool_size=2))
# FCL(fully connected layer)
model.add(Flatten())
model.add(Dense(512))
model.add(LeakyReLU(alpha=0.2))
model.add(Dense(10, activation='softmax'))
model.summary()
Model: "sequential_3" _________________________________________________________________ Layer (type) Output Shape Param # ================================================================= conv2d_9 (Conv2D) (None, 32, 32, 16) 448 leaky_re_lu_4 (LeakyReLU) (None, 32, 32, 16) 0 max_pooling2d_9 (MaxPooling (None, 16, 16, 16) 0 2D) conv2d_10 (Conv2D) (None, 16, 16, 32) 4640 leaky_re_lu_5 (LeakyReLU) (None, 16, 16, 32) 0 max_pooling2d_10 (MaxPoolin (None, 8, 8, 32) 0 g2D) conv2d_11 (Conv2D) (None, 8, 8, 64) 18496 leaky_re_lu_6 (LeakyReLU) (None, 8, 8, 64) 0 max_pooling2d_11 (MaxPoolin (None, 4, 4, 64) 0 g2D) flatten_3 (Flatten) (None, 1024) 0 dense_6 (Dense) (None, 512) 524800 leaky_re_lu_7 (LeakyReLU) (None, 512) 0 dense_7 (Dense) (None, 10) 5130 ================================================================= Total params: 553,514 Trainable params: 553,514 Non-trainable params: 0 _________________________________________________________________
%%time
model.compile(loss='categorical_crossentropy',
optimizer='adam', metrics=['accuracy'])
model.fit(X_train_n, Y_train_n,
batch_size=128, epochs=5, validation_split=0.1)
Epoch 1/5 352/352 [==============================] - 57s 157ms/step - loss: 1.4769 - accuracy: 0.4704 - val_loss: 1.1868 - val_accuracy: 0.5820 Epoch 2/5 352/352 [==============================] - 56s 160ms/step - loss: 1.0984 - accuracy: 0.6134 - val_loss: 1.0091 - val_accuracy: 0.6464 Epoch 3/5 352/352 [==============================] - 58s 165ms/step - loss: 0.9546 - accuracy: 0.6650 - val_loss: 0.9837 - val_accuracy: 0.6532 Epoch 4/5 352/352 [==============================] - 77s 219ms/step - loss: 0.8504 - accuracy: 0.7012 - val_loss: 0.8774 - val_accuracy: 0.6884 Epoch 5/5 352/352 [==============================] - 61s 173ms/step - loss: 0.7689 - accuracy: 0.7284 - val_loss: 0.8407 - val_accuracy: 0.7092 Wall time: 5min 9s
<keras.callbacks.History at 0x164bef5b0d0>
model.evaluate(X_test_n, Y_test_n)
313/313 [==============================] - 9s 29ms/step - loss: 0.8697 - accuracy: 0.6965
[0.8697460889816284, 0.6965000033378601]
import os
path = os.path.join(os.getcwd(), "cifar_model")
savefile = os.path.join(path, "my_model_leaky.h5" )
model.save(savefile)
!dir cifar_model
D 드라이브의 볼륨: BackUp 볼륨 일련 번호: 4EB1-0AD7 D:\GitHub\DeepLearning_Basic_Class\cifar_model 디렉터리 2022-11-21 오후 03:45 <DIR> . 2022-11-21 오후 03:45 <DIR> .. 2022-11-21 오후 03:45 6,698,688 my_model_leaky.h5 1개 파일 6,698,688 바이트 2개 디렉터리 250,605,187,072 바이트 남음
# 모델을 불러온다.
load_model = keras.models.load_model('cifar_model\my_model_leaky.h5')
load_model
<keras.engine.sequential.Sequential at 0x164e292bf70>
load_model.evaluate(X_test_n, Y_test_n)
313/313 [==============================] - 8s 25ms/step - loss: 0.8697 - accuracy: 0.6965
[0.8697460889816284, 0.6965000033378601]