форкнуто от main/is_dnn
Вы не можете выбрать более 25 тем
Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
513 KiB
513 KiB
import os
os.chdir('/content/drive/MyDrive/Colab Notebooks')# импорт модулей
from tensorflow import keras
import matplotlib.pyplot as plt
import numpy as np
import sklearn# загрузка датасета
from keras.datasets import mnist
(X_train, y_train), (X_test, y_test) = mnist.load_data()Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/mnist.npz
11490434/11490434 ━━━━━━━━━━━━━━━━━━━━ 2s 0us/step
# создание своего разбиения датасета
from sklearn.model_selection import train_test_split# объединяем в один набор
X = np.concatenate((X_train, X_test))
y = np.concatenate((y_train, y_test))# разбиваем по вариантам
X_train, X_test, y_train, y_test = train_test_split(X, y,
test_size = 10000,
train_size = 60000,
random_state = 27)# вывод размерностей
print('Shape of X train:', X_train.shape)
print('Shape of y train:', y_train.shape)Shape of X train: (60000, 28, 28)
Shape of y train: (60000,)
# Создаем subplot для 4 изображений
fig, axes = plt.subplots(1, 4, figsize=(10, 3))
for i in range(4):
axes[i].imshow(X_train[i], cmap=plt.get_cmap('gray'))
axes[i].set_title(f'Label: {y_train[i]}')
# Добавляем метку как заголовок
plt.show()# развернем каждое изображение 28*28 в вектор 784
num_pixels = X_train.shape[1] * X_train.shape[2]
X_train = X_train.reshape(X_train.shape[0], num_pixels) / 255
X_test = X_test.reshape(X_test.shape[0], num_pixels) / 255
print('Shape of transformed X train:', X_train.shape)Shape of transformed X train: (60000, 784)
# переведем метки в one-hot
from keras.utils import to_categorical
y_train = to_categorical(y_train)
y_test = to_categorical(y_test)
print('Shape of transformed y train:', y_train.shape)
num_classes = y_train.shape[1]Shape of transformed y train: (60000, 10)
from keras.models import Sequential
from keras.layers import Densemodel_1 = Sequential()
model_1.add(Dense(units=num_classes,input_dim=num_pixels, activation='softmax'))/usr/local/lib/python3.12/dist-packages/keras/src/layers/core/dense.py:93: UserWarning: Do not pass an `input_shape`/`input_dim` argument to a layer. When using Sequential models, prefer using an `Input(shape)` object as the first layer in the model instead.
super().__init__(activity_regularizer=activity_regularizer, **kwargs)
model_1.compile(loss='categorical_crossentropy', optimizer='sgd', metrics=['accuracy'])
print("Архитектура нейронной сети:")
model_1.summary()Архитектура нейронной сети:
Model: "sequential"
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓ ┃ Layer (type) ┃ Output Shape ┃ Param # ┃ ┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩ │ dense (Dense) │ (None, 10) │ 7,850 │ └─────────────────────────────────┴────────────────────────┴───────────────┘
Total params: 7,850 (30.66 KB)
Trainable params: 7,850 (30.66 KB)
Non-trainable params: 0 (0.00 B)
# Обучаем модель
history = model_1.fit(
X_train, y_train,
validation_split=0.1,
epochs=50
)Epoch 1/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.7168 - loss: 1.1499 - val_accuracy: 0.8695 - val_loss: 0.5093
Epoch 2/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.8763 - loss: 0.4841 - val_accuracy: 0.8858 - val_loss: 0.4226
Epoch 3/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.8890 - loss: 0.4170 - val_accuracy: 0.8953 - val_loss: 0.3855
Epoch 4/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 3ms/step - accuracy: 0.8923 - loss: 0.3911 - val_accuracy: 0.8990 - val_loss: 0.3649
Epoch 5/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.8989 - loss: 0.3692 - val_accuracy: 0.9032 - val_loss: 0.3503
Epoch 6/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9034 - loss: 0.3525 - val_accuracy: 0.9055 - val_loss: 0.3410
Epoch 7/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9026 - loss: 0.3452 - val_accuracy: 0.9080 - val_loss: 0.3325
Epoch 8/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9063 - loss: 0.3369 - val_accuracy: 0.9087 - val_loss: 0.3263
Epoch 9/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9084 - loss: 0.3280 - val_accuracy: 0.9112 - val_loss: 0.3212
Epoch 10/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9097 - loss: 0.3235 - val_accuracy: 0.9123 - val_loss: 0.3169
Epoch 11/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9092 - loss: 0.3218 - val_accuracy: 0.9127 - val_loss: 0.3130
Epoch 12/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9105 - loss: 0.3134 - val_accuracy: 0.9142 - val_loss: 0.3089
Epoch 13/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9136 - loss: 0.3088 - val_accuracy: 0.9142 - val_loss: 0.3076
Epoch 14/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9143 - loss: 0.3086 - val_accuracy: 0.9160 - val_loss: 0.3041
Epoch 15/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9145 - loss: 0.3049 - val_accuracy: 0.9152 - val_loss: 0.3016
Epoch 16/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 2ms/step - accuracy: 0.9159 - loss: 0.3041 - val_accuracy: 0.9157 - val_loss: 0.2994
Epoch 17/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9171 - loss: 0.2976 - val_accuracy: 0.9143 - val_loss: 0.2982
Epoch 18/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9144 - loss: 0.3051 - val_accuracy: 0.9168 - val_loss: 0.2964
Epoch 19/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9173 - loss: 0.3012 - val_accuracy: 0.9173 - val_loss: 0.2954
Epoch 20/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9165 - loss: 0.2982 - val_accuracy: 0.9168 - val_loss: 0.2945
Epoch 21/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9175 - loss: 0.2946 - val_accuracy: 0.9172 - val_loss: 0.2934
Epoch 22/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9174 - loss: 0.2937 - val_accuracy: 0.9172 - val_loss: 0.2911
Epoch 23/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9191 - loss: 0.2884 - val_accuracy: 0.9173 - val_loss: 0.2912
Epoch 24/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9196 - loss: 0.2908 - val_accuracy: 0.9162 - val_loss: 0.2890
Epoch 25/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9191 - loss: 0.2870 - val_accuracy: 0.9183 - val_loss: 0.2886
Epoch 26/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9193 - loss: 0.2891 - val_accuracy: 0.9187 - val_loss: 0.2881
Epoch 27/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9194 - loss: 0.2837 - val_accuracy: 0.9182 - val_loss: 0.2867
Epoch 28/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9195 - loss: 0.2867 - val_accuracy: 0.9187 - val_loss: 0.2862
Epoch 29/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9217 - loss: 0.2817 - val_accuracy: 0.9182 - val_loss: 0.2856
Epoch 30/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9229 - loss: 0.2757 - val_accuracy: 0.9178 - val_loss: 0.2850
Epoch 31/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9195 - loss: 0.2809 - val_accuracy: 0.9180 - val_loss: 0.2847
Epoch 32/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9213 - loss: 0.2825 - val_accuracy: 0.9193 - val_loss: 0.2838
Epoch 33/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9216 - loss: 0.2822 - val_accuracy: 0.9197 - val_loss: 0.2832
Epoch 34/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9232 - loss: 0.2757 - val_accuracy: 0.9202 - val_loss: 0.2823
Epoch 35/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9207 - loss: 0.2836 - val_accuracy: 0.9197 - val_loss: 0.2822
Epoch 36/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9220 - loss: 0.2791 - val_accuracy: 0.9192 - val_loss: 0.2823
Epoch 37/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9215 - loss: 0.2777 - val_accuracy: 0.9173 - val_loss: 0.2824
Epoch 38/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9238 - loss: 0.2752 - val_accuracy: 0.9180 - val_loss: 0.2809
Epoch 39/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9250 - loss: 0.2707 - val_accuracy: 0.9200 - val_loss: 0.2809
Epoch 40/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9228 - loss: 0.2783 - val_accuracy: 0.9188 - val_loss: 0.2807
Epoch 41/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9251 - loss: 0.2679 - val_accuracy: 0.9198 - val_loss: 0.2806
Epoch 42/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9235 - loss: 0.2774 - val_accuracy: 0.9188 - val_loss: 0.2797
Epoch 43/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9225 - loss: 0.2772 - val_accuracy: 0.9198 - val_loss: 0.2791
Epoch 44/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 3ms/step - accuracy: 0.9240 - loss: 0.2749 - val_accuracy: 0.9193 - val_loss: 0.2791
Epoch 45/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9265 - loss: 0.2666 - val_accuracy: 0.9197 - val_loss: 0.2786
Epoch 46/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9246 - loss: 0.2747 - val_accuracy: 0.9198 - val_loss: 0.2786
Epoch 47/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9239 - loss: 0.2721 - val_accuracy: 0.9193 - val_loss: 0.2783
Epoch 48/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9224 - loss: 0.2779 - val_accuracy: 0.9200 - val_loss: 0.2787
Epoch 49/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 7s 4ms/step - accuracy: 0.9233 - loss: 0.2755 - val_accuracy: 0.9203 - val_loss: 0.2778
Epoch 50/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 9s 5ms/step - accuracy: 0.9247 - loss: 0.2684 - val_accuracy: 0.9182 - val_loss: 0.2778
# Выводим график функции ошибки
plt.figure(figsize=(12, 5))
plt.subplot(1, 2, 1)
plt.plot(history.history['loss'], label='Обучающая ошибка')
plt.plot(history.history['val_loss'], label='Валидационная ошибка')
plt.title('Функция ошибки по эпохам')
plt.xlabel('Эпохи')
plt.ylabel('Categorical Crossentropy')
plt.legend()
plt.grid(True)
scores=model_1.evaluate(X_test,y_test)
print('Lossontestdata:',scores[0])
print('Accuracyontestdata:',scores[1])313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 3ms/step - accuracy: 0.9206 - loss: 0.2956
Lossontestdata: 0.2900226414203644
Accuracyontestdata: 0.9222000241279602
#Пункт 8
model_2l_100 = Sequential()
model_2l_100.add(Dense(units=100,input_dim=num_pixels, activation='sigmoid'))
model_2l_100.add(Dense(units=num_classes, activation='softmax'))
# 2. компилируем модель
model_2l_100.compile(loss='categorical_crossentropy', optimizer='sgd', metrics=['accuracy'])print("Архитектура нейронной сети:")
model_2l_100.summary()Архитектура нейронной сети:
Model: "sequential_1"
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓ ┃ Layer (type) ┃ Output Shape ┃ Param # ┃ ┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩ │ dense_1 (Dense) │ (None, 100) │ 78,500 │ ├─────────────────────────────────┼────────────────────────┼───────────────┤ │ dense_2 (Dense) │ (None, 10) │ 1,010 │ └─────────────────────────────────┴────────────────────────┴───────────────┘
Total params: 79,510 (310.59 KB)
Trainable params: 79,510 (310.59 KB)
Non-trainable params: 0 (0.00 B)
# Обучаем модель
history_2l_100 = model_2l_100.fit(
X_train, y_train,
validation_split=0.1,
epochs=50
)Epoch 1/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.5185 - loss: 1.9076 - val_accuracy: 0.8188 - val_loss: 0.9700
Epoch 2/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.8349 - loss: 0.8532 - val_accuracy: 0.8565 - val_loss: 0.6222
Epoch 3/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.8649 - loss: 0.5911 - val_accuracy: 0.8718 - val_loss: 0.4999
Epoch 4/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.8795 - loss: 0.4889 - val_accuracy: 0.8837 - val_loss: 0.4374
Epoch 5/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.8879 - loss: 0.4305 - val_accuracy: 0.8913 - val_loss: 0.4000
Epoch 6/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.8955 - loss: 0.3942 - val_accuracy: 0.8972 - val_loss: 0.3744
Epoch 7/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.8999 - loss: 0.3707 - val_accuracy: 0.9007 - val_loss: 0.3557
Epoch 8/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9011 - loss: 0.3581 - val_accuracy: 0.9047 - val_loss: 0.3405
Epoch 9/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9034 - loss: 0.3444 - val_accuracy: 0.9067 - val_loss: 0.3298
Epoch 10/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9057 - loss: 0.3285 - val_accuracy: 0.9110 - val_loss: 0.3196
Epoch 11/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9096 - loss: 0.3217 - val_accuracy: 0.9142 - val_loss: 0.3112
Epoch 12/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9111 - loss: 0.3150 - val_accuracy: 0.9152 - val_loss: 0.3043
Epoch 13/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9138 - loss: 0.3049 - val_accuracy: 0.9148 - val_loss: 0.2976
Epoch 14/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9160 - loss: 0.2993 - val_accuracy: 0.9172 - val_loss: 0.2920
Epoch 15/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9176 - loss: 0.2897 - val_accuracy: 0.9162 - val_loss: 0.2876
Epoch 16/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9175 - loss: 0.2886 - val_accuracy: 0.9197 - val_loss: 0.2811
Epoch 17/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9203 - loss: 0.2774 - val_accuracy: 0.9208 - val_loss: 0.2774
Epoch 18/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9189 - loss: 0.2852 - val_accuracy: 0.9228 - val_loss: 0.2725
Epoch 19/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9194 - loss: 0.2757 - val_accuracy: 0.9225 - val_loss: 0.2685
Epoch 20/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9221 - loss: 0.2701 - val_accuracy: 0.9242 - val_loss: 0.2651
Epoch 21/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9230 - loss: 0.2631 - val_accuracy: 0.9257 - val_loss: 0.2615
Epoch 22/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9260 - loss: 0.2609 - val_accuracy: 0.9270 - val_loss: 0.2578
Epoch 23/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9261 - loss: 0.2607 - val_accuracy: 0.9275 - val_loss: 0.2545
Epoch 24/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 3ms/step - accuracy: 0.9262 - loss: 0.2595 - val_accuracy: 0.9288 - val_loss: 0.2509
Epoch 25/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 3ms/step - accuracy: 0.9269 - loss: 0.2580 - val_accuracy: 0.9292 - val_loss: 0.2482
Epoch 26/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9303 - loss: 0.2420 - val_accuracy: 0.9298 - val_loss: 0.2447
Epoch 27/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 3ms/step - accuracy: 0.9322 - loss: 0.2410 - val_accuracy: 0.9303 - val_loss: 0.2412
Epoch 28/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9324 - loss: 0.2404 - val_accuracy: 0.9313 - val_loss: 0.2386
Epoch 29/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9341 - loss: 0.2307 - val_accuracy: 0.9308 - val_loss: 0.2359
Epoch 30/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9303 - loss: 0.2417 - val_accuracy: 0.9323 - val_loss: 0.2333
Epoch 31/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9342 - loss: 0.2315 - val_accuracy: 0.9330 - val_loss: 0.2305
Epoch 32/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9342 - loss: 0.2296 - val_accuracy: 0.9333 - val_loss: 0.2279
Epoch 33/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9357 - loss: 0.2289 - val_accuracy: 0.9340 - val_loss: 0.2257
Epoch 34/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9378 - loss: 0.2179 - val_accuracy: 0.9347 - val_loss: 0.2230
Epoch 35/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 3ms/step - accuracy: 0.9379 - loss: 0.2208 - val_accuracy: 0.9358 - val_loss: 0.2216
Epoch 36/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 3ms/step - accuracy: 0.9375 - loss: 0.2193 - val_accuracy: 0.9365 - val_loss: 0.2182
Epoch 37/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9362 - loss: 0.2210 - val_accuracy: 0.9373 - val_loss: 0.2165
Epoch 38/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9401 - loss: 0.2116 - val_accuracy: 0.9375 - val_loss: 0.2143
Epoch 39/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 3ms/step - accuracy: 0.9411 - loss: 0.2100 - val_accuracy: 0.9385 - val_loss: 0.2121
Epoch 40/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9402 - loss: 0.2093 - val_accuracy: 0.9385 - val_loss: 0.2098
Epoch 41/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9417 - loss: 0.2065 - val_accuracy: 0.9405 - val_loss: 0.2083
Epoch 42/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 3ms/step - accuracy: 0.9413 - loss: 0.2075 - val_accuracy: 0.9398 - val_loss: 0.2063
Epoch 43/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9426 - loss: 0.2033 - val_accuracy: 0.9407 - val_loss: 0.2047
Epoch 44/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9448 - loss: 0.2010 - val_accuracy: 0.9418 - val_loss: 0.2028
Epoch 45/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 3ms/step - accuracy: 0.9448 - loss: 0.1964 - val_accuracy: 0.9412 - val_loss: 0.2012
Epoch 46/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9443 - loss: 0.1986 - val_accuracy: 0.9417 - val_loss: 0.1992
Epoch 47/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9445 - loss: 0.1920 - val_accuracy: 0.9418 - val_loss: 0.1972
Epoch 48/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9451 - loss: 0.1891 - val_accuracy: 0.9428 - val_loss: 0.1954
Epoch 49/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9463 - loss: 0.1912 - val_accuracy: 0.9433 - val_loss: 0.1941
Epoch 50/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9456 - loss: 0.1900 - val_accuracy: 0.9433 - val_loss: 0.1923
# Выводим график функции ошибки
plt.figure(figsize=(12, 5))
plt.subplot(1, 2, 1)
plt.plot(history_2l_100.history['loss'], label='Обучающая ошибка')
plt.plot(history_2l_100.history['val_loss'], label='Валидационная ошибка')
plt.title('Функция ошибки по эпохам')
plt.xlabel('Эпохи')
plt.ylabel('Categorical Crossentropy')
plt.legend()
plt.grid(True)
scores_2l_100=model_2l_100.evaluate(X_test,y_test)
print('Lossontestdata:',scores_2l_100[0])
print('Accuracyontestdata:',scores_2l_100[1])313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 2ms/step - accuracy: 0.9436 - loss: 0.2091
Lossontestdata: 0.20427274703979492
Accuracyontestdata: 0.9438999891281128
#Пункт 8
model_2l_300 = Sequential()
model_2l_300.add(Dense(units=300,input_dim=num_pixels, activation='sigmoid'))
model_2l_300.add(Dense(units=num_classes, activation='softmax'))
# 2. компилируем модель
model_2l_300.compile(loss='categorical_crossentropy', optimizer='sgd', metrics=['accuracy'])print("Архитектура нейронной сети:")
model_2l_300.summary()Архитектура нейронной сети:
Model: "sequential_3"
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓ ┃ Layer (type) ┃ Output Shape ┃ Param # ┃ ┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩ │ dense_5 (Dense) │ (None, 300) │ 235,500 │ ├─────────────────────────────────┼────────────────────────┼───────────────┤ │ dense_6 (Dense) │ (None, 10) │ 3,010 │ └─────────────────────────────────┴────────────────────────┴───────────────┘
Total params: 238,510 (931.68 KB)
Trainable params: 238,510 (931.68 KB)
Non-trainable params: 0 (0.00 B)
# Обучаем модель
history_2l_300 = model_2l_300.fit(
X_train, y_train,
validation_split=0.1,
epochs=50
)Epoch 1/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 7s 4ms/step - accuracy: 0.5528 - loss: 1.7901 - val_accuracy: 0.8203 - val_loss: 0.8592
Epoch 2/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.8386 - loss: 0.7584 - val_accuracy: 0.8618 - val_loss: 0.5684
Epoch 3/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.8667 - loss: 0.5470 - val_accuracy: 0.8748 - val_loss: 0.4692
Epoch 4/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.8820 - loss: 0.4562 - val_accuracy: 0.8857 - val_loss: 0.4180
Epoch 5/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.8882 - loss: 0.4171 - val_accuracy: 0.8907 - val_loss: 0.3849
Epoch 6/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.8947 - loss: 0.3853 - val_accuracy: 0.8945 - val_loss: 0.3657
Epoch 7/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.8986 - loss: 0.3605 - val_accuracy: 0.9007 - val_loss: 0.3484
Epoch 8/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9029 - loss: 0.3491 - val_accuracy: 0.9048 - val_loss: 0.3384
Epoch 9/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9011 - loss: 0.3418 - val_accuracy: 0.9040 - val_loss: 0.3294
Epoch 10/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9073 - loss: 0.3307 - val_accuracy: 0.9077 - val_loss: 0.3223
Epoch 11/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 3ms/step - accuracy: 0.9055 - loss: 0.3271 - val_accuracy: 0.9077 - val_loss: 0.3149
Epoch 12/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9073 - loss: 0.3190 - val_accuracy: 0.9125 - val_loss: 0.3084
Epoch 13/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 3ms/step - accuracy: 0.9110 - loss: 0.3118 - val_accuracy: 0.9113 - val_loss: 0.3046
Epoch 14/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 3ms/step - accuracy: 0.9113 - loss: 0.3054 - val_accuracy: 0.9127 - val_loss: 0.2996
Epoch 15/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9119 - loss: 0.3018 - val_accuracy: 0.9138 - val_loss: 0.2966
Epoch 16/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9160 - loss: 0.2951 - val_accuracy: 0.9143 - val_loss: 0.2926
Epoch 17/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9143 - loss: 0.2991 - val_accuracy: 0.9162 - val_loss: 0.2902
Epoch 18/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9160 - loss: 0.2885 - val_accuracy: 0.9165 - val_loss: 0.2859
Epoch 19/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9159 - loss: 0.2888 - val_accuracy: 0.9160 - val_loss: 0.2831
Epoch 20/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9192 - loss: 0.2835 - val_accuracy: 0.9158 - val_loss: 0.2805
Epoch 21/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9190 - loss: 0.2817 - val_accuracy: 0.9178 - val_loss: 0.2783
Epoch 22/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9207 - loss: 0.2744 - val_accuracy: 0.9182 - val_loss: 0.2753
Epoch 23/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9218 - loss: 0.2724 - val_accuracy: 0.9188 - val_loss: 0.2742
Epoch 24/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9221 - loss: 0.2702 - val_accuracy: 0.9198 - val_loss: 0.2709
Epoch 25/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9216 - loss: 0.2714 - val_accuracy: 0.9182 - val_loss: 0.2692
Epoch 26/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9245 - loss: 0.2650 - val_accuracy: 0.9217 - val_loss: 0.2665
Epoch 27/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9237 - loss: 0.2650 - val_accuracy: 0.9228 - val_loss: 0.2638
Epoch 28/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9258 - loss: 0.2602 - val_accuracy: 0.9228 - val_loss: 0.2619
Epoch 29/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9253 - loss: 0.2593 - val_accuracy: 0.9222 - val_loss: 0.2608
Epoch 30/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9264 - loss: 0.2600 - val_accuracy: 0.9240 - val_loss: 0.2580
Epoch 31/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9278 - loss: 0.2537 - val_accuracy: 0.9230 - val_loss: 0.2575
Epoch 32/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9284 - loss: 0.2526 - val_accuracy: 0.9247 - val_loss: 0.2552
Epoch 33/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9283 - loss: 0.2503 - val_accuracy: 0.9252 - val_loss: 0.2511
Epoch 34/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9291 - loss: 0.2496 - val_accuracy: 0.9250 - val_loss: 0.2509
Epoch 35/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9318 - loss: 0.2444 - val_accuracy: 0.9260 - val_loss: 0.2484
Epoch 36/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9291 - loss: 0.2486 - val_accuracy: 0.9273 - val_loss: 0.2452
Epoch 37/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9304 - loss: 0.2447 - val_accuracy: 0.9287 - val_loss: 0.2437
Epoch 38/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9321 - loss: 0.2355 - val_accuracy: 0.9260 - val_loss: 0.2446
Epoch 39/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9335 - loss: 0.2358 - val_accuracy: 0.9287 - val_loss: 0.2413
Epoch 40/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9337 - loss: 0.2346 - val_accuracy: 0.9288 - val_loss: 0.2369
Epoch 41/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9326 - loss: 0.2387 - val_accuracy: 0.9283 - val_loss: 0.2371
Epoch 42/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9327 - loss: 0.2357 - val_accuracy: 0.9285 - val_loss: 0.2347
Epoch 43/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9345 - loss: 0.2281 - val_accuracy: 0.9290 - val_loss: 0.2327
Epoch 44/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9366 - loss: 0.2256 - val_accuracy: 0.9308 - val_loss: 0.2319
Epoch 45/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9359 - loss: 0.2239 - val_accuracy: 0.9307 - val_loss: 0.2287
Epoch 46/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9377 - loss: 0.2224 - val_accuracy: 0.9320 - val_loss: 0.2273
Epoch 47/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9373 - loss: 0.2172 - val_accuracy: 0.9335 - val_loss: 0.2260
Epoch 48/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9371 - loss: 0.2191 - val_accuracy: 0.9335 - val_loss: 0.2238
Epoch 49/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9378 - loss: 0.2159 - val_accuracy: 0.9342 - val_loss: 0.2205
Epoch 50/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9395 - loss: 0.2136 - val_accuracy: 0.9347 - val_loss: 0.2197
# Выводим график функции ошибки
plt.figure(figsize=(12, 5))
plt.subplot(1, 2, 1)
plt.plot(history_2l_300.history['loss'], label='Обучающая ошибка')
plt.plot(history_2l_300.history['val_loss'], label='Валидационная ошибка')
plt.title('Функция ошибки по эпохам')
plt.xlabel('Эпохи')
plt.ylabel('Categorical Crossentropy')
plt.legend()
plt.grid(True)
scores_2l_300=model_2l_300.evaluate(X_test,y_test)
print('Lossontestdata:',scores_2l_300[0])
print('Accuracyontestdata:',scores_2l_300[1])313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 2ms/step - accuracy: 0.9365 - loss: 0.2352
Lossontestdata: 0.23040874302387238
Accuracyontestdata: 0.9372000098228455
#Пункт 8
model_2l_500 = Sequential()
model_2l_500.add(Dense(units=500,input_dim=num_pixels, activation='sigmoid'))
model_2l_500.add(Dense(units=num_classes, activation='softmax'))
# 2. компилируем модель
model_2l_500.compile(loss='categorical_crossentropy', optimizer='sgd', metrics=['accuracy'])print("Архитектура нейронной сети:")
model_2l_500.summary()Архитектура нейронной сети:
Model: "sequential_4"
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓ ┃ Layer (type) ┃ Output Shape ┃ Param # ┃ ┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩ │ dense_7 (Dense) │ (None, 500) │ 392,500 │ ├─────────────────────────────────┼────────────────────────┼───────────────┤ │ dense_8 (Dense) │ (None, 10) │ 5,010 │ └─────────────────────────────────┴────────────────────────┴───────────────┘
Total params: 397,510 (1.52 MB)
Trainable params: 397,510 (1.52 MB)
Non-trainable params: 0 (0.00 B)
# Обучаем модель
history_2l_500 = model_2l_500.fit(
X_train, y_train,
validation_split=0.1,
epochs=50
)Epoch 1/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.5493 - loss: 1.7652 - val_accuracy: 0.8298 - val_loss: 0.8146
Epoch 2/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.8435 - loss: 0.7186 - val_accuracy: 0.8608 - val_loss: 0.5514
Epoch 3/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.8698 - loss: 0.5216 - val_accuracy: 0.8768 - val_loss: 0.4572
Epoch 4/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.8831 - loss: 0.4475 - val_accuracy: 0.8865 - val_loss: 0.4084
Epoch 5/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.8879 - loss: 0.4108 - val_accuracy: 0.8918 - val_loss: 0.3823
Epoch 6/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.8930 - loss: 0.3828 - val_accuracy: 0.8972 - val_loss: 0.3626
Epoch 7/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.8983 - loss: 0.3595 - val_accuracy: 0.9015 - val_loss: 0.3486
Epoch 8/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9001 - loss: 0.3542 - val_accuracy: 0.9023 - val_loss: 0.3385
Epoch 9/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9007 - loss: 0.3479 - val_accuracy: 0.9048 - val_loss: 0.3280
Epoch 10/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9042 - loss: 0.3333 - val_accuracy: 0.9060 - val_loss: 0.3242
Epoch 11/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9067 - loss: 0.3251 - val_accuracy: 0.9077 - val_loss: 0.3177
Epoch 12/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9089 - loss: 0.3189 - val_accuracy: 0.9093 - val_loss: 0.3119
Epoch 13/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9082 - loss: 0.3227 - val_accuracy: 0.9117 - val_loss: 0.3078
Epoch 14/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9119 - loss: 0.3072 - val_accuracy: 0.9123 - val_loss: 0.3037
Epoch 15/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9122 - loss: 0.3064 - val_accuracy: 0.9107 - val_loss: 0.3013
Epoch 16/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9133 - loss: 0.3014 - val_accuracy: 0.9138 - val_loss: 0.2988
Epoch 17/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9133 - loss: 0.3027 - val_accuracy: 0.9152 - val_loss: 0.2962
Epoch 18/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9147 - loss: 0.2972 - val_accuracy: 0.9170 - val_loss: 0.2914
Epoch 19/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9154 - loss: 0.2965 - val_accuracy: 0.9145 - val_loss: 0.2898
Epoch 20/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9179 - loss: 0.2874 - val_accuracy: 0.9163 - val_loss: 0.2878
Epoch 21/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 3ms/step - accuracy: 0.9170 - loss: 0.2921 - val_accuracy: 0.9165 - val_loss: 0.2874
Epoch 22/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9187 - loss: 0.2833 - val_accuracy: 0.9163 - val_loss: 0.2845
Epoch 23/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 3ms/step - accuracy: 0.9192 - loss: 0.2845 - val_accuracy: 0.9167 - val_loss: 0.2810
Epoch 24/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 3ms/step - accuracy: 0.9198 - loss: 0.2798 - val_accuracy: 0.9158 - val_loss: 0.2819
Epoch 25/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9196 - loss: 0.2829 - val_accuracy: 0.9180 - val_loss: 0.2782
Epoch 26/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9215 - loss: 0.2812 - val_accuracy: 0.9168 - val_loss: 0.2774
Epoch 27/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9220 - loss: 0.2716 - val_accuracy: 0.9175 - val_loss: 0.2754
Epoch 28/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9220 - loss: 0.2714 - val_accuracy: 0.9198 - val_loss: 0.2750
Epoch 29/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9221 - loss: 0.2716 - val_accuracy: 0.9190 - val_loss: 0.2739
Epoch 30/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9246 - loss: 0.2690 - val_accuracy: 0.9197 - val_loss: 0.2717
Epoch 31/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9223 - loss: 0.2720 - val_accuracy: 0.9217 - val_loss: 0.2701
Epoch 32/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9244 - loss: 0.2632 - val_accuracy: 0.9203 - val_loss: 0.2682
Epoch 33/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9252 - loss: 0.2610 - val_accuracy: 0.9222 - val_loss: 0.2680
Epoch 34/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9247 - loss: 0.2616 - val_accuracy: 0.9205 - val_loss: 0.2654
Epoch 35/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9262 - loss: 0.2621 - val_accuracy: 0.9215 - val_loss: 0.2641
Epoch 36/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9266 - loss: 0.2599 - val_accuracy: 0.9217 - val_loss: 0.2626
Epoch 37/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9273 - loss: 0.2577 - val_accuracy: 0.9230 - val_loss: 0.2596
Epoch 38/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9268 - loss: 0.2608 - val_accuracy: 0.9223 - val_loss: 0.2588
Epoch 39/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9266 - loss: 0.2571 - val_accuracy: 0.9230 - val_loss: 0.2577
Epoch 40/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9263 - loss: 0.2576 - val_accuracy: 0.9247 - val_loss: 0.2567
Epoch 41/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9295 - loss: 0.2481 - val_accuracy: 0.9270 - val_loss: 0.2543
Epoch 42/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9297 - loss: 0.2504 - val_accuracy: 0.9253 - val_loss: 0.2534
Epoch 43/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9313 - loss: 0.2430 - val_accuracy: 0.9253 - val_loss: 0.2528
Epoch 44/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9288 - loss: 0.2501 - val_accuracy: 0.9250 - val_loss: 0.2502
Epoch 45/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9312 - loss: 0.2430 - val_accuracy: 0.9275 - val_loss: 0.2470
Epoch 46/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9310 - loss: 0.2461 - val_accuracy: 0.9250 - val_loss: 0.2479
Epoch 47/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9311 - loss: 0.2470 - val_accuracy: 0.9272 - val_loss: 0.2445
Epoch 48/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9308 - loss: 0.2468 - val_accuracy: 0.9280 - val_loss: 0.2432
Epoch 49/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9310 - loss: 0.2396 - val_accuracy: 0.9277 - val_loss: 0.2417
Epoch 50/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9335 - loss: 0.2354 - val_accuracy: 0.9285 - val_loss: 0.2419
# Выводим график функции ошибки
plt.figure(figsize=(12, 5))
plt.subplot(1, 2, 1)
plt.plot(history_2l_500.history['loss'], label='Обучающая ошибка')
plt.plot(history_2l_500.history['val_loss'], label='Валидационная ошибка')
plt.title('Функция ошибки по эпохам')
plt.xlabel('Эпохи')
plt.ylabel('Categorical Crossentropy')
plt.legend()
plt.grid(True)
scores_2l_500=model_2l_500.evaluate(X_test,y_test)
print('Lossontestdata:',scores_2l_500[0])
print('Accuracyontestdata:',scores_2l_500[1])313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 2ms/step - accuracy: 0.9290 - loss: 0.2572
Lossontestdata: 0.25275251269340515
Accuracyontestdata: 0.9301000237464905
Лучшая метрика - Accuracyontestdata : 0.9438999891281128, при архитектуре со 100 нейронами.
#9 пункт
model_3l_100_50 = Sequential()
model_3l_100_50.add(Dense(units=100, input_dim=num_pixels, activation='sigmoid'))
model_3l_100_50.add(Dense(units=50, activation='sigmoid'))
model_3l_100_50.add(Dense(units=num_classes, activation='softmax'))
model_3l_100_50.compile(loss='categorical_crossentropy', optimizer='sgd', metrics=['accuracy'])print("Архитектура нейронной сети:")
model_3l_100_50.summary()Архитектура нейронной сети:
Model: "sequential_5"
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓ ┃ Layer (type) ┃ Output Shape ┃ Param # ┃ ┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩ │ dense_9 (Dense) │ (None, 100) │ 78,500 │ ├─────────────────────────────────┼────────────────────────┼───────────────┤ │ dense_10 (Dense) │ (None, 50) │ 5,050 │ ├─────────────────────────────────┼────────────────────────┼───────────────┤ │ dense_11 (Dense) │ (None, 10) │ 510 │ └─────────────────────────────────┴────────────────────────┴───────────────┘
Total params: 84,060 (328.36 KB)
Trainable params: 84,060 (328.36 KB)
Non-trainable params: 0 (0.00 B)
# Обучаем модель
history_3l_100_50 = model_3l_100_50.fit(
X_train, y_train,
validation_split=0.1,
epochs=50
)Epoch 1/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 7s 3ms/step - accuracy: 0.2184 - loss: 2.2653 - val_accuracy: 0.4402 - val_loss: 2.0564
Epoch 2/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.5373 - loss: 1.9305 - val_accuracy: 0.6475 - val_loss: 1.4814
Epoch 3/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.6621 - loss: 1.3505 - val_accuracy: 0.7543 - val_loss: 1.0269
Epoch 4/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.7630 - loss: 0.9652 - val_accuracy: 0.8047 - val_loss: 0.7883
Epoch 5/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.8158 - loss: 0.7571 - val_accuracy: 0.8412 - val_loss: 0.6438
Epoch 6/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.8455 - loss: 0.6224 - val_accuracy: 0.8575 - val_loss: 0.5530
Epoch 7/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.8636 - loss: 0.5428 - val_accuracy: 0.8652 - val_loss: 0.4939
Epoch 8/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.8749 - loss: 0.4841 - val_accuracy: 0.8773 - val_loss: 0.4487
Epoch 9/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.8809 - loss: 0.4496 - val_accuracy: 0.8850 - val_loss: 0.4174
Epoch 10/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.8883 - loss: 0.4151 - val_accuracy: 0.8903 - val_loss: 0.3935
Epoch 11/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.8935 - loss: 0.3920 - val_accuracy: 0.8973 - val_loss: 0.3757
Epoch 12/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.8959 - loss: 0.3821 - val_accuracy: 0.9000 - val_loss: 0.3597
Epoch 13/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 2ms/step - accuracy: 0.9008 - loss: 0.3563 - val_accuracy: 0.9027 - val_loss: 0.3473
Epoch 14/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9018 - loss: 0.3480 - val_accuracy: 0.9038 - val_loss: 0.3370
Epoch 15/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9057 - loss: 0.3381 - val_accuracy: 0.9048 - val_loss: 0.3282
Epoch 16/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 3ms/step - accuracy: 0.9060 - loss: 0.3279 - val_accuracy: 0.9077 - val_loss: 0.3197
Epoch 17/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9070 - loss: 0.3260 - val_accuracy: 0.9090 - val_loss: 0.3124
Epoch 18/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9082 - loss: 0.3208 - val_accuracy: 0.9093 - val_loss: 0.3056
Epoch 19/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 3ms/step - accuracy: 0.9121 - loss: 0.3049 - val_accuracy: 0.9112 - val_loss: 0.2994
Epoch 20/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9136 - loss: 0.2994 - val_accuracy: 0.9128 - val_loss: 0.2937
Epoch 21/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9125 - loss: 0.3029 - val_accuracy: 0.9128 - val_loss: 0.2895
Epoch 22/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9147 - loss: 0.2911 - val_accuracy: 0.9163 - val_loss: 0.2839
Epoch 23/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9146 - loss: 0.2905 - val_accuracy: 0.9162 - val_loss: 0.2788
Epoch 24/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9174 - loss: 0.2865 - val_accuracy: 0.9182 - val_loss: 0.2746
Epoch 25/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 3ms/step - accuracy: 0.9193 - loss: 0.2795 - val_accuracy: 0.9190 - val_loss: 0.2707
Epoch 26/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 3ms/step - accuracy: 0.9231 - loss: 0.2650 - val_accuracy: 0.9202 - val_loss: 0.2665
Epoch 27/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9221 - loss: 0.2665 - val_accuracy: 0.9212 - val_loss: 0.2618
Epoch 28/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9243 - loss: 0.2587 - val_accuracy: 0.9222 - val_loss: 0.2583
Epoch 29/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 2ms/step - accuracy: 0.9246 - loss: 0.2599 - val_accuracy: 0.9228 - val_loss: 0.2543
Epoch 30/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9278 - loss: 0.2529 - val_accuracy: 0.9238 - val_loss: 0.2506
Epoch 31/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9254 - loss: 0.2524 - val_accuracy: 0.9253 - val_loss: 0.2472
Epoch 32/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9307 - loss: 0.2428 - val_accuracy: 0.9267 - val_loss: 0.2427
Epoch 33/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9284 - loss: 0.2449 - val_accuracy: 0.9285 - val_loss: 0.2403
Epoch 34/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9316 - loss: 0.2332 - val_accuracy: 0.9298 - val_loss: 0.2365
Epoch 35/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9322 - loss: 0.2345 - val_accuracy: 0.9307 - val_loss: 0.2325
Epoch 36/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9315 - loss: 0.2356 - val_accuracy: 0.9303 - val_loss: 0.2297
Epoch 37/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9338 - loss: 0.2272 - val_accuracy: 0.9327 - val_loss: 0.2273
Epoch 38/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9361 - loss: 0.2201 - val_accuracy: 0.9342 - val_loss: 0.2240
Epoch 39/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9352 - loss: 0.2239 - val_accuracy: 0.9348 - val_loss: 0.2209
Epoch 40/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9384 - loss: 0.2145 - val_accuracy: 0.9357 - val_loss: 0.2181
Epoch 41/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9375 - loss: 0.2188 - val_accuracy: 0.9373 - val_loss: 0.2145
Epoch 42/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9379 - loss: 0.2157 - val_accuracy: 0.9380 - val_loss: 0.2121
Epoch 43/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9416 - loss: 0.2053 - val_accuracy: 0.9380 - val_loss: 0.2091
Epoch 44/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9418 - loss: 0.2027 - val_accuracy: 0.9397 - val_loss: 0.2068
Epoch 45/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9413 - loss: 0.2037 - val_accuracy: 0.9403 - val_loss: 0.2036
Epoch 46/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9443 - loss: 0.1954 - val_accuracy: 0.9395 - val_loss: 0.2011
Epoch 47/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9449 - loss: 0.1941 - val_accuracy: 0.9410 - val_loss: 0.1992
Epoch 48/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9431 - loss: 0.1947 - val_accuracy: 0.9415 - val_loss: 0.1964
Epoch 49/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9444 - loss: 0.1934 - val_accuracy: 0.9417 - val_loss: 0.1940
Epoch 50/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9475 - loss: 0.1858 - val_accuracy: 0.9422 - val_loss: 0.1914
# Выводим график функции ошибки
plt.figure(figsize=(12, 5))
plt.subplot(1, 2, 1)
plt.plot(history_3l_100_50.history['loss'], label='Обучающая ошибка')
plt.plot(history_3l_100_50.history['val_loss'], label='Валидационная ошибка')
plt.title('Функция ошибки по эпохам')
plt.xlabel('Эпохи')
plt.ylabel('Categorical Crossentropy')
plt.legend()
plt.grid(True)
scores_3l_100_50=model_3l_100_50.evaluate(X_test,y_test)
print('Lossontestdata:',scores_3l_100_50[0])
print('Accuracyontestdata:',scores_3l_100_50[1])313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 3ms/step - accuracy: 0.9423 - loss: 0.2074
Lossontestdata: 0.20320768654346466
Accuracyontestdata: 0.9427000284194946
#9 пункт
model_3l_100_100 = Sequential()
model_3l_100_100.add(Dense(units=100, input_dim=num_pixels, activation='sigmoid'))
model_3l_100_100.add(Dense(units=100, activation='sigmoid'))
model_3l_100_100.add(Dense(units=num_classes, activation='softmax'))
model_3l_100_100.compile(loss='categorical_crossentropy', optimizer='sgd', metrics=['accuracy'])print("Архитектура нейронной сети:")
model_3l_100_100.summary()Архитектура нейронной сети:
Model: "sequential_6"
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓ ┃ Layer (type) ┃ Output Shape ┃ Param # ┃ ┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩ │ dense_12 (Dense) │ (None, 100) │ 78,500 │ ├─────────────────────────────────┼────────────────────────┼───────────────┤ │ dense_13 (Dense) │ (None, 100) │ 10,100 │ ├─────────────────────────────────┼────────────────────────┼───────────────┤ │ dense_14 (Dense) │ (None, 10) │ 1,010 │ └─────────────────────────────────┴────────────────────────┴───────────────┘
Total params: 89,610 (350.04 KB)
Trainable params: 89,610 (350.04 KB)
Non-trainable params: 0 (0.00 B)
# Обучаем модель
history_3l_100_100 = model_3l_100_100.fit(
X_train, y_train,
validation_split=0.1,
epochs=50
)Epoch 1/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 7s 4ms/step - accuracy: 0.2217 - loss: 2.2757 - val_accuracy: 0.4550 - val_loss: 2.0754
Epoch 2/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.5328 - loss: 1.9426 - val_accuracy: 0.6695 - val_loss: 1.4533
Epoch 3/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.6905 - loss: 1.3098 - val_accuracy: 0.7663 - val_loss: 0.9693
Epoch 4/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.7778 - loss: 0.9031 - val_accuracy: 0.8193 - val_loss: 0.7365
Epoch 5/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.8182 - loss: 0.7111 - val_accuracy: 0.8360 - val_loss: 0.6098
Epoch 6/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.8400 - loss: 0.5970 - val_accuracy: 0.8538 - val_loss: 0.5323
Epoch 7/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.8530 - loss: 0.5334 - val_accuracy: 0.8658 - val_loss: 0.4795
Epoch 8/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.8729 - loss: 0.4714 - val_accuracy: 0.8770 - val_loss: 0.4420
Epoch 9/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.8781 - loss: 0.4415 - val_accuracy: 0.8828 - val_loss: 0.4129
Epoch 10/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.8848 - loss: 0.4121 - val_accuracy: 0.8882 - val_loss: 0.3905
Epoch 11/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.8926 - loss: 0.3878 - val_accuracy: 0.8930 - val_loss: 0.3729
Epoch 12/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.8940 - loss: 0.3762 - val_accuracy: 0.8970 - val_loss: 0.3591
Epoch 13/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 4ms/step - accuracy: 0.8983 - loss: 0.3611 - val_accuracy: 0.8998 - val_loss: 0.3470
Epoch 14/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9010 - loss: 0.3482 - val_accuracy: 0.9030 - val_loss: 0.3364
Epoch 15/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9049 - loss: 0.3351 - val_accuracy: 0.9047 - val_loss: 0.3295
Epoch 16/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9049 - loss: 0.3361 - val_accuracy: 0.9077 - val_loss: 0.3200
Epoch 17/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9069 - loss: 0.3236 - val_accuracy: 0.9097 - val_loss: 0.3141
Epoch 18/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9081 - loss: 0.3148 - val_accuracy: 0.9110 - val_loss: 0.3077
Epoch 19/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9100 - loss: 0.3122 - val_accuracy: 0.9128 - val_loss: 0.3004
Epoch 20/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9108 - loss: 0.3060 - val_accuracy: 0.9145 - val_loss: 0.2951
Epoch 21/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9121 - loss: 0.3015 - val_accuracy: 0.9167 - val_loss: 0.2893
Epoch 22/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9166 - loss: 0.2886 - val_accuracy: 0.9168 - val_loss: 0.2845
Epoch 23/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 3ms/step - accuracy: 0.9152 - loss: 0.2864 - val_accuracy: 0.9177 - val_loss: 0.2807
Epoch 24/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9170 - loss: 0.2838 - val_accuracy: 0.9202 - val_loss: 0.2750
Epoch 25/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 3ms/step - accuracy: 0.9199 - loss: 0.2770 - val_accuracy: 0.9218 - val_loss: 0.2712
Epoch 26/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9224 - loss: 0.2716 - val_accuracy: 0.9233 - val_loss: 0.2663
Epoch 27/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 2ms/step - accuracy: 0.9244 - loss: 0.2639 - val_accuracy: 0.9235 - val_loss: 0.2633
Epoch 28/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9234 - loss: 0.2602 - val_accuracy: 0.9243 - val_loss: 0.2584
Epoch 29/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 3ms/step - accuracy: 0.9256 - loss: 0.2614 - val_accuracy: 0.9252 - val_loss: 0.2556
Epoch 30/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9269 - loss: 0.2521 - val_accuracy: 0.9268 - val_loss: 0.2511
Epoch 31/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 3ms/step - accuracy: 0.9278 - loss: 0.2485 - val_accuracy: 0.9275 - val_loss: 0.2472
Epoch 32/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9284 - loss: 0.2445 - val_accuracy: 0.9272 - val_loss: 0.2434
Epoch 33/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9307 - loss: 0.2422 - val_accuracy: 0.9280 - val_loss: 0.2407
Epoch 34/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9298 - loss: 0.2395 - val_accuracy: 0.9293 - val_loss: 0.2367
Epoch 35/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 3ms/step - accuracy: 0.9311 - loss: 0.2357 - val_accuracy: 0.9303 - val_loss: 0.2339
Epoch 36/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9332 - loss: 0.2273 - val_accuracy: 0.9323 - val_loss: 0.2307
Epoch 37/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9333 - loss: 0.2269 - val_accuracy: 0.9330 - val_loss: 0.2283
Epoch 38/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 3ms/step - accuracy: 0.9365 - loss: 0.2195 - val_accuracy: 0.9327 - val_loss: 0.2249
Epoch 39/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9369 - loss: 0.2157 - val_accuracy: 0.9327 - val_loss: 0.2215
Epoch 40/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9364 - loss: 0.2184 - val_accuracy: 0.9360 - val_loss: 0.2180
Epoch 41/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 3ms/step - accuracy: 0.9384 - loss: 0.2135 - val_accuracy: 0.9353 - val_loss: 0.2158
Epoch 42/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9388 - loss: 0.2112 - val_accuracy: 0.9370 - val_loss: 0.2128
Epoch 43/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9413 - loss: 0.2068 - val_accuracy: 0.9357 - val_loss: 0.2107
Epoch 44/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9414 - loss: 0.2046 - val_accuracy: 0.9362 - val_loss: 0.2078
Epoch 45/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9424 - loss: 0.2021 - val_accuracy: 0.9372 - val_loss: 0.2053
Epoch 46/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9429 - loss: 0.1996 - val_accuracy: 0.9368 - val_loss: 0.2030
Epoch 47/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 3ms/step - accuracy: 0.9463 - loss: 0.1907 - val_accuracy: 0.9387 - val_loss: 0.2007
Epoch 48/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9450 - loss: 0.1945 - val_accuracy: 0.9393 - val_loss: 0.1983
Epoch 49/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9472 - loss: 0.1869 - val_accuracy: 0.9407 - val_loss: 0.1958
Epoch 50/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 3ms/step - accuracy: 0.9460 - loss: 0.1903 - val_accuracy: 0.9403 - val_loss: 0.1929
# Выводим график функции ошибки
plt.figure(figsize=(12, 5))
plt.subplot(1, 2, 1)
plt.plot(history_3l_100_100.history['loss'], label='Обучающая ошибка')
plt.plot(history_3l_100_100.history['val_loss'], label='Валидационная ошибка')
plt.title('Функция ошибки по эпохам')
plt.xlabel('Эпохи')
plt.ylabel('Categorical Crossentropy')
plt.legend()
plt.grid(True)
scores_3l_100_100=model_3l_100_100.evaluate(X_test,y_test)
print('Lossontestdata:',scores_3l_100_100[0])
print('Accuracyontestdata:',scores_3l_100_100[1])313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 2ms/step - accuracy: 0.9435 - loss: 0.2058
Lossontestdata: 0.2007063776254654
Accuracyontestdata: 0.9431999921798706
import pandas as pd
data = {
'Слои': [ 1, 1, 1, 2, 2],
'Нейроны 1': [ 100, 300, 500, 100, 100],
'Нейроны 2': [ '-', '-', '-', 50, 100],
'Метрика': [ 0.9438999891281128, 0.9372000098228455, 0.9301000237464905, 0.9427000284194946, 0.9431999921798706]
}
df = pd.DataFrame(data)
df| Слои | Нейроны 1 | Нейроны 2 | Метрика | |
|---|---|---|---|---|
| 0 | 1 | 100 | - | 0.9439 |
| 1 | 1 | 300 | - | 0.9372 |
| 2 | 1 | 500 | - | 0.9301 |
| 3 | 2 | 100 | 50 | 0.9427 |
| 4 | 2 | 100 | 100 | 0.9432 |
model_2l_100.save(filepath='best_model.keras')# вывод тестового изображения и результата распознавания
n = 150
result = model_2l_100.predict(X_test[n:n+1])
print('NN output:', result)
plt.imshow(X_test[n].reshape(28,28), cmap=plt.get_cmap('gray'))
plt.show()
print('Real mark: ', str(np.argmax(y_test[n])))
print('NN answer: ', str(np.argmax(result)))1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 266ms/step
NN output: [[3.86779779e-04 3.69515050e-08 2.03053992e-06 1.15266894e-05
1.57332561e-05 4.79512411e-04 7.92529917e-08 9.95542467e-01
1.50878295e-05 3.54681048e-03]]

Real mark: 7
NN answer: 7
# вывод тестового изображения и результата распознавания
n = 810
result = model_2l_100.predict(X_test[n:n+1])
print('NN output:', result)
plt.imshow(X_test[n].reshape(28,28), cmap=plt.get_cmap('gray'))
plt.show()
print('Real mark: ', str(np.argmax(y_test[n])))
print('NN answer: ', str(np.argmax(result)))1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 28ms/step
NN output: [[8.1927046e-06 9.8501807e-01 4.7102575e-03 1.5754283e-03 5.3024664e-06
2.3075400e-03 6.3471968e-04 7.6599965e-05 5.5682263e-03 9.5791329e-05]]

Real mark: 1
NN answer: 1
#загрузка собственного изображения
from PIL import Image
file_1_data = Image.open('ИИЛР1_6.png')
file_1_data = file_1_data.convert('L') #перевод в градации серого
test_1_img = np.array(file_1_data)#вывод собственного изображения
plt.imshow(test_1_img, cmap=plt.get_cmap('gray'))
plt.show()
#предобработка
test_1_img = test_1_img / 255
test_1_img = test_1_img.reshape(1, num_pixels)#распознавание
result_1 = model_2l_100.predict(test_1_img)
print('I think it\'s', np.argmax(result_1))1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 45ms/step
I think it's 6
#загрузка собственного изображения
from PIL import Image
file_2_data = Image.open('ИИЛР1_1.png')
file_2_data = file_2_data.convert('L') #перевод в градации серого
test_2_img = np.array(file_2_data)#вывод собственного изображения
plt.imshow(test_2_img, cmap=plt.get_cmap('gray'))
plt.show()
#предобработка
test_2_img = test_2_img / 255
test_2_img = test_2_img.reshape(1, num_pixels)#распознавание
result_2 = model_2l_100.predict(test_2_img)
print('I think it\'s', np.argmax(result_2))1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 30ms/step
I think it's 1
from PIL import Image
file_190_data = Image.open('ИИЛР1_690.png')
file_190_data = file_190_data.convert('L') #перевод в градации серого
test_190_img = np.array(file_190_data)plt.imshow(test_190_img, cmap=plt.get_cmap('gray'))
plt.show()
#предобработка
test_190_img = test_190_img / 255
test_190_img = test_190_img.reshape(1, num_pixels)#распознавание
result_190 = model_2l_100.predict(test_190_img)
print('I think it\'s', np.argmax(result_190))1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 27ms/step
I think it's 2
from PIL import Image
file_290_data = Image.open('ИИЛР1_190.png')
file_290_data = file_290_data.convert('L') #перевод в градации серого
test_290_img = np.array(file_290_data)plt.imshow(test_290_img, cmap=plt.get_cmap('gray'))
plt.show()
#предобработка
test_290_img = test_290_img / 255
test_290_img = test_290_img.reshape(1, num_pixels)#распознавание
result_290 = model_2l_100.predict(test_290_img)
print('I think it\'s', np.argmax(result_290))1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 29ms/step
I think it's 4