Deep Learning day 6 CIFAR10 dataset
93448 단어 Deep LearningDeep Learning
CIFAR10 Dataset 신경망으로 훈련
imports
import numpy as np
import tensorflow as tf
from tensorflow.keras.datasets import cifar10
import matplotlib.pyplot as plt
from tensorflow.keras.utils import to_categorical
from tensorflow.keras.models import Model
from tensorflow.keras.layers import Input, Flatten, Dense
from tensorflow.keras.optimizers import SGD, Adam
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Dropout
데이터 적재
(train_images, train_labels), (test_images, test_labels) = cifar10.load_data()
print(train_images.shape, train_labels.shape)
print(test_images.shape, test_labels.shape)
print(train_images[0].shape)
(50000, 32, 32, 3) (50000, 1)
(10000, 32, 32, 3) (10000, 1)
(32, 32, 3)
class_names = ["airplane", "automobile", "bird", "cat", "deer", "dog", "frog", "horse", "ship", "truck"]
train_labels[:10]
array([[6],
[9],
[9],
[4],
[1],
[1],
[2],
[7],
[8],
[3]], dtype=uint8)
데이터 시각화
train_labels = np.int32(train_labels.flatten())
figure, axes = plt.subplots(figsize=(22, 10), nrows=3, ncols=8)
for i in range(3):
for j in range(8):
axes[i][j].imshow(train_images[(i*8)+j])
axes[i][j].set_title(class_names[train_labels[(i*8)+j]])
데이터 전처리
train_images = np.array(train_images/255.0, dtype=np.float32)
train_labels = np.array(train_labels, dtype=np.float32)
test_images = np.array(test_images/255.0, dtype=np.float32)
test_labels = np.array(test_labels, dtype=np.float32)
train_oh_labels = to_categorical(train_labels)
test_oh_labels = to_categorical(test_labels)
test_oh_labels
array([[0., 0., 0., ..., 0., 0., 0.],
[0., 0., 0., ..., 0., 1., 0.],
[0., 0., 0., ..., 0., 1., 0.],
...,
[0., 0., 0., ..., 0., 0., 0.],
[0., 1., 0., ..., 0., 0., 0.],
[0., 0., 0., ..., 1., 0., 0.]], dtype=float32)
모델 생성
tf.keras.backend.clear_session()
input_tensor = Input(shape=(32, 32, 3))
x = Conv2D(filters=32, kernel_size=(3, 3), strides=1, padding="same", activation="relu")(input_tensor)
x = Conv2D(filters=32, kernel_size=(3, 3), strides=1, padding="same", activation="relu")(x)
x = MaxPooling2D(pool_size=(2, 2))(x)
x = Conv2D(filters=64, kernel_size=(3, 3), strides=1, padding="same", activation="relu")(x)
x = Conv2D(filters=64, kernel_size=(3, 3), strides=1, padding="same", activation="relu")(x)
x = MaxPooling2D(pool_size=(2, 2))(x)
x = Conv2D(filters=128, kernel_size=(3, 3), strides=1, padding="same", activation="relu")(x)
x = Conv2D(filters=128, kernel_size=(3, 3), strides=1, padding="same", activation="relu")(x)
x = MaxPooling2D(pool_size=(2, 2))(x)
x = Flatten()(x)
x = Dropout(rate=0.5)(x)
x = Dense(200, activation="relu")(x)
x = Dropout(rate=0.3)(x)
x = Dense(50, activation="relu")(x)
x = Dropout(rate=0.2)(x)
output = Dense(10, activation="softmax")(x)
model = Model(inputs=input_tensor, outputs=output)
model.summary()
Model: "model"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
input_1 (InputLayer) [(None, 32, 32, 3)] 0
_________________________________________________________________
conv2d (Conv2D) (None, 32, 32, 32) 896
_________________________________________________________________
conv2d_1 (Conv2D) (None, 32, 32, 32) 9248
_________________________________________________________________
max_pooling2d (MaxPooling2D) (None, 16, 16, 32) 0
_________________________________________________________________
conv2d_2 (Conv2D) (None, 16, 16, 64) 18496
_________________________________________________________________
conv2d_3 (Conv2D) (None, 16, 16, 64) 36928
_________________________________________________________________
max_pooling2d_1 (MaxPooling2 (None, 8, 8, 64) 0
_________________________________________________________________
conv2d_4 (Conv2D) (None, 8, 8, 128) 73856
_________________________________________________________________
conv2d_5 (Conv2D) (None, 8, 8, 128) 147584
_________________________________________________________________
max_pooling2d_2 (MaxPooling2 (None, 4, 4, 128) 0
_________________________________________________________________
flatten (Flatten) (None, 2048) 0
_________________________________________________________________
dropout (Dropout) (None, 2048) 0
_________________________________________________________________
dense (Dense) (None, 200) 409800
_________________________________________________________________
dropout_1 (Dropout) (None, 200) 0
_________________________________________________________________
dense_1 (Dense) (None, 50) 10050
_________________________________________________________________
dropout_2 (Dropout) (None, 50) 0
_________________________________________________________________
dense_2 (Dense) (None, 10) 510
=================================================================
Total params: 707,368
Trainable params: 707,368
Non-trainable params: 0
_________________________________________________________________
모델 컴파일
model.compile(optimizer=Adam(0.001), loss='categorical_crossentropy', metrics=['accuracy'])
모델 학습
history = model.fit(x=train_images, y=train_oh_labels, batch_size=128, epochs=30, validation_split=0.2)
Epoch 1/30
313/313 [==============================] - 11s 32ms/step - loss: 1.9087 - accuracy: 0.2770 - val_loss: 1.4983 - val_accuracy: 0.4432
Epoch 2/30
313/313 [==============================] - 9s 30ms/step - loss: 1.4160 - accuracy: 0.4798 - val_loss: 1.2022 - val_accuracy: 0.5632
Epoch 3/30
313/313 [==============================] - 9s 30ms/step - loss: 1.2014 - accuracy: 0.5719 - val_loss: 1.0549 - val_accuracy: 0.6254
Epoch 4/30
313/313 [==============================] - 9s 30ms/step - loss: 1.0577 - accuracy: 0.6290 - val_loss: 0.9573 - val_accuracy: 0.6629
Epoch 5/30
313/313 [==============================] - 10s 31ms/step - loss: 0.9568 - accuracy: 0.6651 - val_loss: 0.8541 - val_accuracy: 0.6987
Epoch 6/30
313/313 [==============================] - 9s 30ms/step - loss: 0.8784 - accuracy: 0.6950 - val_loss: 0.8072 - val_accuracy: 0.7194
Epoch 7/30
313/313 [==============================] - 9s 30ms/step - loss: 0.8141 - accuracy: 0.7188 - val_loss: 0.7802 - val_accuracy: 0.7307
Epoch 8/30
313/313 [==============================] - 9s 30ms/step - loss: 0.7461 - accuracy: 0.7421 - val_loss: 0.7149 - val_accuracy: 0.7513
Epoch 9/30
313/313 [==============================] - 9s 30ms/step - loss: 0.6958 - accuracy: 0.7590 - val_loss: 0.7201 - val_accuracy: 0.7513
Epoch 10/30
313/313 [==============================] - 9s 30ms/step - loss: 0.6614 - accuracy: 0.7723 - val_loss: 0.7339 - val_accuracy: 0.7481
Epoch 11/30
313/313 [==============================] - 9s 30ms/step - loss: 0.6139 - accuracy: 0.7875 - val_loss: 0.6798 - val_accuracy: 0.7676
Epoch 12/30
313/313 [==============================] - 9s 30ms/step - loss: 0.5765 - accuracy: 0.8024 - val_loss: 0.6607 - val_accuracy: 0.7783
Epoch 13/30
313/313 [==============================] - 9s 30ms/step - loss: 0.5489 - accuracy: 0.8124 - val_loss: 0.6993 - val_accuracy: 0.7672
Epoch 14/30
313/313 [==============================] - 10s 32ms/step - loss: 0.5113 - accuracy: 0.8245 - val_loss: 0.6425 - val_accuracy: 0.7851
Epoch 15/30
313/313 [==============================] - 10s 30ms/step - loss: 0.4910 - accuracy: 0.8322 - val_loss: 0.7364 - val_accuracy: 0.7622
Epoch 16/30
313/313 [==============================] - 9s 30ms/step - loss: 0.4602 - accuracy: 0.8428 - val_loss: 0.6380 - val_accuracy: 0.7954
Epoch 17/30
313/313 [==============================] - 9s 30ms/step - loss: 0.4276 - accuracy: 0.8528 - val_loss: 0.6542 - val_accuracy: 0.7889
Epoch 18/30
313/313 [==============================] - 9s 30ms/step - loss: 0.4184 - accuracy: 0.8555 - val_loss: 0.6261 - val_accuracy: 0.7980
Epoch 19/30
313/313 [==============================] - 9s 30ms/step - loss: 0.4035 - accuracy: 0.8616 - val_loss: 0.6297 - val_accuracy: 0.7985
Epoch 20/30
313/313 [==============================] - 9s 30ms/step - loss: 0.3766 - accuracy: 0.8693 - val_loss: 0.6393 - val_accuracy: 0.7939
Epoch 21/30
313/313 [==============================] - 9s 30ms/step - loss: 0.3590 - accuracy: 0.8759 - val_loss: 0.6450 - val_accuracy: 0.7964
Epoch 22/30
313/313 [==============================] - 9s 30ms/step - loss: 0.3507 - accuracy: 0.8795 - val_loss: 0.6745 - val_accuracy: 0.7956
Epoch 23/30
313/313 [==============================] - 10s 31ms/step - loss: 0.3327 - accuracy: 0.8847 - val_loss: 0.6545 - val_accuracy: 0.7930
Epoch 24/30
313/313 [==============================] - 10s 30ms/step - loss: 0.3212 - accuracy: 0.8893 - val_loss: 0.6279 - val_accuracy: 0.8035
Epoch 25/30
313/313 [==============================] - 9s 30ms/step - loss: 0.3073 - accuracy: 0.8939 - val_loss: 0.6719 - val_accuracy: 0.8000
Epoch 26/30
313/313 [==============================] - 9s 30ms/step - loss: 0.3010 - accuracy: 0.8949 - val_loss: 0.6946 - val_accuracy: 0.7978
Epoch 27/30
313/313 [==============================] - 10s 30ms/step - loss: 0.2804 - accuracy: 0.9034 - val_loss: 0.6781 - val_accuracy: 0.8019
Epoch 28/30
313/313 [==============================] - 10s 31ms/step - loss: 0.2773 - accuracy: 0.9046 - val_loss: 0.7195 - val_accuracy: 0.8019
Epoch 29/30
313/313 [==============================] - 9s 30ms/step - loss: 0.2677 - accuracy: 0.9075 - val_loss: 0.6884 - val_accuracy: 0.8010
Epoch 30/30
313/313 [==============================] - 10s 31ms/step - loss: 0.2591 - accuracy: 0.9115 - val_loss: 0.6862 - val_accuracy: 0.8023
plt.plot(history.history["accuracy"], label="train")
plt.plot(history.history["val_accuracy"], label="valid")
plt.legend()
<matplotlib.legend.Legend at 0x7f9ae0df8e50>
테스트 데이터에서 검증
predict_proba = model.predict(np.reshape(test_images[0], (-1, 32, 32, 3)))
predict = np.argmax(predict_proba, axis=1)
predict
array([3])
plt.imshow(test_images[0])
<matplotlib.image.AxesImage at 0x7f9ae0dac210>
test_labels[0]
array([3.], dtype=float32)
model.evaluate(test_images, test_oh_labels, batch_size=128, verbose=1)
79/79 [==============================] - 1s 11ms/step - loss: 0.7197 - accuracy: 0.7978
[0.7196638584136963, 0.7978000044822693]
가중치 초기값 변경
tf.keras.backend.clear_session()
input_tensor = Input(shape=(32, 32, 3))
x = Conv2D(filters=32, kernel_size=(3, 3), strides=1, padding="same", activation="relu", kernel_initializer="he_normal")(input_tensor)
x = Conv2D(filters=32, kernel_size=(3, 3), strides=1, padding="same", activation="relu", kernel_initializer="he_normal")(x)
x = MaxPooling2D(pool_size=(2, 2))(x)
x = Conv2D(filters=64, kernel_size=(3, 3), strides=1, padding="same", activation="relu", kernel_initializer="he_normal")(x)
x = Conv2D(filters=64, kernel_size=(3, 3), strides=1, padding="same", activation="relu", kernel_initializer="he_normal")(x)
x = MaxPooling2D(pool_size=(2, 2))(x)
x = Conv2D(filters=128, kernel_size=(3, 3), strides=1, padding="same", activation="relu", kernel_initializer="he_normal")(x)
x = Conv2D(filters=128, kernel_size=(3, 3), strides=1, padding="same", activation="relu", kernel_initializer="he_normal")(x)
x = MaxPooling2D(pool_size=(2, 2))(x)
x = Flatten()(x)
x = Dropout(rate=0.5)(x)
x = Dense(200, activation="relu")(x)
x = Dropout(rate=0.3)(x)
x = Dense(50, activation="relu")(x)
x = Dropout(rate=0.2)(x)
output = Dense(10, activation="softmax")(x)
model = Model(inputs=input_tensor, outputs=output)
model.summary()
Model: "model"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
input_1 (InputLayer) [(None, 32, 32, 3)] 0
_________________________________________________________________
conv2d (Conv2D) (None, 32, 32, 32) 896
_________________________________________________________________
conv2d_1 (Conv2D) (None, 32, 32, 32) 9248
_________________________________________________________________
max_pooling2d (MaxPooling2D) (None, 16, 16, 32) 0
_________________________________________________________________
conv2d_2 (Conv2D) (None, 16, 16, 64) 18496
_________________________________________________________________
conv2d_3 (Conv2D) (None, 16, 16, 64) 36928
_________________________________________________________________
max_pooling2d_1 (MaxPooling2 (None, 8, 8, 64) 0
_________________________________________________________________
conv2d_4 (Conv2D) (None, 8, 8, 128) 73856
_________________________________________________________________
conv2d_5 (Conv2D) (None, 8, 8, 128) 147584
_________________________________________________________________
max_pooling2d_2 (MaxPooling2 (None, 4, 4, 128) 0
_________________________________________________________________
flatten (Flatten) (None, 2048) 0
_________________________________________________________________
dropout (Dropout) (None, 2048) 0
_________________________________________________________________
dense (Dense) (None, 200) 409800
_________________________________________________________________
dropout_1 (Dropout) (None, 200) 0
_________________________________________________________________
dense_1 (Dense) (None, 50) 10050
_________________________________________________________________
dropout_2 (Dropout) (None, 50) 0
_________________________________________________________________
dense_2 (Dense) (None, 10) 510
=================================================================
Total params: 707,368
Trainable params: 707,368
Non-trainable params: 0
_________________________________________________________________
model.compile(optimizer=Adam(0.001), loss='categorical_crossentropy', metrics=['accuracy'])
history = model.fit(x=train_images, y=train_oh_labels, batch_size=128, epochs=30, validation_split=0.2)
Epoch 1/30
313/313 [==============================] - 11s 32ms/step - loss: 1.8403 - accuracy: 0.3065 - val_loss: 1.4132 - val_accuracy: 0.4829
Epoch 2/30
313/313 [==============================] - 9s 30ms/step - loss: 1.4063 - accuracy: 0.4919 - val_loss: 1.2038 - val_accuracy: 0.5701
Epoch 3/30
313/313 [==============================] - 9s 30ms/step - loss: 1.1785 - accuracy: 0.5845 - val_loss: 1.0589 - val_accuracy: 0.6268
Epoch 4/30
313/313 [==============================] - 9s 30ms/step - loss: 1.0295 - accuracy: 0.6410 - val_loss: 0.9414 - val_accuracy: 0.6683
Epoch 5/30
313/313 [==============================] - 9s 30ms/step - loss: 0.9117 - accuracy: 0.6829 - val_loss: 0.8448 - val_accuracy: 0.7107
Epoch 6/30
313/313 [==============================] - 9s 30ms/step - loss: 0.8433 - accuracy: 0.7109 - val_loss: 0.8792 - val_accuracy: 0.6973
Epoch 7/30
313/313 [==============================] - 10s 31ms/step - loss: 0.7670 - accuracy: 0.7380 - val_loss: 0.7493 - val_accuracy: 0.7430
Epoch 8/30
313/313 [==============================] - 9s 30ms/step - loss: 0.6979 - accuracy: 0.7567 - val_loss: 0.7109 - val_accuracy: 0.7550
Epoch 9/30
313/313 [==============================] - 10s 31ms/step - loss: 0.6540 - accuracy: 0.7764 - val_loss: 0.6864 - val_accuracy: 0.7641
Epoch 10/30
313/313 [==============================] - 10s 30ms/step - loss: 0.5990 - accuracy: 0.7952 - val_loss: 0.6750 - val_accuracy: 0.7657
Epoch 11/30
313/313 [==============================] - 10s 30ms/step - loss: 0.5577 - accuracy: 0.8099 - val_loss: 0.6849 - val_accuracy: 0.7630
Epoch 12/30
313/313 [==============================] - 10s 30ms/step - loss: 0.5288 - accuracy: 0.8218 - val_loss: 0.6718 - val_accuracy: 0.7804
Epoch 13/30
313/313 [==============================] - 9s 30ms/step - loss: 0.4942 - accuracy: 0.8309 - val_loss: 0.6726 - val_accuracy: 0.7745
Epoch 14/30
313/313 [==============================] - 10s 30ms/step - loss: 0.4693 - accuracy: 0.8414 - val_loss: 0.6752 - val_accuracy: 0.7749
Epoch 15/30
313/313 [==============================] - 10s 30ms/step - loss: 0.4365 - accuracy: 0.8507 - val_loss: 0.6695 - val_accuracy: 0.7788
Epoch 16/30
313/313 [==============================] - 9s 30ms/step - loss: 0.4181 - accuracy: 0.8569 - val_loss: 0.6792 - val_accuracy: 0.7781
Epoch 17/30
313/313 [==============================] - 9s 30ms/step - loss: 0.3955 - accuracy: 0.8632 - val_loss: 0.7364 - val_accuracy: 0.7673
Epoch 18/30
313/313 [==============================] - 9s 30ms/step - loss: 0.3903 - accuracy: 0.8689 - val_loss: 0.6672 - val_accuracy: 0.7802
Epoch 19/30
313/313 [==============================] - 9s 30ms/step - loss: 0.3647 - accuracy: 0.8745 - val_loss: 0.6990 - val_accuracy: 0.7800
Epoch 20/30
313/313 [==============================] - 9s 30ms/step - loss: 0.3488 - accuracy: 0.8806 - val_loss: 0.7502 - val_accuracy: 0.7757
Epoch 21/30
313/313 [==============================] - 9s 30ms/step - loss: 0.3362 - accuracy: 0.8840 - val_loss: 0.6876 - val_accuracy: 0.7888
Epoch 22/30
313/313 [==============================] - 10s 30ms/step - loss: 0.3133 - accuracy: 0.8920 - val_loss: 0.7081 - val_accuracy: 0.7875
Epoch 23/30
313/313 [==============================] - 9s 30ms/step - loss: 0.3051 - accuracy: 0.8943 - val_loss: 0.7303 - val_accuracy: 0.7876
Epoch 24/30
313/313 [==============================] - 10s 32ms/step - loss: 0.2936 - accuracy: 0.8997 - val_loss: 0.7193 - val_accuracy: 0.7934
Epoch 25/30
313/313 [==============================] - 10s 30ms/step - loss: 0.2889 - accuracy: 0.9007 - val_loss: 0.7848 - val_accuracy: 0.7791
Epoch 26/30
313/313 [==============================] - 9s 30ms/step - loss: 0.2695 - accuracy: 0.9067 - val_loss: 0.7226 - val_accuracy: 0.7931
Epoch 27/30
313/313 [==============================] - 10s 30ms/step - loss: 0.2662 - accuracy: 0.9097 - val_loss: 0.7159 - val_accuracy: 0.7929
Epoch 28/30
313/313 [==============================] - 10s 32ms/step - loss: 0.2661 - accuracy: 0.9086 - val_loss: 0.7222 - val_accuracy: 0.7909
Epoch 29/30
313/313 [==============================] - 9s 30ms/step - loss: 0.2449 - accuracy: 0.9157 - val_loss: 0.7850 - val_accuracy: 0.7898
Epoch 30/30
313/313 [==============================] - 9s 30ms/step - loss: 0.2379 - accuracy: 0.9197 - val_loss: 0.7689 - val_accuracy: 0.7903
model.evaluate(test_images, test_oh_labels, batch_size=128, verbose=1)
79/79 [==============================] - 1s 11ms/step - loss: 0.8091 - accuracy: 0.7825
[0.8090916872024536, 0.7825000286102295]
배치 정규화
from tensorflow.keras.layers import BatchNormalization, Activation
tf.keras.backend.clear_session()
input_tensor = Input(shape=(32, 32, 3))
x = Conv2D(filters=32, kernel_size=(3, 3), strides=1, padding="same")(input_tensor)
x = BatchNormalization()(x)
x = Activation("relu")(x)
x = Conv2D(filters=32, kernel_size=(3, 3), strides=1, padding="same")(x)
x = BatchNormalization()(x)
x = Activation("relu")(x)
x = MaxPooling2D(pool_size=(2, 2))(x)
x = Conv2D(filters=64, kernel_size=(3, 3), strides=1, padding="same")(x)
x = BatchNormalization()(x)
x = Activation("relu")(x)
x = Conv2D(filters=64, kernel_size=(3, 3), strides=1, padding="same")(x)
x = BatchNormalization()(x)
x = Activation("relu")(x)
x = MaxPooling2D(pool_size=(2, 2))(x)
x = Conv2D(filters=128, kernel_size=(3, 3), strides=1, padding="same")(x)
x = BatchNormalization()(x)
x = Activation("relu")(x)
x = Conv2D(filters=128, kernel_size=(3, 3), strides=1, padding="same")(x)
x = BatchNormalization()(x)
x = Activation("relu")(x)
x = MaxPooling2D(pool_size=(2, 2))(x)
x = Flatten()(x)
x = Dropout(rate=0.5)(x)
x = Dense(300, activation="relu")(x)
x = Dropout(rate=0.3)(x)
output = Dense(10, activation="softmax")(x)
model = Model(inputs=input_tensor, outputs=output)
model.summary()
Model: "model"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
input_1 (InputLayer) [(None, 32, 32, 3)] 0
_________________________________________________________________
conv2d (Conv2D) (None, 32, 32, 32) 896
_________________________________________________________________
batch_normalization (BatchNo (None, 32, 32, 32) 128
_________________________________________________________________
activation (Activation) (None, 32, 32, 32) 0
_________________________________________________________________
conv2d_1 (Conv2D) (None, 32, 32, 32) 9248
_________________________________________________________________
batch_normalization_1 (Batch (None, 32, 32, 32) 128
_________________________________________________________________
activation_1 (Activation) (None, 32, 32, 32) 0
_________________________________________________________________
max_pooling2d (MaxPooling2D) (None, 16, 16, 32) 0
_________________________________________________________________
conv2d_2 (Conv2D) (None, 16, 16, 64) 18496
_________________________________________________________________
batch_normalization_2 (Batch (None, 16, 16, 64) 256
_________________________________________________________________
activation_2 (Activation) (None, 16, 16, 64) 0
_________________________________________________________________
conv2d_3 (Conv2D) (None, 16, 16, 64) 36928
_________________________________________________________________
batch_normalization_3 (Batch (None, 16, 16, 64) 256
_________________________________________________________________
activation_3 (Activation) (None, 16, 16, 64) 0
_________________________________________________________________
max_pooling2d_1 (MaxPooling2 (None, 8, 8, 64) 0
_________________________________________________________________
conv2d_4 (Conv2D) (None, 8, 8, 128) 73856
_________________________________________________________________
batch_normalization_4 (Batch (None, 8, 8, 128) 512
_________________________________________________________________
activation_4 (Activation) (None, 8, 8, 128) 0
_________________________________________________________________
conv2d_5 (Conv2D) (None, 8, 8, 128) 147584
_________________________________________________________________
batch_normalization_5 (Batch (None, 8, 8, 128) 512
_________________________________________________________________
activation_5 (Activation) (None, 8, 8, 128) 0
_________________________________________________________________
max_pooling2d_2 (MaxPooling2 (None, 4, 4, 128) 0
_________________________________________________________________
flatten (Flatten) (None, 2048) 0
_________________________________________________________________
dropout (Dropout) (None, 2048) 0
_________________________________________________________________
dense (Dense) (None, 300) 614700
_________________________________________________________________
dropout_1 (Dropout) (None, 300) 0
_________________________________________________________________
dense_1 (Dense) (None, 10) 3010
=================================================================
Total params: 906,510
Trainable params: 905,614
Non-trainable params: 896
_________________________________________________________________
model.compile(optimizer=Adam(0.001), loss='categorical_crossentropy', metrics=['accuracy'])
history = model.fit(x=train_images, y=train_oh_labels, batch_size=128, epochs=30, validation_split=0.2)
Epoch 1/30
313/313 [==============================] - 14s 39ms/step - loss: 1.6105 - accuracy: 0.4159 - val_loss: 2.9750 - val_accuracy: 0.1465
Epoch 2/30
313/313 [==============================] - 12s 37ms/step - loss: 1.1642 - accuracy: 0.5789 - val_loss: 1.0970 - val_accuracy: 0.5765
Epoch 3/30
313/313 [==============================] - 12s 37ms/step - loss: 0.9592 - accuracy: 0.6574 - val_loss: 1.2005 - val_accuracy: 0.5742
Epoch 4/30
313/313 [==============================] - 12s 37ms/step - loss: 0.8449 - accuracy: 0.7022 - val_loss: 1.0042 - val_accuracy: 0.6422
Epoch 5/30
313/313 [==============================] - 12s 37ms/step - loss: 0.7575 - accuracy: 0.7351 - val_loss: 1.0693 - val_accuracy: 0.6431
Epoch 6/30
313/313 [==============================] - 12s 37ms/step - loss: 0.6895 - accuracy: 0.7605 - val_loss: 0.8978 - val_accuracy: 0.6875
Epoch 7/30
313/313 [==============================] - 12s 38ms/step - loss: 0.6378 - accuracy: 0.7757 - val_loss: 1.2824 - val_accuracy: 0.6142
Epoch 8/30
313/313 [==============================] - 12s 38ms/step - loss: 0.5819 - accuracy: 0.7974 - val_loss: 0.8324 - val_accuracy: 0.7240
Epoch 9/30
313/313 [==============================] - 12s 37ms/step - loss: 0.5442 - accuracy: 0.8098 - val_loss: 0.8925 - val_accuracy: 0.7176
Epoch 10/30
313/313 [==============================] - 12s 37ms/step - loss: 0.5006 - accuracy: 0.8249 - val_loss: 0.7420 - val_accuracy: 0.7654
Epoch 11/30
313/313 [==============================] - 12s 37ms/step - loss: 0.4604 - accuracy: 0.8396 - val_loss: 0.6349 - val_accuracy: 0.7918
Epoch 12/30
313/313 [==============================] - 12s 37ms/step - loss: 0.4252 - accuracy: 0.8509 - val_loss: 0.7158 - val_accuracy: 0.7739
Epoch 13/30
313/313 [==============================] - 12s 37ms/step - loss: 0.4076 - accuracy: 0.8584 - val_loss: 0.8330 - val_accuracy: 0.7333
Epoch 14/30
313/313 [==============================] - 12s 37ms/step - loss: 0.3686 - accuracy: 0.8722 - val_loss: 0.7000 - val_accuracy: 0.7772
Epoch 15/30
313/313 [==============================] - 12s 37ms/step - loss: 0.3436 - accuracy: 0.8792 - val_loss: 0.7324 - val_accuracy: 0.7727
Epoch 16/30
313/313 [==============================] - 12s 37ms/step - loss: 0.3206 - accuracy: 0.8875 - val_loss: 1.2061 - val_accuracy: 0.6999
Epoch 17/30
313/313 [==============================] - 12s 37ms/step - loss: 0.2930 - accuracy: 0.8958 - val_loss: 0.6910 - val_accuracy: 0.7955
Epoch 18/30
313/313 [==============================] - 12s 37ms/step - loss: 0.2788 - accuracy: 0.9032 - val_loss: 0.7061 - val_accuracy: 0.7832
Epoch 19/30
313/313 [==============================] - 12s 37ms/step - loss: 0.2564 - accuracy: 0.9090 - val_loss: 1.1572 - val_accuracy: 0.7175
Epoch 20/30
313/313 [==============================] - 12s 37ms/step - loss: 0.2392 - accuracy: 0.9158 - val_loss: 0.9247 - val_accuracy: 0.7535
Epoch 21/30
313/313 [==============================] - 12s 37ms/step - loss: 0.2249 - accuracy: 0.9207 - val_loss: 0.8108 - val_accuracy: 0.7743
Epoch 22/30
313/313 [==============================] - 12s 37ms/step - loss: 0.2063 - accuracy: 0.9278 - val_loss: 0.9563 - val_accuracy: 0.7654
Epoch 23/30
313/313 [==============================] - 12s 37ms/step - loss: 0.1975 - accuracy: 0.9311 - val_loss: 0.8656 - val_accuracy: 0.7689
Epoch 24/30
313/313 [==============================] - 12s 37ms/step - loss: 0.1940 - accuracy: 0.9319 - val_loss: 0.7286 - val_accuracy: 0.8028
Epoch 25/30
313/313 [==============================] - 12s 37ms/step - loss: 0.1781 - accuracy: 0.9383 - val_loss: 0.7599 - val_accuracy: 0.7898
Epoch 26/30
313/313 [==============================] - 12s 37ms/step - loss: 0.1704 - accuracy: 0.9406 - val_loss: 0.6863 - val_accuracy: 0.8129
Epoch 27/30
313/313 [==============================] - 12s 37ms/step - loss: 0.1561 - accuracy: 0.9452 - val_loss: 0.7988 - val_accuracy: 0.8024
Epoch 28/30
313/313 [==============================] - 12s 37ms/step - loss: 0.1520 - accuracy: 0.9467 - val_loss: 0.6781 - val_accuracy: 0.8214
Epoch 29/30
313/313 [==============================] - 12s 37ms/step - loss: 0.1457 - accuracy: 0.9481 - val_loss: 0.7715 - val_accuracy: 0.8109
Epoch 30/30
313/313 [==============================] - 12s 37ms/step - loss: 0.1368 - accuracy: 0.9533 - val_loss: 0.7608 - val_accuracy: 0.8065
model.evaluate(test_images, test_oh_labels, batch_size=128, verbose=1)
79/79 [==============================] - 1s 14ms/step - loss: 0.7914 - accuracy: 0.7936
[0.7913919687271118, 0.7936000227928162]
Batch 사이즈 조정
def build_model():
tf.keras.backend.clear_session()
input_tensor = Input(shape=(32, 32, 3))
x = Conv2D(filters=32, kernel_size=(3, 3), strides=1, padding="same")(input_tensor)
x = BatchNormalization()(x)
x = Activation("relu")(x)
x = Conv2D(filters=32, kernel_size=(3, 3), strides=1, padding="same")(x)
x = BatchNormalization()(x)
x = Activation("relu")(x)
x = MaxPooling2D(pool_size=(2, 2))(x)
x = Conv2D(filters=64, kernel_size=(3, 3), strides=1, padding="same")(x)
x = BatchNormalization()(x)
x = Activation("relu")(x)
x = Conv2D(filters=64, kernel_size=(3, 3), strides=1, padding="same")(x)
x = BatchNormalization()(x)
x = Activation("relu")(x)
x = MaxPooling2D(pool_size=(2, 2))(x)
x = Conv2D(filters=128, kernel_size=(3, 3), strides=1, padding="same")(x)
x = BatchNormalization()(x)
x = Activation("relu")(x)
x = Conv2D(filters=128, kernel_size=(3, 3), strides=1, padding="same")(x)
x = BatchNormalization()(x)
x = Activation("relu")(x)
x = MaxPooling2D(pool_size=(2, 2))(x)
x = Flatten()(x)
x = Dropout(rate=0.5)(x)
x = Dense(300, activation="relu")(x)
x = Dropout(rate=0.3)(x)
x = Dense(100, activation="relu")(x)
x = Dropout(rate=0.3)(x)
output = Dense(10, activation="softmax")(x)
model = Model(inputs=input_tensor, outputs=output)
return model
batch_sizes = [32, 64, 256]
for batch_size in batch_sizes:
model = build_model()
model.compile(optimizer=Adam(0.001), loss='categorical_crossentropy', metrics=['accuracy'])
history = model.fit(x=train_images, y=train_oh_labels, batch_size=batch_size, epochs=30, validation_split=0.2)
evaluate_accuracy = model.evaluate(test_images, test_oh_labels, batch_size=batch_size, verbose=1)
print("Result : ", batch_size, evaluate_accuracy)
Epoch 1/30
1250/1250 [==============================] - 30s 23ms/step - loss: 1.6864 - accuracy: 0.3785 - val_loss: 1.5436 - val_accuracy: 0.4659
Epoch 2/30
1250/1250 [==============================] - 27s 22ms/step - loss: 1.2102 - accuracy: 0.5764 - val_loss: 1.1430 - val_accuracy: 0.6124
Epoch 3/30
1250/1250 [==============================] - 27s 22ms/step - loss: 0.9976 - accuracy: 0.6607 - val_loss: 0.9220 - val_accuracy: 0.6806
Epoch 4/30
1250/1250 [==============================] - 28s 22ms/step - loss: 0.8792 - accuracy: 0.7012 - val_loss: 1.2399 - val_accuracy: 0.5738
Epoch 5/30
1250/1250 [==============================] - 27s 22ms/step - loss: 0.7927 - accuracy: 0.7325 - val_loss: 1.6327 - val_accuracy: 0.5535
Epoch 6/30
1250/1250 [==============================] - 27s 21ms/step - loss: 0.7212 - accuracy: 0.7582 - val_loss: 0.7357 - val_accuracy: 0.7530
Epoch 7/30
1250/1250 [==============================] - 27s 22ms/step - loss: 0.6593 - accuracy: 0.7785 - val_loss: 0.7298 - val_accuracy: 0.7539
Epoch 8/30
1250/1250 [==============================] - 27s 21ms/step - loss: 0.6143 - accuracy: 0.7952 - val_loss: 0.6861 - val_accuracy: 0.7689
Epoch 9/30
1250/1250 [==============================] - 27s 21ms/step - loss: 0.5611 - accuracy: 0.8133 - val_loss: 0.6285 - val_accuracy: 0.7904
Epoch 10/30
1250/1250 [==============================] - 26s 21ms/step - loss: 0.5289 - accuracy: 0.8229 - val_loss: 0.6703 - val_accuracy: 0.7769
Epoch 11/30
1219/1250 [============================>.] - ETA: 0s - loss: 0.4961 - accuracy: 0.8354
Author And Source
이 문제에 관하여(Deep Learning day 6 CIFAR10 dataset), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@bbkyoo/Deep-Learning-day-6-CIFAR10-dataset저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)