from sklearn.metrics import confusion_matrix, ConfusionMatrixDisplay, classification_report
from tensorflow.keras.callbacks import EarlyStopping, ModelCheckpoint
from tensorflow.keras import models, layers, metrics
from tensorflow.keras.utils import to_categorical
from tensorflow.keras.optimizers import SGD
from tensorflow.keras.datasets import mnist
import matplotlib.pyplot as plt
import numpy as np
import warnings
plt.style.use('classic')
warnings.filterwarnings("ignore")
(train_images, train_labels), (test_images, test_labels) = mnist.load_data()
train_images = train_images.reshape((60000, 28, 28, 1))
train_images = train_images.astype('float32') / 255
test_images = test_images.reshape((10000, 28, 28, 1))
test_images = test_images.astype('float32') / 25
# One-Hot Encoding
train_labels = to_categorical(train_labels)
test_labels = to_categorical(test_labels)
print("Shape of X [N, H, W, C]: ", test_images.shape)
print("Shape of y: ", test_labels.shape)
Shape of X [N, H, W, C]: (10000, 28, 28, 1) Shape of y: (10000, 10)
def LeNet_5():
model = models.Sequential()
# 卷积与池化层
model.add(layers.Conv2D(6, (5, 5), activation='tanh', input_shape=(28, 28, 1)))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(16, (5, 5), activation="tanh"))
model.add(layers.MaxPooling2D((2, 2)))
# 添加分类器
model.add(layers.Flatten())
model.add(layers.Dense(120, activation="tanh"))
model.add(layers.Dense(84, activation="tanh"))
model.add(layers.Dense(10, activation="softmax"))
return model
LeNet_5 = LeNet_5()
LeNet_5.summary() # 显示模型结构
Model: "sequential" _________________________________________________________________ Layer (type) Output Shape Param # ================================================================= conv2d (Conv2D) (None, 24, 24, 6) 156 max_pooling2d (MaxPooling2D (None, 12, 12, 6) 0 ) conv2d_1 (Conv2D) (None, 8, 8, 16) 2416 max_pooling2d_1 (MaxPooling (None, 4, 4, 16) 0 2D) flatten (Flatten) (None, 256) 0 dense (Dense) (None, 120) 30840 dense_1 (Dense) (None, 84) 10164 dense_2 (Dense) (None, 10) 850 ================================================================= Total params: 44,426 Trainable params: 44,426 Non-trainable params: 0 _________________________________________________________________
LeNet_5.compile(optimizer=SGD(lr=0.001, momentum=0.7, nesterov=True), # 优化器
loss='categorical_crossentropy', # 损失函数
metrics=["categorical_accuracy"]) # 评价指标
mcp_save = ModelCheckpoint('LeNet-5.h5', save_best_only=True, monitor='val_loss', mode='min')
LeNet_history = LeNet_5.fit(train_images, train_labels, epochs=200, batch_size=128, shuffle=True, validation_split=0.35, callbacks=[mcp_save])
LeNet_train_loss, LeNet_train_acc = LeNet_5.evaluate(train_images, train_labels)
LeNet_test_loss, LeNet_test_acc = LeNet_5.evaluate(test_images, test_labels)
LeNet_pred = LeNet_5.predict(test_images)
Epoch 1/200 305/305 [==============================] - 5s 9ms/step - loss: 2.1075 - categorical_accuracy: 0.3521 - val_loss: 1.8100 - val_categorical_accuracy: 0.5677 Epoch 2/200 305/305 [==============================] - 2s 8ms/step - loss: 1.4597 - categorical_accuracy: 0.6815 - val_loss: 1.1368 - val_categorical_accuracy: 0.7614 Epoch 3/200 305/305 [==============================] - 2s 8ms/step - loss: 0.9443 - categorical_accuracy: 0.7934 - val_loss: 0.7754 - val_categorical_accuracy: 0.8331 Epoch 4/200 305/305 [==============================] - 2s 8ms/step - loss: 0.6962 - categorical_accuracy: 0.8399 - val_loss: 0.6067 - val_categorical_accuracy: 0.8603 Epoch 5/200 305/305 [==============================] - 2s 8ms/step - loss: 0.5704 - categorical_accuracy: 0.8642 - val_loss: 0.5136 - val_categorical_accuracy: 0.8754 Epoch 6/200 305/305 [==============================] - 2s 8ms/step - loss: 0.4943 - categorical_accuracy: 0.8787 - val_loss: 0.4534 - val_categorical_accuracy: 0.8858 Epoch 7/200 305/305 [==============================] - 2s 8ms/step - loss: 0.4421 - categorical_accuracy: 0.8884 - val_loss: 0.4103 - val_categorical_accuracy: 0.8952 Epoch 8/200 305/305 [==============================] - 2s 8ms/step - loss: 0.4030 - categorical_accuracy: 0.8976 - val_loss: 0.3770 - val_categorical_accuracy: 0.9029 Epoch 9/200 305/305 [==============================] - 2s 8ms/step - loss: 0.3724 - categorical_accuracy: 0.9038 - val_loss: 0.3505 - val_categorical_accuracy: 0.9088 Epoch 10/200 305/305 [==============================] - 2s 8ms/step - loss: 0.3472 - categorical_accuracy: 0.9085 - val_loss: 0.3282 - val_categorical_accuracy: 0.9123 Epoch 11/200 305/305 [==============================] - 2s 8ms/step - loss: 0.3260 - categorical_accuracy: 0.9132 - val_loss: 0.3097 - val_categorical_accuracy: 0.9175 Epoch 12/200 305/305 [==============================] - 2s 8ms/step - loss: 0.3079 - categorical_accuracy: 0.9169 - val_loss: 0.2933 - val_categorical_accuracy: 0.9216 Epoch 13/200 305/305 [==============================] - 2s 8ms/step - loss: 0.2921 - categorical_accuracy: 0.9209 - val_loss: 0.2790 - val_categorical_accuracy: 0.9248 Epoch 14/200 305/305 [==============================] - 2s 8ms/step - loss: 0.2782 - categorical_accuracy: 0.9241 - val_loss: 0.2663 - val_categorical_accuracy: 0.9278 Epoch 15/200 305/305 [==============================] - 2s 8ms/step - loss: 0.2657 - categorical_accuracy: 0.9272 - val_loss: 0.2551 - val_categorical_accuracy: 0.9298 Epoch 16/200 305/305 [==============================] - 2s 8ms/step - loss: 0.2545 - categorical_accuracy: 0.9298 - val_loss: 0.2450 - val_categorical_accuracy: 0.9325 Epoch 17/200 305/305 [==============================] - 2s 8ms/step - loss: 0.2443 - categorical_accuracy: 0.9326 - val_loss: 0.2358 - val_categorical_accuracy: 0.9340 Epoch 18/200 305/305 [==============================] - 2s 8ms/step - loss: 0.2351 - categorical_accuracy: 0.9350 - val_loss: 0.2274 - val_categorical_accuracy: 0.9368 Epoch 19/200 305/305 [==============================] - 2s 8ms/step - loss: 0.2266 - categorical_accuracy: 0.9380 - val_loss: 0.2199 - val_categorical_accuracy: 0.9393 Epoch 20/200 305/305 [==============================] - 2s 8ms/step - loss: 0.2189 - categorical_accuracy: 0.9398 - val_loss: 0.2125 - val_categorical_accuracy: 0.9410 Epoch 21/200 305/305 [==============================] - 2s 8ms/step - loss: 0.2116 - categorical_accuracy: 0.9420 - val_loss: 0.2061 - val_categorical_accuracy: 0.9424 Epoch 22/200 305/305 [==============================] - 2s 8ms/step - loss: 0.2049 - categorical_accuracy: 0.9439 - val_loss: 0.2002 - val_categorical_accuracy: 0.9437 Epoch 23/200 305/305 [==============================] - 2s 8ms/step - loss: 0.1986 - categorical_accuracy: 0.9452 - val_loss: 0.1943 - val_categorical_accuracy: 0.9456 Epoch 24/200 305/305 [==============================] - 2s 8ms/step - loss: 0.1928 - categorical_accuracy: 0.9472 - val_loss: 0.1892 - val_categorical_accuracy: 0.9469 Epoch 25/200 305/305 [==============================] - 2s 8ms/step - loss: 0.1873 - categorical_accuracy: 0.9480 - val_loss: 0.1843 - val_categorical_accuracy: 0.9482 Epoch 26/200 305/305 [==============================] - 2s 8ms/step - loss: 0.1821 - categorical_accuracy: 0.9495 - val_loss: 0.1798 - val_categorical_accuracy: 0.9498 Epoch 27/200 305/305 [==============================] - 2s 8ms/step - loss: 0.1773 - categorical_accuracy: 0.9508 - val_loss: 0.1754 - val_categorical_accuracy: 0.9512 Epoch 28/200 305/305 [==============================] - 2s 8ms/step - loss: 0.1727 - categorical_accuracy: 0.9523 - val_loss: 0.1711 - val_categorical_accuracy: 0.9522 Epoch 29/200 305/305 [==============================] - 2s 8ms/step - loss: 0.1684 - categorical_accuracy: 0.9535 - val_loss: 0.1674 - val_categorical_accuracy: 0.9532 Epoch 30/200 305/305 [==============================] - 2s 8ms/step - loss: 0.1644 - categorical_accuracy: 0.9543 - val_loss: 0.1635 - val_categorical_accuracy: 0.9541 Epoch 31/200 305/305 [==============================] - 2s 8ms/step - loss: 0.1605 - categorical_accuracy: 0.9552 - val_loss: 0.1601 - val_categorical_accuracy: 0.9552 Epoch 32/200 305/305 [==============================] - 2s 8ms/step - loss: 0.1567 - categorical_accuracy: 0.9566 - val_loss: 0.1568 - val_categorical_accuracy: 0.9560 Epoch 33/200 305/305 [==============================] - 2s 8ms/step - loss: 0.1532 - categorical_accuracy: 0.9576 - val_loss: 0.1545 - val_categorical_accuracy: 0.9569 Epoch 34/200 305/305 [==============================] - 2s 8ms/step - loss: 0.1499 - categorical_accuracy: 0.9585 - val_loss: 0.1512 - val_categorical_accuracy: 0.9578 Epoch 35/200 305/305 [==============================] - 2s 8ms/step - loss: 0.1468 - categorical_accuracy: 0.9592 - val_loss: 0.1484 - val_categorical_accuracy: 0.9581 Epoch 36/200 305/305 [==============================] - 2s 8ms/step - loss: 0.1437 - categorical_accuracy: 0.9600 - val_loss: 0.1458 - val_categorical_accuracy: 0.9590 Epoch 37/200 305/305 [==============================] - 2s 8ms/step - loss: 0.1409 - categorical_accuracy: 0.9609 - val_loss: 0.1428 - val_categorical_accuracy: 0.9597 Epoch 38/200 305/305 [==============================] - 2s 8ms/step - loss: 0.1381 - categorical_accuracy: 0.9614 - val_loss: 0.1406 - val_categorical_accuracy: 0.9604 Epoch 39/200 305/305 [==============================] - 2s 8ms/step - loss: 0.1355 - categorical_accuracy: 0.9621 - val_loss: 0.1381 - val_categorical_accuracy: 0.9611 Epoch 40/200 305/305 [==============================] - 2s 8ms/step - loss: 0.1329 - categorical_accuracy: 0.9629 - val_loss: 0.1363 - val_categorical_accuracy: 0.9616 Epoch 41/200 305/305 [==============================] - 2s 8ms/step - loss: 0.1305 - categorical_accuracy: 0.9638 - val_loss: 0.1340 - val_categorical_accuracy: 0.9616 Epoch 42/200 305/305 [==============================] - 2s 8ms/step - loss: 0.1282 - categorical_accuracy: 0.9643 - val_loss: 0.1319 - val_categorical_accuracy: 0.9623 Epoch 43/200 305/305 [==============================] - 2s 8ms/step - loss: 0.1260 - categorical_accuracy: 0.9651 - val_loss: 0.1303 - val_categorical_accuracy: 0.9628 Epoch 44/200 305/305 [==============================] - 2s 8ms/step - loss: 0.1238 - categorical_accuracy: 0.9657 - val_loss: 0.1281 - val_categorical_accuracy: 0.9635 Epoch 45/200 305/305 [==============================] - 2s 8ms/step - loss: 0.1218 - categorical_accuracy: 0.9658 - val_loss: 0.1263 - val_categorical_accuracy: 0.9637 Epoch 46/200 305/305 [==============================] - 2s 8ms/step - loss: 0.1199 - categorical_accuracy: 0.9665 - val_loss: 0.1247 - val_categorical_accuracy: 0.9642 Epoch 47/200 305/305 [==============================] - 2s 8ms/step - loss: 0.1180 - categorical_accuracy: 0.9674 - val_loss: 0.1232 - val_categorical_accuracy: 0.9648 Epoch 48/200 305/305 [==============================] - 2s 8ms/step - loss: 0.1161 - categorical_accuracy: 0.9676 - val_loss: 0.1219 - val_categorical_accuracy: 0.9646 Epoch 49/200 305/305 [==============================] - 2s 8ms/step - loss: 0.1143 - categorical_accuracy: 0.9682 - val_loss: 0.1204 - val_categorical_accuracy: 0.9651 Epoch 50/200 305/305 [==============================] - 2s 8ms/step - loss: 0.1127 - categorical_accuracy: 0.9687 - val_loss: 0.1190 - val_categorical_accuracy: 0.9652 Epoch 51/200 305/305 [==============================] - 2s 8ms/step - loss: 0.1111 - categorical_accuracy: 0.9689 - val_loss: 0.1178 - val_categorical_accuracy: 0.9655 Epoch 52/200 305/305 [==============================] - 2s 8ms/step - loss: 0.1094 - categorical_accuracy: 0.9695 - val_loss: 0.1161 - val_categorical_accuracy: 0.9662 Epoch 53/200 305/305 [==============================] - 2s 8ms/step - loss: 0.1079 - categorical_accuracy: 0.9700 - val_loss: 0.1146 - val_categorical_accuracy: 0.9669 Epoch 54/200 305/305 [==============================] - 3s 8ms/step - loss: 0.1065 - categorical_accuracy: 0.9702 - val_loss: 0.1135 - val_categorical_accuracy: 0.9665 Epoch 55/200 305/305 [==============================] - 2s 8ms/step - loss: 0.1050 - categorical_accuracy: 0.9705 - val_loss: 0.1123 - val_categorical_accuracy: 0.9669 Epoch 56/200 305/305 [==============================] - 3s 8ms/step - loss: 0.1037 - categorical_accuracy: 0.9709 - val_loss: 0.1113 - val_categorical_accuracy: 0.9675 Epoch 57/200 305/305 [==============================] - 2s 8ms/step - loss: 0.1023 - categorical_accuracy: 0.9713 - val_loss: 0.1098 - val_categorical_accuracy: 0.9681 Epoch 58/200 305/305 [==============================] - 2s 8ms/step - loss: 0.1010 - categorical_accuracy: 0.9718 - val_loss: 0.1087 - val_categorical_accuracy: 0.9686 Epoch 59/200 305/305 [==============================] - 2s 8ms/step - loss: 0.0998 - categorical_accuracy: 0.9721 - val_loss: 0.1078 - val_categorical_accuracy: 0.9687 Epoch 60/200 305/305 [==============================] - 2s 8ms/step - loss: 0.0985 - categorical_accuracy: 0.9724 - val_loss: 0.1068 - val_categorical_accuracy: 0.9689 Epoch 61/200 305/305 [==============================] - 3s 8ms/step - loss: 0.0974 - categorical_accuracy: 0.9728 - val_loss: 0.1059 - val_categorical_accuracy: 0.9689 Epoch 62/200 305/305 [==============================] - 2s 8ms/step - loss: 0.0963 - categorical_accuracy: 0.9730 - val_loss: 0.1051 - val_categorical_accuracy: 0.9691 Epoch 63/200 305/305 [==============================] - 2s 8ms/step - loss: 0.0951 - categorical_accuracy: 0.9734 - val_loss: 0.1039 - val_categorical_accuracy: 0.9694 Epoch 64/200 305/305 [==============================] - 2s 8ms/step - loss: 0.0941 - categorical_accuracy: 0.9737 - val_loss: 0.1031 - val_categorical_accuracy: 0.9698 Epoch 65/200 305/305 [==============================] - 2s 8ms/step - loss: 0.0930 - categorical_accuracy: 0.9738 - val_loss: 0.1023 - val_categorical_accuracy: 0.9701 Epoch 66/200 305/305 [==============================] - 2s 8ms/step - loss: 0.0919 - categorical_accuracy: 0.9742 - val_loss: 0.1012 - val_categorical_accuracy: 0.9702 Epoch 67/200 305/305 [==============================] - 3s 8ms/step - loss: 0.0909 - categorical_accuracy: 0.9746 - val_loss: 0.1004 - val_categorical_accuracy: 0.9705 Epoch 68/200 305/305 [==============================] - 3s 8ms/step - loss: 0.0900 - categorical_accuracy: 0.9746 - val_loss: 0.0994 - val_categorical_accuracy: 0.9709 Epoch 69/200 305/305 [==============================] - 2s 8ms/step - loss: 0.0890 - categorical_accuracy: 0.9754 - val_loss: 0.0990 - val_categorical_accuracy: 0.9706 Epoch 70/200 305/305 [==============================] - 2s 8ms/step - loss: 0.0881 - categorical_accuracy: 0.9753 - val_loss: 0.0981 - val_categorical_accuracy: 0.9710 Epoch 71/200 305/305 [==============================] - 2s 8ms/step - loss: 0.0873 - categorical_accuracy: 0.9758 - val_loss: 0.0972 - val_categorical_accuracy: 0.9716 Epoch 72/200 305/305 [==============================] - 2s 8ms/step - loss: 0.0863 - categorical_accuracy: 0.9757 - val_loss: 0.0967 - val_categorical_accuracy: 0.9713 Epoch 73/200 305/305 [==============================] - 2s 8ms/step - loss: 0.0855 - categorical_accuracy: 0.9763 - val_loss: 0.0960 - val_categorical_accuracy: 0.9719 Epoch 74/200 305/305 [==============================] - 2s 8ms/step - loss: 0.0846 - categorical_accuracy: 0.9761 - val_loss: 0.0950 - val_categorical_accuracy: 0.9721 Epoch 75/200 305/305 [==============================] - 3s 8ms/step - loss: 0.0838 - categorical_accuracy: 0.9768 - val_loss: 0.0949 - val_categorical_accuracy: 0.9718 Epoch 76/200 305/305 [==============================] - 2s 8ms/step - loss: 0.0831 - categorical_accuracy: 0.9771 - val_loss: 0.0939 - val_categorical_accuracy: 0.9722 Epoch 77/200 305/305 [==============================] - 2s 8ms/step - loss: 0.0822 - categorical_accuracy: 0.9770 - val_loss: 0.0937 - val_categorical_accuracy: 0.9722 Epoch 78/200 305/305 [==============================] - 3s 8ms/step - loss: 0.0815 - categorical_accuracy: 0.9773 - val_loss: 0.0927 - val_categorical_accuracy: 0.9723 Epoch 79/200 305/305 [==============================] - 3s 8ms/step - loss: 0.0808 - categorical_accuracy: 0.9776 - val_loss: 0.0924 - val_categorical_accuracy: 0.9724 Epoch 80/200 305/305 [==============================] - 3s 8ms/step - loss: 0.0801 - categorical_accuracy: 0.9776 - val_loss: 0.0918 - val_categorical_accuracy: 0.9725 Epoch 81/200 305/305 [==============================] - 2s 8ms/step - loss: 0.0793 - categorical_accuracy: 0.9781 - val_loss: 0.0908 - val_categorical_accuracy: 0.9729 Epoch 82/200 305/305 [==============================] - 2s 8ms/step - loss: 0.0786 - categorical_accuracy: 0.9782 - val_loss: 0.0902 - val_categorical_accuracy: 0.9728 Epoch 83/200 305/305 [==============================] - 3s 8ms/step - loss: 0.0779 - categorical_accuracy: 0.9785 - val_loss: 0.0899 - val_categorical_accuracy: 0.9732 Epoch 84/200 305/305 [==============================] - 2s 8ms/step - loss: 0.0773 - categorical_accuracy: 0.9786 - val_loss: 0.0892 - val_categorical_accuracy: 0.9732 Epoch 85/200 305/305 [==============================] - 2s 8ms/step - loss: 0.0766 - categorical_accuracy: 0.9788 - val_loss: 0.0885 - val_categorical_accuracy: 0.9734 Epoch 86/200 305/305 [==============================] - 3s 8ms/step - loss: 0.0760 - categorical_accuracy: 0.9791 - val_loss: 0.0881 - val_categorical_accuracy: 0.9733 Epoch 87/200 305/305 [==============================] - 2s 8ms/step - loss: 0.0753 - categorical_accuracy: 0.9794 - val_loss: 0.0876 - val_categorical_accuracy: 0.9733 Epoch 88/200 305/305 [==============================] - 2s 8ms/step - loss: 0.0747 - categorical_accuracy: 0.9794 - val_loss: 0.0872 - val_categorical_accuracy: 0.9736 Epoch 89/200 305/305 [==============================] - 3s 8ms/step - loss: 0.0741 - categorical_accuracy: 0.9796 - val_loss: 0.0866 - val_categorical_accuracy: 0.9740 Epoch 90/200 305/305 [==============================] - 2s 8ms/step - loss: 0.0735 - categorical_accuracy: 0.9797 - val_loss: 0.0860 - val_categorical_accuracy: 0.9741 Epoch 91/200 305/305 [==============================] - 3s 8ms/step - loss: 0.0730 - categorical_accuracy: 0.9797 - val_loss: 0.0855 - val_categorical_accuracy: 0.9743 Epoch 92/200 305/305 [==============================] - 2s 8ms/step - loss: 0.0723 - categorical_accuracy: 0.9801 - val_loss: 0.0864 - val_categorical_accuracy: 0.9740 Epoch 93/200 305/305 [==============================] - 3s 8ms/step - loss: 0.0718 - categorical_accuracy: 0.9801 - val_loss: 0.0849 - val_categorical_accuracy: 0.9740 Epoch 94/200 305/305 [==============================] - 3s 8ms/step - loss: 0.0713 - categorical_accuracy: 0.9803 - val_loss: 0.0846 - val_categorical_accuracy: 0.9741 Epoch 95/200 305/305 [==============================] - 3s 8ms/step - loss: 0.0707 - categorical_accuracy: 0.9806 - val_loss: 0.0841 - val_categorical_accuracy: 0.9743 Epoch 96/200 305/305 [==============================] - 2s 8ms/step - loss: 0.0702 - categorical_accuracy: 0.9805 - val_loss: 0.0835 - val_categorical_accuracy: 0.9743 Epoch 97/200 305/305 [==============================] - 2s 8ms/step - loss: 0.0697 - categorical_accuracy: 0.9806 - val_loss: 0.0829 - val_categorical_accuracy: 0.9746 Epoch 98/200 305/305 [==============================] - 3s 8ms/step - loss: 0.0692 - categorical_accuracy: 0.9808 - val_loss: 0.0825 - val_categorical_accuracy: 0.9750 Epoch 99/200 305/305 [==============================] - 2s 8ms/step - loss: 0.0687 - categorical_accuracy: 0.9807 - val_loss: 0.0821 - val_categorical_accuracy: 0.9750 Epoch 100/200 305/305 [==============================] - 2s 8ms/step - loss: 0.0682 - categorical_accuracy: 0.9810 - val_loss: 0.0820 - val_categorical_accuracy: 0.9750 Epoch 101/200 305/305 [==============================] - 3s 8ms/step - loss: 0.0677 - categorical_accuracy: 0.9812 - val_loss: 0.0819 - val_categorical_accuracy: 0.9748 Epoch 102/200 305/305 [==============================] - 2s 8ms/step - loss: 0.0672 - categorical_accuracy: 0.9812 - val_loss: 0.0812 - val_categorical_accuracy: 0.9752 Epoch 103/200 305/305 [==============================] - 3s 8ms/step - loss: 0.0667 - categorical_accuracy: 0.9813 - val_loss: 0.0806 - val_categorical_accuracy: 0.9753 Epoch 104/200 305/305 [==============================] - 2s 8ms/step - loss: 0.0663 - categorical_accuracy: 0.9815 - val_loss: 0.0807 - val_categorical_accuracy: 0.9752 Epoch 105/200 305/305 [==============================] - 3s 8ms/step - loss: 0.0658 - categorical_accuracy: 0.9818 - val_loss: 0.0802 - val_categorical_accuracy: 0.9756 Epoch 106/200 305/305 [==============================] - 2s 8ms/step - loss: 0.0654 - categorical_accuracy: 0.9816 - val_loss: 0.0795 - val_categorical_accuracy: 0.9755 Epoch 107/200 305/305 [==============================] - 2s 8ms/step - loss: 0.0649 - categorical_accuracy: 0.9819 - val_loss: 0.0796 - val_categorical_accuracy: 0.9754 Epoch 108/200 305/305 [==============================] - 2s 8ms/step - loss: 0.0645 - categorical_accuracy: 0.9820 - val_loss: 0.0794 - val_categorical_accuracy: 0.9755 Epoch 109/200 305/305 [==============================] - 3s 8ms/step - loss: 0.0640 - categorical_accuracy: 0.9822 - val_loss: 0.0790 - val_categorical_accuracy: 0.9758 Epoch 110/200 305/305 [==============================] - 2s 8ms/step - loss: 0.0636 - categorical_accuracy: 0.9824 - val_loss: 0.0782 - val_categorical_accuracy: 0.9760 Epoch 111/200 305/305 [==============================] - 2s 8ms/step - loss: 0.0632 - categorical_accuracy: 0.9824 - val_loss: 0.0783 - val_categorical_accuracy: 0.9761 Epoch 112/200 305/305 [==============================] - 2s 8ms/step - loss: 0.0629 - categorical_accuracy: 0.9827 - val_loss: 0.0777 - val_categorical_accuracy: 0.9760 Epoch 113/200 305/305 [==============================] - 2s 8ms/step - loss: 0.0624 - categorical_accuracy: 0.9826 - val_loss: 0.0777 - val_categorical_accuracy: 0.9760 Epoch 114/200 305/305 [==============================] - 2s 8ms/step - loss: 0.0620 - categorical_accuracy: 0.9827 - val_loss: 0.0769 - val_categorical_accuracy: 0.9763 Epoch 115/200 305/305 [==============================] - 2s 8ms/step - loss: 0.0616 - categorical_accuracy: 0.9831 - val_loss: 0.0769 - val_categorical_accuracy: 0.9765 Epoch 116/200 305/305 [==============================] - 2s 8ms/step - loss: 0.0613 - categorical_accuracy: 0.9830 - val_loss: 0.0763 - val_categorical_accuracy: 0.9769 Epoch 117/200 305/305 [==============================] - 2s 8ms/step - loss: 0.0608 - categorical_accuracy: 0.9834 - val_loss: 0.0763 - val_categorical_accuracy: 0.9768 Epoch 118/200 305/305 [==============================] - 2s 8ms/step - loss: 0.0605 - categorical_accuracy: 0.9834 - val_loss: 0.0762 - val_categorical_accuracy: 0.9764 Epoch 119/200 305/305 [==============================] - 2s 8ms/step - loss: 0.0601 - categorical_accuracy: 0.9833 - val_loss: 0.0762 - val_categorical_accuracy: 0.9764 Epoch 120/200 305/305 [==============================] - 3s 8ms/step - loss: 0.0597 - categorical_accuracy: 0.9836 - val_loss: 0.0758 - val_categorical_accuracy: 0.9766 Epoch 121/200 305/305 [==============================] - 3s 8ms/step - loss: 0.0594 - categorical_accuracy: 0.9837 - val_loss: 0.0751 - val_categorical_accuracy: 0.9772 Epoch 122/200 305/305 [==============================] - 2s 8ms/step - loss: 0.0590 - categorical_accuracy: 0.9839 - val_loss: 0.0750 - val_categorical_accuracy: 0.9767 Epoch 123/200 305/305 [==============================] - 2s 8ms/step - loss: 0.0587 - categorical_accuracy: 0.9839 - val_loss: 0.0745 - val_categorical_accuracy: 0.9770 Epoch 124/200 305/305 [==============================] - 2s 8ms/step - loss: 0.0584 - categorical_accuracy: 0.9842 - val_loss: 0.0742 - val_categorical_accuracy: 0.9771 Epoch 125/200 305/305 [==============================] - 2s 8ms/step - loss: 0.0580 - categorical_accuracy: 0.9840 - val_loss: 0.0738 - val_categorical_accuracy: 0.9773 Epoch 126/200 305/305 [==============================] - 2s 8ms/step - loss: 0.0577 - categorical_accuracy: 0.9843 - val_loss: 0.0736 - val_categorical_accuracy: 0.9775 Epoch 127/200 305/305 [==============================] - 2s 8ms/step - loss: 0.0573 - categorical_accuracy: 0.9843 - val_loss: 0.0733 - val_categorical_accuracy: 0.9772 Epoch 128/200 305/305 [==============================] - 2s 8ms/step - loss: 0.0570 - categorical_accuracy: 0.9846 - val_loss: 0.0733 - val_categorical_accuracy: 0.9771 Epoch 129/200 305/305 [==============================] - 2s 8ms/step - loss: 0.0567 - categorical_accuracy: 0.9847 - val_loss: 0.0736 - val_categorical_accuracy: 0.9772 Epoch 130/200 305/305 [==============================] - 3s 8ms/step - loss: 0.0563 - categorical_accuracy: 0.9848 - val_loss: 0.0725 - val_categorical_accuracy: 0.9775 Epoch 131/200 305/305 [==============================] - 3s 8ms/step - loss: 0.0561 - categorical_accuracy: 0.9849 - val_loss: 0.0723 - val_categorical_accuracy: 0.9775 Epoch 132/200 305/305 [==============================] - 2s 8ms/step - loss: 0.0557 - categorical_accuracy: 0.9849 - val_loss: 0.0724 - val_categorical_accuracy: 0.9774 Epoch 133/200 305/305 [==============================] - 3s 8ms/step - loss: 0.0554 - categorical_accuracy: 0.9850 - val_loss: 0.0722 - val_categorical_accuracy: 0.9774 Epoch 134/200 305/305 [==============================] - 3s 8ms/step - loss: 0.0551 - categorical_accuracy: 0.9851 - val_loss: 0.0719 - val_categorical_accuracy: 0.9779 Epoch 135/200 305/305 [==============================] - 3s 8ms/step - loss: 0.0548 - categorical_accuracy: 0.9849 - val_loss: 0.0718 - val_categorical_accuracy: 0.9778 Epoch 136/200 305/305 [==============================] - 2s 8ms/step - loss: 0.0546 - categorical_accuracy: 0.9852 - val_loss: 0.0716 - val_categorical_accuracy: 0.9776 Epoch 137/200 305/305 [==============================] - 2s 8ms/step - loss: 0.0542 - categorical_accuracy: 0.9853 - val_loss: 0.0713 - val_categorical_accuracy: 0.9780 Epoch 138/200 305/305 [==============================] - 3s 8ms/step - loss: 0.0540 - categorical_accuracy: 0.9854 - val_loss: 0.0708 - val_categorical_accuracy: 0.9779 Epoch 139/200 305/305 [==============================] - 2s 8ms/step - loss: 0.0536 - categorical_accuracy: 0.9856 - val_loss: 0.0706 - val_categorical_accuracy: 0.9780 Epoch 140/200 305/305 [==============================] - 2s 8ms/step - loss: 0.0534 - categorical_accuracy: 0.9857 - val_loss: 0.0705 - val_categorical_accuracy: 0.9780 Epoch 141/200 305/305 [==============================] - 2s 8ms/step - loss: 0.0530 - categorical_accuracy: 0.9856 - val_loss: 0.0701 - val_categorical_accuracy: 0.9780 Epoch 142/200 305/305 [==============================] - 3s 8ms/step - loss: 0.0528 - categorical_accuracy: 0.9857 - val_loss: 0.0698 - val_categorical_accuracy: 0.9782 Epoch 143/200 305/305 [==============================] - 2s 8ms/step - loss: 0.0524 - categorical_accuracy: 0.9862 - val_loss: 0.0696 - val_categorical_accuracy: 0.9783 Epoch 144/200 305/305 [==============================] - 3s 8ms/step - loss: 0.0522 - categorical_accuracy: 0.9859 - val_loss: 0.0695 - val_categorical_accuracy: 0.9781 Epoch 145/200 305/305 [==============================] - 2s 8ms/step - loss: 0.0520 - categorical_accuracy: 0.9859 - val_loss: 0.0698 - val_categorical_accuracy: 0.9781 Epoch 146/200 305/305 [==============================] - 3s 9ms/step - loss: 0.0517 - categorical_accuracy: 0.9859 - val_loss: 0.0691 - val_categorical_accuracy: 0.9784 Epoch 147/200 305/305 [==============================] - 2s 8ms/step - loss: 0.0514 - categorical_accuracy: 0.9862 - val_loss: 0.0692 - val_categorical_accuracy: 0.9785 Epoch 148/200 305/305 [==============================] - 2s 8ms/step - loss: 0.0512 - categorical_accuracy: 0.9862 - val_loss: 0.0687 - val_categorical_accuracy: 0.9786 Epoch 149/200 305/305 [==============================] - 2s 8ms/step - loss: 0.0509 - categorical_accuracy: 0.9863 - val_loss: 0.0685 - val_categorical_accuracy: 0.9786 Epoch 150/200 305/305 [==============================] - 3s 8ms/step - loss: 0.0507 - categorical_accuracy: 0.9865 - val_loss: 0.0684 - val_categorical_accuracy: 0.9787 Epoch 151/200 305/305 [==============================] - 2s 8ms/step - loss: 0.0503 - categorical_accuracy: 0.9862 - val_loss: 0.0684 - val_categorical_accuracy: 0.9787 Epoch 152/200 305/305 [==============================] - 2s 8ms/step - loss: 0.0501 - categorical_accuracy: 0.9865 - val_loss: 0.0679 - val_categorical_accuracy: 0.9787 Epoch 153/200 305/305 [==============================] - 2s 8ms/step - loss: 0.0498 - categorical_accuracy: 0.9866 - val_loss: 0.0678 - val_categorical_accuracy: 0.9789 Epoch 154/200 305/305 [==============================] - 2s 8ms/step - loss: 0.0496 - categorical_accuracy: 0.9865 - val_loss: 0.0679 - val_categorical_accuracy: 0.9789 Epoch 155/200 305/305 [==============================] - 2s 8ms/step - loss: 0.0494 - categorical_accuracy: 0.9865 - val_loss: 0.0676 - val_categorical_accuracy: 0.9791 Epoch 156/200 305/305 [==============================] - 3s 8ms/step - loss: 0.0491 - categorical_accuracy: 0.9866 - val_loss: 0.0674 - val_categorical_accuracy: 0.9787 Epoch 157/200 305/305 [==============================] - 2s 8ms/step - loss: 0.0489 - categorical_accuracy: 0.9867 - val_loss: 0.0671 - val_categorical_accuracy: 0.9792 Epoch 158/200 305/305 [==============================] - 3s 8ms/step - loss: 0.0486 - categorical_accuracy: 0.9865 - val_loss: 0.0667 - val_categorical_accuracy: 0.9791 Epoch 159/200 305/305 [==============================] - 3s 8ms/step - loss: 0.0484 - categorical_accuracy: 0.9867 - val_loss: 0.0669 - val_categorical_accuracy: 0.9791 Epoch 160/200 305/305 [==============================] - 2s 8ms/step - loss: 0.0481 - categorical_accuracy: 0.9867 - val_loss: 0.0664 - val_categorical_accuracy: 0.9792 Epoch 161/200 305/305 [==============================] - 2s 8ms/step - loss: 0.0480 - categorical_accuracy: 0.9869 - val_loss: 0.0664 - val_categorical_accuracy: 0.9793 Epoch 162/200 305/305 [==============================] - 3s 8ms/step - loss: 0.0477 - categorical_accuracy: 0.9872 - val_loss: 0.0665 - val_categorical_accuracy: 0.9797 Epoch 163/200 305/305 [==============================] - 3s 8ms/step - loss: 0.0475 - categorical_accuracy: 0.9870 - val_loss: 0.0661 - val_categorical_accuracy: 0.9790 Epoch 164/200 305/305 [==============================] - 2s 8ms/step - loss: 0.0472 - categorical_accuracy: 0.9871 - val_loss: 0.0665 - val_categorical_accuracy: 0.9796 Epoch 165/200 305/305 [==============================] - 3s 8ms/step - loss: 0.0470 - categorical_accuracy: 0.9871 - val_loss: 0.0658 - val_categorical_accuracy: 0.9795 Epoch 166/200 305/305 [==============================] - 2s 8ms/step - loss: 0.0468 - categorical_accuracy: 0.9872 - val_loss: 0.0658 - val_categorical_accuracy: 0.9794 Epoch 167/200 305/305 [==============================] - 3s 8ms/step - loss: 0.0465 - categorical_accuracy: 0.9871 - val_loss: 0.0654 - val_categorical_accuracy: 0.9791 Epoch 168/200 305/305 [==============================] - 3s 8ms/step - loss: 0.0464 - categorical_accuracy: 0.9874 - val_loss: 0.0653 - val_categorical_accuracy: 0.9796 Epoch 169/200 305/305 [==============================] - 2s 8ms/step - loss: 0.0461 - categorical_accuracy: 0.9874 - val_loss: 0.0652 - val_categorical_accuracy: 0.9800 Epoch 170/200 305/305 [==============================] - 2s 8ms/step - loss: 0.0459 - categorical_accuracy: 0.9874 - val_loss: 0.0656 - val_categorical_accuracy: 0.9797 Epoch 171/200 305/305 [==============================] - 3s 8ms/step - loss: 0.0457 - categorical_accuracy: 0.9877 - val_loss: 0.0649 - val_categorical_accuracy: 0.9798 Epoch 172/200 305/305 [==============================] - 2s 8ms/step - loss: 0.0455 - categorical_accuracy: 0.9873 - val_loss: 0.0649 - val_categorical_accuracy: 0.9796 Epoch 173/200 305/305 [==============================] - 2s 8ms/step - loss: 0.0453 - categorical_accuracy: 0.9876 - val_loss: 0.0647 - val_categorical_accuracy: 0.9800 Epoch 174/200 305/305 [==============================] - 3s 8ms/step - loss: 0.0451 - categorical_accuracy: 0.9874 - val_loss: 0.0644 - val_categorical_accuracy: 0.9802 Epoch 175/200 305/305 [==============================] - 3s 8ms/step - loss: 0.0448 - categorical_accuracy: 0.9874 - val_loss: 0.0645 - val_categorical_accuracy: 0.9801 Epoch 176/200 305/305 [==============================] - 3s 9ms/step - loss: 0.0446 - categorical_accuracy: 0.9879 - val_loss: 0.0642 - val_categorical_accuracy: 0.9800 Epoch 177/200 305/305 [==============================] - 2s 8ms/step - loss: 0.0444 - categorical_accuracy: 0.9877 - val_loss: 0.0639 - val_categorical_accuracy: 0.9800 Epoch 178/200 305/305 [==============================] - 3s 8ms/step - loss: 0.0442 - categorical_accuracy: 0.9878 - val_loss: 0.0644 - val_categorical_accuracy: 0.9800 Epoch 179/200 305/305 [==============================] - 3s 8ms/step - loss: 0.0441 - categorical_accuracy: 0.9877 - val_loss: 0.0638 - val_categorical_accuracy: 0.9801 Epoch 180/200 305/305 [==============================] - 3s 8ms/step - loss: 0.0439 - categorical_accuracy: 0.9881 - val_loss: 0.0637 - val_categorical_accuracy: 0.9800 Epoch 181/200 305/305 [==============================] - 3s 8ms/step - loss: 0.0436 - categorical_accuracy: 0.9880 - val_loss: 0.0632 - val_categorical_accuracy: 0.9800 Epoch 182/200 305/305 [==============================] - 2s 8ms/step - loss: 0.0435 - categorical_accuracy: 0.9881 - val_loss: 0.0632 - val_categorical_accuracy: 0.9806 Epoch 183/200 305/305 [==============================] - 2s 8ms/step - loss: 0.0433 - categorical_accuracy: 0.9881 - val_loss: 0.0632 - val_categorical_accuracy: 0.9802 Epoch 184/200 305/305 [==============================] - 2s 8ms/step - loss: 0.0431 - categorical_accuracy: 0.9881 - val_loss: 0.0632 - val_categorical_accuracy: 0.9801 Epoch 185/200 305/305 [==============================] - 3s 8ms/step - loss: 0.0429 - categorical_accuracy: 0.9881 - val_loss: 0.0630 - val_categorical_accuracy: 0.9802 Epoch 186/200 305/305 [==============================] - 2s 8ms/step - loss: 0.0427 - categorical_accuracy: 0.9881 - val_loss: 0.0631 - val_categorical_accuracy: 0.9805 Epoch 187/200 305/305 [==============================] - 2s 8ms/step - loss: 0.0425 - categorical_accuracy: 0.9883 - val_loss: 0.0628 - val_categorical_accuracy: 0.9807 Epoch 188/200 305/305 [==============================] - 2s 8ms/step - loss: 0.0423 - categorical_accuracy: 0.9883 - val_loss: 0.0623 - val_categorical_accuracy: 0.9806 Epoch 189/200 305/305 [==============================] - 2s 8ms/step - loss: 0.0421 - categorical_accuracy: 0.9884 - val_loss: 0.0623 - val_categorical_accuracy: 0.9808 Epoch 190/200 305/305 [==============================] - 3s 8ms/step - loss: 0.0419 - categorical_accuracy: 0.9883 - val_loss: 0.0622 - val_categorical_accuracy: 0.9808 Epoch 191/200 305/305 [==============================] - 3s 8ms/step - loss: 0.0418 - categorical_accuracy: 0.9883 - val_loss: 0.0620 - val_categorical_accuracy: 0.9809 Epoch 192/200 305/305 [==============================] - 3s 8ms/step - loss: 0.0416 - categorical_accuracy: 0.9886 - val_loss: 0.0620 - val_categorical_accuracy: 0.9809 Epoch 193/200 305/305 [==============================] - 3s 9ms/step - loss: 0.0414 - categorical_accuracy: 0.9885 - val_loss: 0.0625 - val_categorical_accuracy: 0.9804 Epoch 194/200 305/305 [==============================] - 3s 8ms/step - loss: 0.0412 - categorical_accuracy: 0.9885 - val_loss: 0.0618 - val_categorical_accuracy: 0.9810 Epoch 195/200 305/305 [==============================] - 2s 8ms/step - loss: 0.0410 - categorical_accuracy: 0.9886 - val_loss: 0.0617 - val_categorical_accuracy: 0.9809 Epoch 196/200 305/305 [==============================] - 3s 8ms/step - loss: 0.0409 - categorical_accuracy: 0.9888 - val_loss: 0.0615 - val_categorical_accuracy: 0.9810 Epoch 197/200 305/305 [==============================] - 3s 8ms/step - loss: 0.0407 - categorical_accuracy: 0.9890 - val_loss: 0.0616 - val_categorical_accuracy: 0.9809 Epoch 198/200 305/305 [==============================] - 3s 9ms/step - loss: 0.0405 - categorical_accuracy: 0.9889 - val_loss: 0.0613 - val_categorical_accuracy: 0.9811 Epoch 199/200 305/305 [==============================] - 3s 8ms/step - loss: 0.0403 - categorical_accuracy: 0.9887 - val_loss: 0.0621 - val_categorical_accuracy: 0.9808 Epoch 200/200 305/305 [==============================] - 2s 8ms/step - loss: 0.0402 - categorical_accuracy: 0.9889 - val_loss: 0.0615 - val_categorical_accuracy: 0.9810 1875/1875 [==============================] - 8s 4ms/step - loss: 0.0474 - categorical_accuracy: 0.9862 313/313 [==============================] - 1s 4ms/step - loss: 0.1560 - categorical_accuracy: 0.9517
def CNN():
model = models.Sequential()
# 添加卷积与池化层
model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(128, (3, 3), activation='relu'))
# 添加分类器
model.add(layers.Flatten())
model.add(layers.Dense(64, activation='relu'))
model.add(layers.Dense(10, activation='softmax'))
return model
CNN = CNN()
CNN.summary() # 显示模型结构
Model: "sequential_1" _________________________________________________________________ Layer (type) Output Shape Param # ================================================================= conv2d_2 (Conv2D) (None, 26, 26, 32) 320 max_pooling2d_2 (MaxPooling (None, 13, 13, 32) 0 2D) conv2d_3 (Conv2D) (None, 11, 11, 64) 18496 max_pooling2d_3 (MaxPooling (None, 5, 5, 64) 0 2D) conv2d_4 (Conv2D) (None, 3, 3, 128) 73856 flatten_1 (Flatten) (None, 1152) 0 dense_3 (Dense) (None, 64) 73792 dense_4 (Dense) (None, 10) 650 ================================================================= Total params: 167,114 Trainable params: 167,114 Non-trainable params: 0 _________________________________________________________________
CNN.compile(optimizer=SGD(lr=0.001, momentum=0.7, nesterov=True), # 优化器
loss='categorical_crossentropy', # 损失函数
metrics=["categorical_accuracy"]) # 评价指标
mcp_save = ModelCheckpoint('CNN.h5', save_best_only=True, monitor='val_loss', mode='min')
CNN_history = CNN.fit(train_images, train_labels, epochs=200, batch_size=128, shuffle=True, validation_split=0.35, callbacks=[mcp_save])
CNN_train_loss, CNN_train_acc = CNN.evaluate(train_images, train_labels)
CNN_test_loss, CNN_test_acc = CNN.evaluate(test_images, test_labels)
CNN_pred = CNN.predict(test_images)
Epoch 1/200 305/305 [==============================] - 5s 14ms/step - loss: 2.2487 - categorical_accuracy: 0.2928 - val_loss: 2.1801 - val_categorical_accuracy: 0.4993 Epoch 2/200 305/305 [==============================] - 4s 12ms/step - loss: 1.9519 - categorical_accuracy: 0.5742 - val_loss: 1.5093 - val_categorical_accuracy: 0.7123 Epoch 3/200 305/305 [==============================] - 4s 12ms/step - loss: 0.9483 - categorical_accuracy: 0.7746 - val_loss: 0.5961 - val_categorical_accuracy: 0.8420 Epoch 4/200 305/305 [==============================] - 4s 14ms/step - loss: 0.5001 - categorical_accuracy: 0.8616 - val_loss: 0.4261 - val_categorical_accuracy: 0.8781 Epoch 5/200 305/305 [==============================] - 4s 12ms/step - loss: 0.3885 - categorical_accuracy: 0.8891 - val_loss: 0.3517 - val_categorical_accuracy: 0.8957 Epoch 6/200 305/305 [==============================] - 4s 14ms/step - loss: 0.3351 - categorical_accuracy: 0.9017 - val_loss: 0.3102 - val_categorical_accuracy: 0.9081 Epoch 7/200 305/305 [==============================] - 4s 14ms/step - loss: 0.2983 - categorical_accuracy: 0.9125 - val_loss: 0.2918 - val_categorical_accuracy: 0.9107 Epoch 8/200 305/305 [==============================] - 4s 12ms/step - loss: 0.2708 - categorical_accuracy: 0.9196 - val_loss: 0.2567 - val_categorical_accuracy: 0.9234 Epoch 9/200 305/305 [==============================] - 4s 12ms/step - loss: 0.2484 - categorical_accuracy: 0.9266 - val_loss: 0.2409 - val_categorical_accuracy: 0.9280 Epoch 10/200 305/305 [==============================] - 4s 12ms/step - loss: 0.2305 - categorical_accuracy: 0.9315 - val_loss: 0.2255 - val_categorical_accuracy: 0.9340 Epoch 11/200 305/305 [==============================] - 4s 14ms/step - loss: 0.2144 - categorical_accuracy: 0.9381 - val_loss: 0.2082 - val_categorical_accuracy: 0.9381 Epoch 12/200 305/305 [==============================] - 4s 14ms/step - loss: 0.2010 - categorical_accuracy: 0.9404 - val_loss: 0.2014 - val_categorical_accuracy: 0.9410 Epoch 13/200 305/305 [==============================] - 4s 14ms/step - loss: 0.1889 - categorical_accuracy: 0.9433 - val_loss: 0.1872 - val_categorical_accuracy: 0.9440 Epoch 14/200 305/305 [==============================] - 4s 14ms/step - loss: 0.1780 - categorical_accuracy: 0.9470 - val_loss: 0.1814 - val_categorical_accuracy: 0.9478 Epoch 15/200 305/305 [==============================] - 4s 14ms/step - loss: 0.1680 - categorical_accuracy: 0.9498 - val_loss: 0.1655 - val_categorical_accuracy: 0.9517 Epoch 16/200 305/305 [==============================] - 4s 12ms/step - loss: 0.1598 - categorical_accuracy: 0.9528 - val_loss: 0.1579 - val_categorical_accuracy: 0.9533 Epoch 17/200 305/305 [==============================] - 4s 14ms/step - loss: 0.1526 - categorical_accuracy: 0.9545 - val_loss: 0.1520 - val_categorical_accuracy: 0.9559 Epoch 18/200 305/305 [==============================] - 4s 12ms/step - loss: 0.1451 - categorical_accuracy: 0.9561 - val_loss: 0.1495 - val_categorical_accuracy: 0.9556 Epoch 19/200 305/305 [==============================] - 4s 12ms/step - loss: 0.1384 - categorical_accuracy: 0.9583 - val_loss: 0.1451 - val_categorical_accuracy: 0.9577 Epoch 20/200 305/305 [==============================] - 4s 12ms/step - loss: 0.1330 - categorical_accuracy: 0.9598 - val_loss: 0.1369 - val_categorical_accuracy: 0.9621 Epoch 21/200 305/305 [==============================] - 4s 14ms/step - loss: 0.1271 - categorical_accuracy: 0.9615 - val_loss: 0.1341 - val_categorical_accuracy: 0.9615 Epoch 22/200 305/305 [==============================] - 4s 12ms/step - loss: 0.1224 - categorical_accuracy: 0.9625 - val_loss: 0.1256 - val_categorical_accuracy: 0.9636 Epoch 23/200 305/305 [==============================] - 4s 14ms/step - loss: 0.1180 - categorical_accuracy: 0.9642 - val_loss: 0.1241 - val_categorical_accuracy: 0.9648 Epoch 24/200 305/305 [==============================] - 4s 12ms/step - loss: 0.1132 - categorical_accuracy: 0.9652 - val_loss: 0.1229 - val_categorical_accuracy: 0.9645 Epoch 25/200 305/305 [==============================] - 4s 14ms/step - loss: 0.1094 - categorical_accuracy: 0.9664 - val_loss: 0.1185 - val_categorical_accuracy: 0.9651 Epoch 26/200 305/305 [==============================] - 4s 14ms/step - loss: 0.1057 - categorical_accuracy: 0.9680 - val_loss: 0.1156 - val_categorical_accuracy: 0.9662 Epoch 27/200 305/305 [==============================] - 4s 14ms/step - loss: 0.1025 - categorical_accuracy: 0.9692 - val_loss: 0.1143 - val_categorical_accuracy: 0.9664 Epoch 28/200 305/305 [==============================] - 4s 14ms/step - loss: 0.0992 - categorical_accuracy: 0.9703 - val_loss: 0.1098 - val_categorical_accuracy: 0.9677 Epoch 29/200 305/305 [==============================] - 4s 14ms/step - loss: 0.0960 - categorical_accuracy: 0.9708 - val_loss: 0.1067 - val_categorical_accuracy: 0.9683 Epoch 30/200 305/305 [==============================] - 4s 14ms/step - loss: 0.0934 - categorical_accuracy: 0.9716 - val_loss: 0.1033 - val_categorical_accuracy: 0.9699 Epoch 31/200 305/305 [==============================] - 4s 12ms/step - loss: 0.0904 - categorical_accuracy: 0.9726 - val_loss: 0.1014 - val_categorical_accuracy: 0.9691 Epoch 32/200 305/305 [==============================] - 4s 12ms/step - loss: 0.0884 - categorical_accuracy: 0.9739 - val_loss: 0.1006 - val_categorical_accuracy: 0.9694 Epoch 33/200 305/305 [==============================] - 4s 14ms/step - loss: 0.0863 - categorical_accuracy: 0.9744 - val_loss: 0.1035 - val_categorical_accuracy: 0.9692 Epoch 34/200 305/305 [==============================] - 4s 14ms/step - loss: 0.0833 - categorical_accuracy: 0.9747 - val_loss: 0.0990 - val_categorical_accuracy: 0.9704 Epoch 35/200 305/305 [==============================] - 4s 14ms/step - loss: 0.0814 - categorical_accuracy: 0.9754 - val_loss: 0.0967 - val_categorical_accuracy: 0.9706 Epoch 36/200 305/305 [==============================] - 4s 14ms/step - loss: 0.0799 - categorical_accuracy: 0.9762 - val_loss: 0.0949 - val_categorical_accuracy: 0.9720 Epoch 37/200 305/305 [==============================] - 4s 12ms/step - loss: 0.0775 - categorical_accuracy: 0.9769 - val_loss: 0.0923 - val_categorical_accuracy: 0.9720 Epoch 38/200 305/305 [==============================] - 4s 12ms/step - loss: 0.0761 - categorical_accuracy: 0.9771 - val_loss: 0.0909 - val_categorical_accuracy: 0.9722 Epoch 39/200 305/305 [==============================] - 4s 14ms/step - loss: 0.0742 - categorical_accuracy: 0.9773 - val_loss: 0.0914 - val_categorical_accuracy: 0.9714 Epoch 40/200 305/305 [==============================] - 4s 12ms/step - loss: 0.0729 - categorical_accuracy: 0.9779 - val_loss: 0.0878 - val_categorical_accuracy: 0.9734 Epoch 41/200 305/305 [==============================] - 4s 14ms/step - loss: 0.0708 - categorical_accuracy: 0.9786 - val_loss: 0.0877 - val_categorical_accuracy: 0.9725 Epoch 42/200 305/305 [==============================] - 4s 14ms/step - loss: 0.0700 - categorical_accuracy: 0.9788 - val_loss: 0.0868 - val_categorical_accuracy: 0.9727 Epoch 43/200 305/305 [==============================] - 4s 12ms/step - loss: 0.0683 - categorical_accuracy: 0.9793 - val_loss: 0.0875 - val_categorical_accuracy: 0.9730 Epoch 44/200 305/305 [==============================] - 4s 12ms/step - loss: 0.0663 - categorical_accuracy: 0.9801 - val_loss: 0.0891 - val_categorical_accuracy: 0.9721 Epoch 45/200 305/305 [==============================] - 4s 12ms/step - loss: 0.0658 - categorical_accuracy: 0.9802 - val_loss: 0.0857 - val_categorical_accuracy: 0.9731 Epoch 46/200 305/305 [==============================] - 4s 14ms/step - loss: 0.0647 - categorical_accuracy: 0.9806 - val_loss: 0.0825 - val_categorical_accuracy: 0.9743 Epoch 47/200 305/305 [==============================] - 4s 12ms/step - loss: 0.0631 - categorical_accuracy: 0.9806 - val_loss: 0.0844 - val_categorical_accuracy: 0.9746 Epoch 48/200 305/305 [==============================] - 4s 14ms/step - loss: 0.0622 - categorical_accuracy: 0.9807 - val_loss: 0.0810 - val_categorical_accuracy: 0.9750 Epoch 49/200 305/305 [==============================] - 4s 14ms/step - loss: 0.0611 - categorical_accuracy: 0.9815 - val_loss: 0.0803 - val_categorical_accuracy: 0.9756 Epoch 50/200 305/305 [==============================] - 4s 14ms/step - loss: 0.0596 - categorical_accuracy: 0.9821 - val_loss: 0.0808 - val_categorical_accuracy: 0.9753 Epoch 51/200 305/305 [==============================] - 4s 14ms/step - loss: 0.0588 - categorical_accuracy: 0.9825 - val_loss: 0.0776 - val_categorical_accuracy: 0.9762 Epoch 52/200 305/305 [==============================] - 4s 12ms/step - loss: 0.0575 - categorical_accuracy: 0.9829 - val_loss: 0.0790 - val_categorical_accuracy: 0.9758 Epoch 53/200 305/305 [==============================] - 4s 14ms/step - loss: 0.0569 - categorical_accuracy: 0.9835 - val_loss: 0.0769 - val_categorical_accuracy: 0.9763 Epoch 54/200 305/305 [==============================] - 4s 14ms/step - loss: 0.0556 - categorical_accuracy: 0.9836 - val_loss: 0.0780 - val_categorical_accuracy: 0.9758 Epoch 55/200 305/305 [==============================] - 4s 14ms/step - loss: 0.0548 - categorical_accuracy: 0.9832 - val_loss: 0.0798 - val_categorical_accuracy: 0.9756 Epoch 56/200 305/305 [==============================] - 4s 14ms/step - loss: 0.0540 - categorical_accuracy: 0.9839 - val_loss: 0.0785 - val_categorical_accuracy: 0.9762 Epoch 57/200 305/305 [==============================] - 4s 14ms/step - loss: 0.0530 - categorical_accuracy: 0.9839 - val_loss: 0.0783 - val_categorical_accuracy: 0.9759 Epoch 58/200 305/305 [==============================] - 4s 14ms/step - loss: 0.0525 - categorical_accuracy: 0.9847 - val_loss: 0.0746 - val_categorical_accuracy: 0.9772 Epoch 59/200 305/305 [==============================] - 4s 12ms/step - loss: 0.0516 - categorical_accuracy: 0.9843 - val_loss: 0.0770 - val_categorical_accuracy: 0.9760 Epoch 60/200 305/305 [==============================] - 4s 12ms/step - loss: 0.0507 - categorical_accuracy: 0.9849 - val_loss: 0.0739 - val_categorical_accuracy: 0.9772 Epoch 61/200 305/305 [==============================] - 4s 12ms/step - loss: 0.0506 - categorical_accuracy: 0.9850 - val_loss: 0.0741 - val_categorical_accuracy: 0.9773 Epoch 62/200 305/305 [==============================] - 4s 14ms/step - loss: 0.0497 - categorical_accuracy: 0.9848 - val_loss: 0.0738 - val_categorical_accuracy: 0.9773 Epoch 63/200 305/305 [==============================] - 4s 12ms/step - loss: 0.0487 - categorical_accuracy: 0.9856 - val_loss: 0.0742 - val_categorical_accuracy: 0.9779 Epoch 64/200 305/305 [==============================] - 4s 12ms/step - loss: 0.0479 - categorical_accuracy: 0.9861 - val_loss: 0.0761 - val_categorical_accuracy: 0.9766 Epoch 65/200 305/305 [==============================] - 4s 14ms/step - loss: 0.0475 - categorical_accuracy: 0.9855 - val_loss: 0.0721 - val_categorical_accuracy: 0.9779 Epoch 66/200 305/305 [==============================] - 4s 14ms/step - loss: 0.0472 - categorical_accuracy: 0.9856 - val_loss: 0.0714 - val_categorical_accuracy: 0.9785 Epoch 67/200 305/305 [==============================] - 4s 12ms/step - loss: 0.0462 - categorical_accuracy: 0.9862 - val_loss: 0.0695 - val_categorical_accuracy: 0.9790 Epoch 68/200 305/305 [==============================] - 4s 14ms/step - loss: 0.0459 - categorical_accuracy: 0.9862 - val_loss: 0.0727 - val_categorical_accuracy: 0.9778 Epoch 69/200 305/305 [==============================] - 4s 14ms/step - loss: 0.0448 - categorical_accuracy: 0.9867 - val_loss: 0.0712 - val_categorical_accuracy: 0.9788 Epoch 70/200 305/305 [==============================] - 4s 14ms/step - loss: 0.0445 - categorical_accuracy: 0.9867 - val_loss: 0.0692 - val_categorical_accuracy: 0.9788 Epoch 71/200 305/305 [==============================] - 4s 14ms/step - loss: 0.0440 - categorical_accuracy: 0.9864 - val_loss: 0.0706 - val_categorical_accuracy: 0.9782 Epoch 72/200 305/305 [==============================] - 4s 14ms/step - loss: 0.0434 - categorical_accuracy: 0.9870 - val_loss: 0.0686 - val_categorical_accuracy: 0.9796 Epoch 73/200 305/305 [==============================] - 4s 12ms/step - loss: 0.0426 - categorical_accuracy: 0.9872 - val_loss: 0.0700 - val_categorical_accuracy: 0.9790 Epoch 74/200 305/305 [==============================] - 4s 12ms/step - loss: 0.0421 - categorical_accuracy: 0.9876 - val_loss: 0.0701 - val_categorical_accuracy: 0.9779 Epoch 75/200 305/305 [==============================] - 4s 14ms/step - loss: 0.0421 - categorical_accuracy: 0.9875 - val_loss: 0.0671 - val_categorical_accuracy: 0.9802 Epoch 76/200 305/305 [==============================] - 4s 14ms/step - loss: 0.0415 - categorical_accuracy: 0.9874 - val_loss: 0.0680 - val_categorical_accuracy: 0.9802 Epoch 77/200 305/305 [==============================] - 4s 14ms/step - loss: 0.0408 - categorical_accuracy: 0.9876 - val_loss: 0.0672 - val_categorical_accuracy: 0.9796 Epoch 78/200 305/305 [==============================] - 4s 12ms/step - loss: 0.0404 - categorical_accuracy: 0.9877 - val_loss: 0.0666 - val_categorical_accuracy: 0.9800 Epoch 79/200 305/305 [==============================] - 4s 14ms/step - loss: 0.0397 - categorical_accuracy: 0.9878 - val_loss: 0.0665 - val_categorical_accuracy: 0.9810 Epoch 80/200 305/305 [==============================] - 4s 12ms/step - loss: 0.0394 - categorical_accuracy: 0.9881 - val_loss: 0.0664 - val_categorical_accuracy: 0.9802 Epoch 81/200 305/305 [==============================] - 4s 14ms/step - loss: 0.0393 - categorical_accuracy: 0.9880 - val_loss: 0.0704 - val_categorical_accuracy: 0.9793 Epoch 82/200 305/305 [==============================] - 4s 14ms/step - loss: 0.0386 - categorical_accuracy: 0.9881 - val_loss: 0.0657 - val_categorical_accuracy: 0.9801 Epoch 83/200 305/305 [==============================] - 4s 12ms/step - loss: 0.0383 - categorical_accuracy: 0.9889 - val_loss: 0.0644 - val_categorical_accuracy: 0.9807 Epoch 84/200 305/305 [==============================] - 4s 12ms/step - loss: 0.0371 - categorical_accuracy: 0.9888 - val_loss: 0.0703 - val_categorical_accuracy: 0.9797 Epoch 85/200 305/305 [==============================] - 4s 12ms/step - loss: 0.0370 - categorical_accuracy: 0.9887 - val_loss: 0.0675 - val_categorical_accuracy: 0.9794 Epoch 86/200 305/305 [==============================] - 4s 14ms/step - loss: 0.0365 - categorical_accuracy: 0.9889 - val_loss: 0.0643 - val_categorical_accuracy: 0.9802 Epoch 87/200 305/305 [==============================] - 4s 12ms/step - loss: 0.0360 - categorical_accuracy: 0.9893 - val_loss: 0.0720 - val_categorical_accuracy: 0.9786 Epoch 88/200 305/305 [==============================] - 4s 12ms/step - loss: 0.0358 - categorical_accuracy: 0.9888 - val_loss: 0.0646 - val_categorical_accuracy: 0.9810 Epoch 89/200 305/305 [==============================] - 4s 14ms/step - loss: 0.0357 - categorical_accuracy: 0.9894 - val_loss: 0.0647 - val_categorical_accuracy: 0.9808 Epoch 90/200 305/305 [==============================] - 4s 13ms/step - loss: 0.0352 - categorical_accuracy: 0.9893 - val_loss: 0.0629 - val_categorical_accuracy: 0.9810 Epoch 91/200 305/305 [==============================] - 4s 12ms/step - loss: 0.0347 - categorical_accuracy: 0.9896 - val_loss: 0.0626 - val_categorical_accuracy: 0.9815 Epoch 92/200 305/305 [==============================] - 4s 14ms/step - loss: 0.0344 - categorical_accuracy: 0.9897 - val_loss: 0.0658 - val_categorical_accuracy: 0.9799 Epoch 93/200 305/305 [==============================] - 4s 12ms/step - loss: 0.0337 - categorical_accuracy: 0.9902 - val_loss: 0.0642 - val_categorical_accuracy: 0.9809 Epoch 94/200 305/305 [==============================] - 4s 12ms/step - loss: 0.0333 - categorical_accuracy: 0.9901 - val_loss: 0.0638 - val_categorical_accuracy: 0.9806 Epoch 95/200 305/305 [==============================] - 4s 14ms/step - loss: 0.0333 - categorical_accuracy: 0.9902 - val_loss: 0.0618 - val_categorical_accuracy: 0.9817 Epoch 96/200 305/305 [==============================] - 4s 14ms/step - loss: 0.0327 - categorical_accuracy: 0.9903 - val_loss: 0.0638 - val_categorical_accuracy: 0.9809 Epoch 97/200 305/305 [==============================] - 4s 12ms/step - loss: 0.0323 - categorical_accuracy: 0.9899 - val_loss: 0.0650 - val_categorical_accuracy: 0.9807 Epoch 98/200 305/305 [==============================] - 4s 14ms/step - loss: 0.0322 - categorical_accuracy: 0.9903 - val_loss: 0.0629 - val_categorical_accuracy: 0.9813 Epoch 99/200 305/305 [==============================] - 4s 12ms/step - loss: 0.0320 - categorical_accuracy: 0.9903 - val_loss: 0.0647 - val_categorical_accuracy: 0.9810 Epoch 100/200 305/305 [==============================] - 4s 12ms/step - loss: 0.0316 - categorical_accuracy: 0.9906 - val_loss: 0.0616 - val_categorical_accuracy: 0.9818 Epoch 101/200 305/305 [==============================] - 4s 12ms/step - loss: 0.0317 - categorical_accuracy: 0.9905 - val_loss: 0.0639 - val_categorical_accuracy: 0.9812 Epoch 102/200 305/305 [==============================] - 4s 12ms/step - loss: 0.0309 - categorical_accuracy: 0.9905 - val_loss: 0.0617 - val_categorical_accuracy: 0.9814 Epoch 103/200 305/305 [==============================] - 4s 12ms/step - loss: 0.0304 - categorical_accuracy: 0.9913 - val_loss: 0.0655 - val_categorical_accuracy: 0.9801 Epoch 104/200 305/305 [==============================] - 4s 12ms/step - loss: 0.0303 - categorical_accuracy: 0.9908 - val_loss: 0.0650 - val_categorical_accuracy: 0.9809 Epoch 105/200 305/305 [==============================] - 4s 12ms/step - loss: 0.0301 - categorical_accuracy: 0.9909 - val_loss: 0.0612 - val_categorical_accuracy: 0.9819 Epoch 106/200 305/305 [==============================] - 4s 13ms/step - loss: 0.0299 - categorical_accuracy: 0.9907 - val_loss: 0.0609 - val_categorical_accuracy: 0.9821 Epoch 107/200 305/305 [==============================] - 4s 14ms/step - loss: 0.0296 - categorical_accuracy: 0.9916 - val_loss: 0.0614 - val_categorical_accuracy: 0.9820 Epoch 108/200 305/305 [==============================] - 4s 14ms/step - loss: 0.0290 - categorical_accuracy: 0.9914 - val_loss: 0.0636 - val_categorical_accuracy: 0.9817 Epoch 109/200 305/305 [==============================] - 4s 12ms/step - loss: 0.0288 - categorical_accuracy: 0.9911 - val_loss: 0.0632 - val_categorical_accuracy: 0.9815 Epoch 110/200 305/305 [==============================] - 4s 12ms/step - loss: 0.0286 - categorical_accuracy: 0.9914 - val_loss: 0.0641 - val_categorical_accuracy: 0.9810 Epoch 111/200 305/305 [==============================] - 4s 12ms/step - loss: 0.0283 - categorical_accuracy: 0.9915 - val_loss: 0.0617 - val_categorical_accuracy: 0.9822 Epoch 112/200 305/305 [==============================] - 4s 14ms/step - loss: 0.0279 - categorical_accuracy: 0.9916 - val_loss: 0.0611 - val_categorical_accuracy: 0.9818 Epoch 113/200 305/305 [==============================] - 4s 14ms/step - loss: 0.0274 - categorical_accuracy: 0.9918 - val_loss: 0.0613 - val_categorical_accuracy: 0.9826 Epoch 114/200 305/305 [==============================] - 4s 13ms/step - loss: 0.0272 - categorical_accuracy: 0.9922 - val_loss: 0.0644 - val_categorical_accuracy: 0.9813 Epoch 115/200 305/305 [==============================] - 4s 12ms/step - loss: 0.0272 - categorical_accuracy: 0.9920 - val_loss: 0.0597 - val_categorical_accuracy: 0.9829 Epoch 116/200 305/305 [==============================] - 4s 12ms/step - loss: 0.0267 - categorical_accuracy: 0.9920 - val_loss: 0.0621 - val_categorical_accuracy: 0.9820 Epoch 117/200 305/305 [==============================] - 4s 12ms/step - loss: 0.0269 - categorical_accuracy: 0.9918 - val_loss: 0.0605 - val_categorical_accuracy: 0.9827 Epoch 118/200 305/305 [==============================] - 4s 14ms/step - loss: 0.0263 - categorical_accuracy: 0.9922 - val_loss: 0.0604 - val_categorical_accuracy: 0.9824 Epoch 119/200 305/305 [==============================] - 4s 12ms/step - loss: 0.0261 - categorical_accuracy: 0.9921 - val_loss: 0.0612 - val_categorical_accuracy: 0.9827 Epoch 120/200 305/305 [==============================] - 4s 12ms/step - loss: 0.0258 - categorical_accuracy: 0.9921 - val_loss: 0.0611 - val_categorical_accuracy: 0.9821 Epoch 121/200 305/305 [==============================] - 4s 14ms/step - loss: 0.0257 - categorical_accuracy: 0.9924 - val_loss: 0.0597 - val_categorical_accuracy: 0.9831 Epoch 122/200 305/305 [==============================] - 4s 12ms/step - loss: 0.0251 - categorical_accuracy: 0.9923 - val_loss: 0.0642 - val_categorical_accuracy: 0.9813 Epoch 123/200 305/305 [==============================] - 4s 14ms/step - loss: 0.0249 - categorical_accuracy: 0.9927 - val_loss: 0.0614 - val_categorical_accuracy: 0.9827 Epoch 124/200 305/305 [==============================] - 4s 14ms/step - loss: 0.0248 - categorical_accuracy: 0.9925 - val_loss: 0.0603 - val_categorical_accuracy: 0.9824 Epoch 125/200 305/305 [==============================] - 4s 14ms/step - loss: 0.0242 - categorical_accuracy: 0.9929 - val_loss: 0.0616 - val_categorical_accuracy: 0.9819 Epoch 126/200 305/305 [==============================] - 4s 12ms/step - loss: 0.0247 - categorical_accuracy: 0.9925 - val_loss: 0.0588 - val_categorical_accuracy: 0.9833 Epoch 127/200 305/305 [==============================] - 4s 14ms/step - loss: 0.0241 - categorical_accuracy: 0.9929 - val_loss: 0.0610 - val_categorical_accuracy: 0.9825 Epoch 128/200 305/305 [==============================] - 4s 14ms/step - loss: 0.0241 - categorical_accuracy: 0.9926 - val_loss: 0.0606 - val_categorical_accuracy: 0.9827 Epoch 129/200 305/305 [==============================] - 4s 13ms/step - loss: 0.0236 - categorical_accuracy: 0.9930 - val_loss: 0.0609 - val_categorical_accuracy: 0.9823 Epoch 130/200 305/305 [==============================] - 4s 12ms/step - loss: 0.0233 - categorical_accuracy: 0.9932 - val_loss: 0.0609 - val_categorical_accuracy: 0.9830 Epoch 131/200 305/305 [==============================] - 4s 12ms/step - loss: 0.0232 - categorical_accuracy: 0.9933 - val_loss: 0.0592 - val_categorical_accuracy: 0.9832 Epoch 132/200 305/305 [==============================] - 4s 12ms/step - loss: 0.0232 - categorical_accuracy: 0.9931 - val_loss: 0.0600 - val_categorical_accuracy: 0.9832 Epoch 133/200 305/305 [==============================] - 4s 14ms/step - loss: 0.0228 - categorical_accuracy: 0.9935 - val_loss: 0.0606 - val_categorical_accuracy: 0.9825 Epoch 134/200 305/305 [==============================] - 4s 13ms/step - loss: 0.0226 - categorical_accuracy: 0.9931 - val_loss: 0.0599 - val_categorical_accuracy: 0.9830 Epoch 135/200 305/305 [==============================] - 4s 12ms/step - loss: 0.0224 - categorical_accuracy: 0.9933 - val_loss: 0.0599 - val_categorical_accuracy: 0.9829 Epoch 136/200 305/305 [==============================] - 4s 12ms/step - loss: 0.0221 - categorical_accuracy: 0.9932 - val_loss: 0.0599 - val_categorical_accuracy: 0.9832 Epoch 137/200 305/305 [==============================] - 4s 14ms/step - loss: 0.0221 - categorical_accuracy: 0.9933 - val_loss: 0.0607 - val_categorical_accuracy: 0.9826 Epoch 138/200 305/305 [==============================] - 4s 14ms/step - loss: 0.0220 - categorical_accuracy: 0.9934 - val_loss: 0.0590 - val_categorical_accuracy: 0.9827 Epoch 139/200 305/305 [==============================] - 4s 12ms/step - loss: 0.0212 - categorical_accuracy: 0.9942 - val_loss: 0.0600 - val_categorical_accuracy: 0.9832 Epoch 140/200 305/305 [==============================] - 4s 12ms/step - loss: 0.0212 - categorical_accuracy: 0.9938 - val_loss: 0.0613 - val_categorical_accuracy: 0.9824 Epoch 141/200 305/305 [==============================] - 4s 13ms/step - loss: 0.0208 - categorical_accuracy: 0.9939 - val_loss: 0.0601 - val_categorical_accuracy: 0.9836 Epoch 142/200 305/305 [==============================] - 4s 14ms/step - loss: 0.0205 - categorical_accuracy: 0.9938 - val_loss: 0.0600 - val_categorical_accuracy: 0.9833 Epoch 143/200 305/305 [==============================] - 4s 14ms/step - loss: 0.0208 - categorical_accuracy: 0.9939 - val_loss: 0.0608 - val_categorical_accuracy: 0.9831 Epoch 144/200 305/305 [==============================] - 4s 14ms/step - loss: 0.0205 - categorical_accuracy: 0.9942 - val_loss: 0.0588 - val_categorical_accuracy: 0.9832 Epoch 145/200 305/305 [==============================] - 4s 14ms/step - loss: 0.0203 - categorical_accuracy: 0.9942 - val_loss: 0.0589 - val_categorical_accuracy: 0.9830 Epoch 146/200 305/305 [==============================] - 4s 14ms/step - loss: 0.0199 - categorical_accuracy: 0.9943 - val_loss: 0.0607 - val_categorical_accuracy: 0.9823 Epoch 147/200 305/305 [==============================] - 4s 14ms/step - loss: 0.0200 - categorical_accuracy: 0.9940 - val_loss: 0.0588 - val_categorical_accuracy: 0.9830 Epoch 148/200 305/305 [==============================] - 4s 14ms/step - loss: 0.0193 - categorical_accuracy: 0.9944 - val_loss: 0.0610 - val_categorical_accuracy: 0.9820 Epoch 149/200 305/305 [==============================] - 4s 14ms/step - loss: 0.0194 - categorical_accuracy: 0.9943 - val_loss: 0.0584 - val_categorical_accuracy: 0.9837 Epoch 150/200 305/305 [==============================] - 4s 14ms/step - loss: 0.0192 - categorical_accuracy: 0.9946 - val_loss: 0.0603 - val_categorical_accuracy: 0.9832 Epoch 151/200 305/305 [==============================] - 4s 14ms/step - loss: 0.0192 - categorical_accuracy: 0.9943 - val_loss: 0.0607 - val_categorical_accuracy: 0.9832 Epoch 152/200 305/305 [==============================] - 4s 14ms/step - loss: 0.0190 - categorical_accuracy: 0.9945 - val_loss: 0.0589 - val_categorical_accuracy: 0.9835 Epoch 153/200 305/305 [==============================] - 4s 14ms/step - loss: 0.0186 - categorical_accuracy: 0.9949 - val_loss: 0.0591 - val_categorical_accuracy: 0.9835 Epoch 154/200 305/305 [==============================] - 4s 13ms/step - loss: 0.0181 - categorical_accuracy: 0.9948 - val_loss: 0.0615 - val_categorical_accuracy: 0.9821 Epoch 155/200 305/305 [==============================] - 4s 12ms/step - loss: 0.0183 - categorical_accuracy: 0.9948 - val_loss: 0.0612 - val_categorical_accuracy: 0.9824 Epoch 156/200 305/305 [==============================] - 4s 13ms/step - loss: 0.0182 - categorical_accuracy: 0.9946 - val_loss: 0.0602 - val_categorical_accuracy: 0.9836 Epoch 157/200 305/305 [==============================] - 4s 13ms/step - loss: 0.0180 - categorical_accuracy: 0.9951 - val_loss: 0.0587 - val_categorical_accuracy: 0.9835 Epoch 158/200 305/305 [==============================] - 4s 13ms/step - loss: 0.0178 - categorical_accuracy: 0.9951 - val_loss: 0.0603 - val_categorical_accuracy: 0.9834 Epoch 159/200 305/305 [==============================] - 4s 13ms/step - loss: 0.0176 - categorical_accuracy: 0.9953 - val_loss: 0.0583 - val_categorical_accuracy: 0.9836 Epoch 160/200 305/305 [==============================] - 4s 14ms/step - loss: 0.0172 - categorical_accuracy: 0.9950 - val_loss: 0.0593 - val_categorical_accuracy: 0.9827 Epoch 161/200 305/305 [==============================] - 4s 14ms/step - loss: 0.0172 - categorical_accuracy: 0.9951 - val_loss: 0.0591 - val_categorical_accuracy: 0.9838 Epoch 162/200 305/305 [==============================] - 4s 14ms/step - loss: 0.0169 - categorical_accuracy: 0.9953 - val_loss: 0.0599 - val_categorical_accuracy: 0.9834 Epoch 163/200 305/305 [==============================] - 4s 14ms/step - loss: 0.0166 - categorical_accuracy: 0.9953 - val_loss: 0.0588 - val_categorical_accuracy: 0.9839 Epoch 164/200 305/305 [==============================] - 4s 15ms/step - loss: 0.0168 - categorical_accuracy: 0.9952 - val_loss: 0.0613 - val_categorical_accuracy: 0.9825 Epoch 165/200 305/305 [==============================] - 4s 14ms/step - loss: 0.0166 - categorical_accuracy: 0.9951 - val_loss: 0.0595 - val_categorical_accuracy: 0.9829 Epoch 166/200 305/305 [==============================] - 4s 13ms/step - loss: 0.0162 - categorical_accuracy: 0.9957 - val_loss: 0.0598 - val_categorical_accuracy: 0.9838 Epoch 167/200 305/305 [==============================] - 4s 14ms/step - loss: 0.0160 - categorical_accuracy: 0.9957 - val_loss: 0.0613 - val_categorical_accuracy: 0.9829 Epoch 168/200 305/305 [==============================] - 4s 13ms/step - loss: 0.0161 - categorical_accuracy: 0.9955 - val_loss: 0.0610 - val_categorical_accuracy: 0.9830 Epoch 169/200 305/305 [==============================] - 4s 14ms/step - loss: 0.0158 - categorical_accuracy: 0.9955 - val_loss: 0.0584 - val_categorical_accuracy: 0.9837 Epoch 170/200 305/305 [==============================] - 4s 13ms/step - loss: 0.0158 - categorical_accuracy: 0.9955 - val_loss: 0.0590 - val_categorical_accuracy: 0.9836 Epoch 171/200 305/305 [==============================] - 4s 13ms/step - loss: 0.0156 - categorical_accuracy: 0.9958 - val_loss: 0.0597 - val_categorical_accuracy: 0.9833 Epoch 172/200 305/305 [==============================] - 4s 13ms/step - loss: 0.0156 - categorical_accuracy: 0.9957 - val_loss: 0.0587 - val_categorical_accuracy: 0.9833 Epoch 173/200 305/305 [==============================] - 4s 14ms/step - loss: 0.0153 - categorical_accuracy: 0.9961 - val_loss: 0.0611 - val_categorical_accuracy: 0.9831 Epoch 174/200 305/305 [==============================] - 4s 14ms/step - loss: 0.0151 - categorical_accuracy: 0.9958 - val_loss: 0.0601 - val_categorical_accuracy: 0.9837 Epoch 175/200 305/305 [==============================] - 4s 14ms/step - loss: 0.0152 - categorical_accuracy: 0.9959 - val_loss: 0.0583 - val_categorical_accuracy: 0.9841 Epoch 176/200 305/305 [==============================] - 4s 14ms/step - loss: 0.0146 - categorical_accuracy: 0.9962 - val_loss: 0.0580 - val_categorical_accuracy: 0.9842 Epoch 177/200 305/305 [==============================] - 4s 13ms/step - loss: 0.0149 - categorical_accuracy: 0.9959 - val_loss: 0.0594 - val_categorical_accuracy: 0.9832 Epoch 178/200 305/305 [==============================] - 4s 14ms/step - loss: 0.0146 - categorical_accuracy: 0.9959 - val_loss: 0.0589 - val_categorical_accuracy: 0.9838 Epoch 179/200 305/305 [==============================] - 4s 13ms/step - loss: 0.0142 - categorical_accuracy: 0.9962 - val_loss: 0.0595 - val_categorical_accuracy: 0.9833 Epoch 180/200 305/305 [==============================] - 4s 13ms/step - loss: 0.0143 - categorical_accuracy: 0.9961 - val_loss: 0.0607 - val_categorical_accuracy: 0.9834 Epoch 181/200 305/305 [==============================] - 4s 15ms/step - loss: 0.0142 - categorical_accuracy: 0.9965 - val_loss: 0.0617 - val_categorical_accuracy: 0.9829 Epoch 182/200 305/305 [==============================] - 4s 14ms/step - loss: 0.0142 - categorical_accuracy: 0.9962 - val_loss: 0.0592 - val_categorical_accuracy: 0.9838 Epoch 183/200 305/305 [==============================] - 4s 14ms/step - loss: 0.0139 - categorical_accuracy: 0.9964 - val_loss: 0.0598 - val_categorical_accuracy: 0.9834 Epoch 184/200 305/305 [==============================] - 4s 15ms/step - loss: 0.0138 - categorical_accuracy: 0.9961 - val_loss: 0.0612 - val_categorical_accuracy: 0.9830 Epoch 185/200 305/305 [==============================] - 4s 15ms/step - loss: 0.0135 - categorical_accuracy: 0.9965 - val_loss: 0.0596 - val_categorical_accuracy: 0.9837 Epoch 186/200 305/305 [==============================] - 4s 13ms/step - loss: 0.0136 - categorical_accuracy: 0.9964 - val_loss: 0.0622 - val_categorical_accuracy: 0.9836 Epoch 187/200 305/305 [==============================] - 4s 14ms/step - loss: 0.0135 - categorical_accuracy: 0.9963 - val_loss: 0.0594 - val_categorical_accuracy: 0.9838 Epoch 188/200 305/305 [==============================] - 4s 13ms/step - loss: 0.0131 - categorical_accuracy: 0.9965 - val_loss: 0.0589 - val_categorical_accuracy: 0.9839 Epoch 189/200 305/305 [==============================] - 4s 13ms/step - loss: 0.0128 - categorical_accuracy: 0.9967 - val_loss: 0.0608 - val_categorical_accuracy: 0.9836 Epoch 190/200 305/305 [==============================] - 5s 15ms/step - loss: 0.0127 - categorical_accuracy: 0.9971 - val_loss: 0.0594 - val_categorical_accuracy: 0.9842 Epoch 191/200 305/305 [==============================] - 5s 15ms/step - loss: 0.0129 - categorical_accuracy: 0.9965 - val_loss: 0.0605 - val_categorical_accuracy: 0.9839 Epoch 192/200 305/305 [==============================] - 5s 15ms/step - loss: 0.0125 - categorical_accuracy: 0.9968 - val_loss: 0.0600 - val_categorical_accuracy: 0.9838 Epoch 193/200 305/305 [==============================] - 5s 15ms/step - loss: 0.0126 - categorical_accuracy: 0.9966 - val_loss: 0.0610 - val_categorical_accuracy: 0.9835 Epoch 194/200 305/305 [==============================] - 4s 13ms/step - loss: 0.0124 - categorical_accuracy: 0.9968 - val_loss: 0.0640 - val_categorical_accuracy: 0.9826 Epoch 195/200 305/305 [==============================] - 4s 15ms/step - loss: 0.0124 - categorical_accuracy: 0.9969 - val_loss: 0.0600 - val_categorical_accuracy: 0.9834 Epoch 196/200 305/305 [==============================] - 4s 13ms/step - loss: 0.0121 - categorical_accuracy: 0.9971 - val_loss: 0.0590 - val_categorical_accuracy: 0.9839 Epoch 197/200 305/305 [==============================] - 5s 15ms/step - loss: 0.0121 - categorical_accuracy: 0.9969 - val_loss: 0.0601 - val_categorical_accuracy: 0.9835 Epoch 198/200 305/305 [==============================] - 5s 15ms/step - loss: 0.0120 - categorical_accuracy: 0.9970 - val_loss: 0.0602 - val_categorical_accuracy: 0.9833 Epoch 199/200 305/305 [==============================] - 4s 13ms/step - loss: 0.0117 - categorical_accuracy: 0.9972 - val_loss: 0.0622 - val_categorical_accuracy: 0.9826 Epoch 200/200 305/305 [==============================] - 4s 13ms/step - loss: 0.0117 - categorical_accuracy: 0.9972 - val_loss: 0.0593 - val_categorical_accuracy: 0.9844 1875/1875 [==============================] - 9s 5ms/step - loss: 0.0278 - categorical_accuracy: 0.9930 313/313 [==============================] - 2s 5ms/step - loss: 0.3185 - categorical_accuracy: 0.9875
def plot_metric(model="LeNet-5"):
if model=="LeNet-5":
history = LeNet_history
else:
history = CNN_history
train_acc, train_mse = history.history['categorical_accuracy'], history.history['loss']
val_acc, val_mse = history.history['val_categorical_accuracy'], history.history['val_loss']
epochs = range(1, len(train_acc) + 1)
fig, axes = plt.subplots(ncols=2, nrows=1, figsize=(15, 5))
# 准确率图
axes[0].plot(epochs, train_acc, label='train_acc')
axes[0].plot(epochs, val_acc, label='val_acc')
axes[0].set_title('Training and validation accuracy of ' + model)
axes[0].set_xlabel("Epochs")
axes[0].set_ylabel("Accuracy")
axes[0].legend(loc='lower right')
axes[0].grid(axis="y")
axes[0].grid(axis="x")
# 损失函数图
axes[1].plot(epochs, train_mse, label='train_loss')
axes[1].plot(epochs, val_mse, label='val_loss')
axes[1].set_title('Training and validation loss of ' + model)
axes[1].set_xlabel("Epochs")
axes[1].set_ylabel("Loss")
axes[1].legend(loc='upper right')
axes[1].grid(axis="y")
axes[1].grid(axis="x")
plt.show()
plot_metric('LeNet-5')
plot_metric('CNN')
print('============================================================\n============================================================')
print(f"LeNet-5 train_loss: {LeNet_train_loss:>8f}, LeNet-5 train_accuracy: {LeNet_train_acc:>0.3f}% \n")
print(f"LeNet-5 test_loss: {LeNet_test_loss:>8f}, LeNet-5 test_accuracy: {LeNet_test_acc:>0.3f}% \n")
print('============================================================\n============================================================')
print(f"CNN train_loss: {CNN_train_loss:>8f}, CNN train_accuracy: {CNN_train_acc:>0.3f}% \n")
print(f"CNN test_loss: {CNN_test_loss:>8f}, CNN test_accuracy: {CNN_test_acc:>0.3f}% \n")
============================================================ ============================================================ LeNet-5 train_loss: 0.047393, LeNet-5 train_accuracy: 0.986% LeNet-5 test_loss: 0.156034, LeNet-5 test_accuracy: 0.952% ============================================================ ============================================================ CNN train_loss: 0.027762, CNN train_accuracy: 0.993% CNN test_loss: 0.318460, CNN test_accuracy: 0.988%
LeNet_pred_, CNN_pred_ = np.rint(LeNet_pred), np.rint(CNN_pred)
print("=====================LeNet-5 Classification Report=====================")
print(classification_report(test_labels, LeNet_pred_))
print("=======================CNN Classification Report=======================")
print(classification_report(test_labels, CNN_pred_))
=====================LeNet-5 Classification Report===================== precision recall f1-score support 0 0.99 0.96 0.97 980 1 0.99 0.96 0.98 1135 2 0.88 0.98 0.93 1032 3 0.93 0.98 0.96 1010 4 0.97 0.97 0.97 982 5 0.95 0.96 0.96 892 6 0.98 0.97 0.97 958 7 0.96 0.95 0.95 1028 8 0.98 0.86 0.92 974 9 0.97 0.89 0.93 1009 micro avg 0.96 0.95 0.95 10000 macro avg 0.96 0.95 0.95 10000 weighted avg 0.96 0.95 0.95 10000 samples avg 0.95 0.95 0.95 10000 =======================CNN Classification Report======================= precision recall f1-score support 0 0.98 0.99 0.99 980 1 0.99 1.00 1.00 1135 2 0.99 0.99 0.99 1032 3 0.99 0.98 0.99 1010 4 0.99 1.00 0.99 982 5 0.98 0.98 0.98 892 6 0.99 0.99 0.99 958 7 0.99 0.99 0.99 1028 8 0.98 0.98 0.98 974 9 0.99 0.98 0.98 1009 micro avg 0.99 0.99 0.99 10000 macro avg 0.99 0.99 0.99 10000 weighted avg 0.99 0.99 0.99 10000 samples avg 0.99 0.99 0.99 10000
labels = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
# 生成混淆矩阵
LeNet_cm = confusion_matrix(test_labels.argmax(1), LeNet_pred_.argmax(1))
CNN_cm = confusion_matrix(test_labels.argmax(1), CNN_pred_.argmax(1))
# 绘制混淆矩阵
fig, axes = plt.subplots(ncols=2, nrows=1, figsize=(15, 5))
axes[0].set_title('Confusion matrix of LeNet-5')
axes[1].set_title('Confusion matrix of CNN')
ConfusionMatrixDisplay(LeNet_cm, display_labels=labels).plot(cmap=plt.cm.Blues, ax=axes[0])
ConfusionMatrixDisplay(CNN_cm, display_labels=labels).plot(cmap=plt.cm.Blues, ax=axes[1])
<sklearn.metrics._plot.confusion_matrix.ConfusionMatrixDisplay at 0x7f12ba4fa290>