Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

817 строки
122 KiB
Plaintext

{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"colab": {
"provenance": [],
"gpuType": "T4"
},
"kernelspec": {
"name": "python3",
"display_name": "Python 3"
},
"language_info": {
"name": "python"
},
"accelerator": "GPU"
},
"cells": [
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "L5IVcsqZFrPb",
"outputId": "04670098-8677-4300-d7b4-2577d0f39110",
"collapsed": true
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Drive already mounted at /content/drive; to attempt to forcibly remount, call drive.mount(\"/content/drive\", force_remount=True).\n"
]
}
],
"source": [
"from google.colab import drive\n",
"drive.mount('/content/drive')\n",
"import os\n",
"os.chdir('/content/drive/MyDrive/Colab Notebooks/is_lab3')\n",
"\n",
"from tensorflow import keras\n",
"from tensorflow.keras import layers\n",
"from tensorflow.keras.models import Sequential\n",
"import matplotlib.pyplot as plt\n",
"import numpy as np\n",
"from sklearn.metrics import classification_report, confusion_matrix\n",
"from sklearn.metrics import ConfusionMatrixDisplay"
]
},
{
"cell_type": "code",
"source": [
"from keras.datasets import mnist\n",
"(X_train, y_train), (X_test, y_test) = mnist.load_data()"
],
"metadata": {
"id": "LyXMgOAxIJxj"
},
"execution_count": 18,
"outputs": []
},
{
"cell_type": "code",
"source": [
"from sklearn.model_selection import train_test_split\n",
"\n",
"# объединяем в один набор\n",
"X = np.concatenate((X_train, X_test))\n",
"y = np.concatenate((y_train, y_test))\n",
"\n",
"# разбиваем по вариантам\n",
"X_train, X_test, y_train, y_test = train_test_split(X, y,\n",
" test_size = 10000,\n",
" train_size = 60000,\n",
" random_state = 7)\n",
"# вывод размерностей\n",
"print('Shape of X train:', X_train.shape)\n",
"print('Shape of y train:', y_train.shape)\n",
"print('Shape of X test:', X_test.shape)\n",
"print('Shape of y test:', y_test.shape)"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "vRJoFvi_IPl2",
"outputId": "38672d14-c658-4149-d12d-408f5ce7ea35",
"collapsed": true
},
"execution_count": 19,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Shape of X train: (60000, 28, 28)\n",
"Shape of y train: (60000,)\n",
"Shape of X test: (10000, 28, 28)\n",
"Shape of y test: (10000,)\n"
]
}
]
},
{
"cell_type": "code",
"source": [
"# Зададим параметры данных и модели\n",
"num_classes = 10\n",
"input_shape = (28, 28, 1)\n",
"\n",
"# Приведение входных данных к диапазону [0, 1]\n",
"X_train = X_train / 255\n",
"X_test = X_test / 255\n",
"\n",
"# Расширяем размерность входных данных, чтобы каждое изображение имело\n",
"# размерность (высота, ширина, количество каналов)\n",
"\n",
"X_train = np.expand_dims(X_train, -1)\n",
"X_test = np.expand_dims(X_test, -1)\n",
"print('Shape of transformed X train:', X_train.shape)\n",
"print('Shape of transformed X test:', X_test.shape)\n",
"\n",
"# переведем метки в one-hot\n",
"y_train = keras.utils.to_categorical(y_train, num_classes)\n",
"y_test = keras.utils.to_categorical(y_test, num_classes)\n",
"print('Shape of transformed y train:', y_train.shape)\n",
"print('Shape of transformed y test:', y_test.shape)"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "MW1azavSIkbr",
"outputId": "f82440c0-2098-401a-eaf4-37694f72c60c",
"collapsed": true
},
"execution_count": 20,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Shape of transformed X train: (60000, 28, 28, 1)\n",
"Shape of transformed X test: (10000, 28, 28, 1)\n",
"Shape of transformed y train: (60000, 10)\n",
"Shape of transformed y test: (10000, 10)\n"
]
}
]
},
{
"cell_type": "code",
"source": [
"# создаем модель\n",
"model = Sequential()\n",
"model.add(layers.Conv2D(32, kernel_size=(3, 3), activation=\"relu\", input_shape=input_shape))\n",
"model.add(layers.MaxPooling2D(pool_size=(2, 2)))\n",
"model.add(layers.Conv2D(64, kernel_size=(3, 3), activation=\"relu\"))\n",
"model.add(layers.MaxPooling2D(pool_size=(2, 2)))\n",
"model.add(layers.Dropout(0.5))\n",
"model.add(layers.Flatten())\n",
"model.add(layers.Dense(num_classes, activation=\"softmax\"))\n",
"\n",
"model.summary()"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 418
},
"id": "e0heiHVGKz1U",
"outputId": "8f95e97d-0e15-4ccc-92dc-2228f87d933c",
"collapsed": true
},
"execution_count": 21,
"outputs": [
{
"output_type": "stream",
"name": "stderr",
"text": [
"/usr/local/lib/python3.12/dist-packages/keras/src/layers/convolutional/base_conv.py:113: 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.\n",
" super().__init__(activity_regularizer=activity_regularizer, **kwargs)\n"
]
},
{
"output_type": "display_data",
"data": {
"text/plain": [
"\u001b[1mModel: \"sequential_1\"\u001b[0m\n"
],
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-weight: bold\">Model: \"sequential_1\"</span>\n",
"</pre>\n"
]
},
"metadata": {}
},
{
"output_type": "display_data",
"data": {
"text/plain": [
"┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓\n",
"┃\u001b[1m \u001b[0m\u001b[1mLayer (type) \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1mOutput Shape \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1m Param #\u001b[0m\u001b[1m \u001b[0m┃\n",
"┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩\n",
"│ conv2d_2 (\u001b[38;5;33mConv2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m26\u001b[0m, \u001b[38;5;34m26\u001b[0m, \u001b[38;5;34m32\u001b[0m) │ \u001b[38;5;34m320\u001b[0m │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ max_pooling2d_2 (\u001b[38;5;33mMaxPooling2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m13\u001b[0m, \u001b[38;5;34m13\u001b[0m, \u001b[38;5;34m32\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ conv2d_3 (\u001b[38;5;33mConv2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m11\u001b[0m, \u001b[38;5;34m11\u001b[0m, \u001b[38;5;34m64\u001b[0m) │ \u001b[38;5;34m18,496\u001b[0m │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ max_pooling2d_3 (\u001b[38;5;33mMaxPooling2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m5\u001b[0m, \u001b[38;5;34m5\u001b[0m, \u001b[38;5;34m64\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ dropout_1 (\u001b[38;5;33mDropout\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m5\u001b[0m, \u001b[38;5;34m5\u001b[0m, \u001b[38;5;34m64\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ flatten_1 (\u001b[38;5;33mFlatten\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m1600\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ dense_1 (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m10\u001b[0m) │ \u001b[38;5;34m16,010\u001b[0m │\n",
"└─────────────────────────────────┴────────────────────────┴───────────────┘\n"
],
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓\n",
"┃<span style=\"font-weight: bold\"> Layer (type) </span>┃<span style=\"font-weight: bold\"> Output Shape </span>┃<span style=\"font-weight: bold\"> Param # </span>┃\n",
"┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩\n",
"│ conv2d_2 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Conv2D</span>) │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">26</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">26</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">32</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">320</span> │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ max_pooling2d_2 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">MaxPooling2D</span>) │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">13</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">13</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">32</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ conv2d_3 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Conv2D</span>) │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">11</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">11</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">64</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">18,496</span> │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ max_pooling2d_3 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">MaxPooling2D</span>) │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">5</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">5</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">64</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ dropout_1 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Dropout</span>) │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">5</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">5</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">64</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ flatten_1 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Flatten</span>) │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">1600</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ dense_1 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Dense</span>) │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">10</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">16,010</span> │\n",
"└─────────────────────────────────┴────────────────────────┴───────────────┘\n",
"</pre>\n"
]
},
"metadata": {}
},
{
"output_type": "display_data",
"data": {
"text/plain": [
"\u001b[1m Total params: \u001b[0m\u001b[38;5;34m34,826\u001b[0m (136.04 KB)\n"
],
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-weight: bold\"> Total params: </span><span style=\"color: #00af00; text-decoration-color: #00af00\">34,826</span> (136.04 KB)\n",
"</pre>\n"
]
},
"metadata": {}
},
{
"output_type": "display_data",
"data": {
"text/plain": [
"\u001b[1m Trainable params: \u001b[0m\u001b[38;5;34m34,826\u001b[0m (136.04 KB)\n"
],
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-weight: bold\"> Trainable params: </span><span style=\"color: #00af00; text-decoration-color: #00af00\">34,826</span> (136.04 KB)\n",
"</pre>\n"
]
},
"metadata": {}
},
{
"output_type": "display_data",
"data": {
"text/plain": [
"\u001b[1m Non-trainable params: \u001b[0m\u001b[38;5;34m0\u001b[0m (0.00 B)\n"
],
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-weight: bold\"> Non-trainable params: </span><span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> (0.00 B)\n",
"</pre>\n"
]
},
"metadata": {}
}
]
},
{
"cell_type": "code",
"source": [
"# компилируем и обучаем модель\n",
"batch_size = 512\n",
"epochs = 15\n",
"model.compile(loss=\"categorical_crossentropy\", optimizer=\"adam\", metrics=[\"accuracy\"])\n",
"model.fit(X_train, y_train, batch_size=batch_size, epochs=epochs, validation_split=0.1)\n"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "VGOpmicHLkU6",
"outputId": "0620fd72-b723-4efd-8a26-253a8ee98eb3",
"collapsed": true
},
"execution_count": 22,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Epoch 1/15\n",
"\u001b[1m106/106\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m13s\u001b[0m 61ms/step - accuracy: 0.6299 - loss: 1.2590 - val_accuracy: 0.9473 - val_loss: 0.1893\n",
"Epoch 2/15\n",
"\u001b[1m106/106\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 11ms/step - accuracy: 0.9374 - loss: 0.2104 - val_accuracy: 0.9685 - val_loss: 0.1111\n",
"Epoch 3/15\n",
"\u001b[1m106/106\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 10ms/step - accuracy: 0.9607 - loss: 0.1312 - val_accuracy: 0.9757 - val_loss: 0.0825\n",
"Epoch 4/15\n",
"\u001b[1m106/106\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 10ms/step - accuracy: 0.9687 - loss: 0.1022 - val_accuracy: 0.9788 - val_loss: 0.0674\n",
"Epoch 5/15\n",
"\u001b[1m106/106\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 10ms/step - accuracy: 0.9702 - loss: 0.0913 - val_accuracy: 0.9812 - val_loss: 0.0597\n",
"Epoch 6/15\n",
"\u001b[1m106/106\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 10ms/step - accuracy: 0.9756 - loss: 0.0814 - val_accuracy: 0.9843 - val_loss: 0.0522\n",
"Epoch 7/15\n",
"\u001b[1m106/106\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 10ms/step - accuracy: 0.9783 - loss: 0.0720 - val_accuracy: 0.9837 - val_loss: 0.0488\n",
"Epoch 8/15\n",
"\u001b[1m106/106\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 10ms/step - accuracy: 0.9802 - loss: 0.0644 - val_accuracy: 0.9865 - val_loss: 0.0447\n",
"Epoch 9/15\n",
"\u001b[1m106/106\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 10ms/step - accuracy: 0.9812 - loss: 0.0596 - val_accuracy: 0.9862 - val_loss: 0.0430\n",
"Epoch 10/15\n",
"\u001b[1m106/106\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 10ms/step - accuracy: 0.9818 - loss: 0.0568 - val_accuracy: 0.9858 - val_loss: 0.0432\n",
"Epoch 11/15\n",
"\u001b[1m106/106\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 12ms/step - accuracy: 0.9843 - loss: 0.0515 - val_accuracy: 0.9863 - val_loss: 0.0406\n",
"Epoch 12/15\n",
"\u001b[1m106/106\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 12ms/step - accuracy: 0.9839 - loss: 0.0523 - val_accuracy: 0.9890 - val_loss: 0.0372\n",
"Epoch 13/15\n",
"\u001b[1m106/106\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 11ms/step - accuracy: 0.9832 - loss: 0.0538 - val_accuracy: 0.9892 - val_loss: 0.0346\n",
"Epoch 14/15\n",
"\u001b[1m106/106\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 10ms/step - accuracy: 0.9856 - loss: 0.0456 - val_accuracy: 0.9892 - val_loss: 0.0337\n",
"Epoch 15/15\n",
"\u001b[1m106/106\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 10ms/step - accuracy: 0.9856 - loss: 0.0446 - val_accuracy: 0.9893 - val_loss: 0.0335\n"
]
},
{
"output_type": "execute_result",
"data": {
"text/plain": [
"<keras.src.callbacks.history.History at 0x7f3a0efe6ae0>"
]
},
"metadata": {},
"execution_count": 22
}
]
},
{
"cell_type": "code",
"source": [
"# Оценка качества работы модели на тестовых данных\n",
"scores = model.evaluate(X_test, y_test)\n",
"print('Loss on test data:', scores[0])\n",
"print('Accuracy on test data:', scores[1])"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "ay9npPxRMPth",
"outputId": "75160c4c-7608-44b9-f265-d3e6ae3d48de",
"collapsed": true
},
"execution_count": 23,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"\u001b[1m313/313\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 3ms/step - accuracy: 0.9865 - loss: 0.0462\n",
"Loss on test data: 0.04353996366262436\n",
"Accuracy on test data: 0.9876000285148621\n"
]
}
]
},
{
"cell_type": "code",
"source": [
"# вывод тестового изображения и результата распознавания\n",
"for n in [222,333]:\n",
" result = model.predict(X_test[n:n+1])\n",
" print('NN output:', result)\n",
" plt.imshow(X_test[n].reshape(28,28), cmap=plt.get_cmap('gray'))\n",
" plt.show()\n",
" print('Real mark: ', np.argmax(y_test[n]))\n",
" print('NN answer: ', np.argmax(result))\n"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 1000
},
"id": "jYKaReGsMWd-",
"outputId": "64f1eca5-78fe-4dbc-900c-7a305d4336e9",
"collapsed": true
},
"execution_count": 33,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 487ms/step\n",
"NN output: [[4.8054830e-04 4.6004916e-05 9.9381435e-01 4.3485279e-04 1.4458959e-04\n",
" 4.9780807e-05 2.4334698e-03 8.0680138e-06 2.3864885e-03 2.0190493e-04]]\n"
]
},
{
"output_type": "display_data",
"data": {
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
],
"image/png": "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CU7HHRAAwAQBBAAwQQABAEwQQAAAEwQQAMAEAQQAMEEAAQBMEEAAABMEEADABAEEADBBAAEATBBAAAATLEYKnGbNmjWea1paWjzX/PnPf/Zcs2fPHs81l156qecaSerq6vJcs2TJEs81wWDQc00sfv/738dUF8s84PxxBwQAMEEAAQBMeA6gqqoqzZs3T1lZWfL5fNq6dWvUfuecnn76aWVmZmr06NEqKCjQwYMH49UvAGCQ8BxAbW1tys3N1bp163rcv3btWr344ot66aWXtGvXLl188cUqLCxUe3v7BTcLABg8PD+EUFRUpKKioh73Oef0wgsv6Mc//rHuuOMOSdIrr7yijIwMbd26VXffffeFdQsAGDTi+hlQfX29mpubVVBQENkWCASUl5en6urqHms6OjoUDoejBgBg8ItrADU3N0s687vhMzIyIvu+rqysTIFAIDLGjx8fz5YAAP2U+VNwJSUlCoVCkdHQ0GDdEgCgD8Q1gL76o7Kv/2FeS0tLr39w5vf7lZycHDUAAINfXAMoJydHwWBQ5eXlkW3hcFi7du1Sfn5+PE8FABjgPD8Fd/z4cdXW1kZe19fXa//+/UpNTVV2drZWrFihn/70p7rqqquUk5Ojp556SllZWZo/f348+wYADHCeA2jPnj267bbbIq9XrVolSVq8eLE2btyoJ554Qm1tbXrwwQd17Ngx3XLLLdq+fbsuuuii+HUNABjwfM45Z93E6cLhsAKBgHUbADzavXu355obbrghAZ2cKTs7O6a6w4cPx7mToSUUCp31c33zp+AAAEMTAQQAMEEAAQBMEEAAABMEEADABAEEADBBAAEATBBAAAATBBAAwAQBBAAwQQABAEwQQAAAEwQQAMCE569jADD43XLLLZ5rrrnmmgR0cqY1a9Z4rmlsbExAJ7hQ3AEBAEwQQAAAEwQQAMAEAQQAMEEAAQBMEEAAABMEEADABAEEADBBAAEATBBAAAATBBAAwAQBBAAw4XPOOesmThcOhxUIBKzbAPqd4cOHe6757ne/G9O5nn/+ec81KSkpnmva2to812RnZ3uu+eKLLzzX4MKFQiElJyf3up87IACACQIIAGCCAAIAmCCAAAAmCCAAgAkCCABgggACAJgggAAAJgggAIAJAggAYIIAAgCYIIAAACZGWDeAoeX222/3XDNmzBjPNXfffbfnmlj9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\n"
},
"metadata": {}
},
{
"output_type": "stream",
"name": "stdout",
"text": [
"Real mark: 2\n",
"NN answer: 2\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 131ms/step\n",
"NN output: [[2.1822505e-04 1.3631233e-02 2.7562436e-02 8.6995798e-01 6.5456913e-03\n",
" 2.4161236e-02 1.1778784e-03 3.9153613e-04 4.9376119e-02 6.9777733e-03]]\n"
]
},
{
"output_type": "display_data",
"data": {
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
],
"image/png": "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CQIIAGCCAAIAmCCAAAAmCCAAgAkCCABgggACAJgggAAAJgggAIAJAggAYIIAAgCYIIAAACZYjBQYwHbv3h1X3de//vUEdwKciTsgAIAJAggAYMJzAG3fvl1z585VKBSSz+fT5s2bY/Y75/T4448rLy9PI0eOVGlpqfbt25eofgEAA4TnAOrq6lJRUZHWrVvX6/41a9Zo7dq1evbZZ7Vjxw6NGjVKZWVlOn78+Hk3CwAYODw/hFBeXq7y8vJe9znn9OSTT+r73/++br31VknSCy+8oNzcXG3evFm33377+XULABgwEvoZUEtLi9rb21VaWhrdFggEVFxcrPr6+l5ruru7FYlEYgYAYOBLaAC1t7dLknJzc2O25+bmRvd9VlVVlQKBQHTk5+cnsiUAQD9l/hRcZWWlwuFwdLS2tlq3BAC4ABIaQMFgUJLU0dERs72joyO677P8fr8yMjJiBgBg4EtoABUUFCgYDKqmpia6LRKJaMeOHSopKUnkqQAAKc7zU3BHjx5VU1NT9HVLS4v27NmjrKwsjRkzRitWrNCPfvQjXXXVVSooKNBjjz2mUCikefPmJbJvAECK8xxAO3fu1E033RR9vXLlSknSokWLtGHDBj388MPq6urSvffeqyNHjmjGjBmqrq7WiBEjEtc1ACDl+ZxzzrqJT4tEIgoEAtZtAP3O2LFjPddUV1fHda5QKOS5ZvTo0Z5rOjs7PdcgdYTD4bN+rm/+FBwAYHAigAAAJgggAIAJAggAYIIAAgCYIIAAACYIIACACQIIAGCCAAIAmCCAAAAmCCAAgAkCCABgggACAJjw/OcYgIEsMzPTc80111zjuWbGjBmea1asWOG55pJLLvFcI0lLly71XMPK1vCKOyAAgAkCCABgggACAJgggAAAJgggAIAJAggAYIIAAgCYIIAAACYIIACACQIIAGCCAAIAmCCAAAAmWIwUF1RhYaHnmueee85zTXZ2tucaScrPz/dcM2rUKM81Pp/Pc01XV5fnmvLycs81krR169a46gAvuAMCAJgggAAAJgggAIAJAggAYIIAAgCYIIAAACYIIACACQIIAGCCAAIAmCCAAAAmCCAAgAkCCABggsVIcUFdf/31nmtuuOGGJHRiK57FSP/5z396rjl06JDnGknq6emJqw7wgjsgAIAJAggAYIIAAgCYIIAAACYIIACACQII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\n"
},
"metadata": {}
},
{
"output_type": "stream",
"name": "stdout",
"text": [
"Real mark: 3\n",
"NN answer: 3\n"
]
}
]
},
{
"cell_type": "code",
"source": [
"# истинные метки классов\n",
"true_labels = np.argmax(y_test, axis=1)\n",
"# предсказанные метки классов\n",
"predicted_labels = np.argmax(model.predict(X_test), axis=1)\n",
"# отчет о качестве классификации\n",
"print(classification_report(true_labels, predicted_labels))\n",
"# вычисление матрицы ошибок\n",
"conf_matrix = confusion_matrix(true_labels, predicted_labels)\n",
"# отрисовка матрицы ошибок в виде \"тепловой карты\"\n",
"display = ConfusionMatrixDisplay(confusion_matrix=conf_matrix)\n",
"display.plot()\n",
"plt.show()\n"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 774
},
"id": "E9fhEUP4M14X",
"outputId": "480ed6cc-1fc5-414d-adc8-c2e14b902e2e",
"collapsed": true
},
"execution_count": 26,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"\u001b[1m313/313\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step\n",
" precision recall f1-score support\n",
"\n",
" 0 0.99 0.99 0.99 968\n",
" 1 1.00 0.99 0.99 1087\n",
" 2 0.99 0.99 0.99 1000\n",
" 3 0.99 0.98 0.99 1039\n",
" 4 0.99 0.99 0.99 966\n",
" 5 0.98 0.99 0.99 908\n",
" 6 0.99 0.99 0.99 972\n",
" 7 0.98 0.99 0.98 1060\n",
" 8 0.98 0.98 0.98 1015\n",
" 9 0.98 0.98 0.98 985\n",
"\n",
" accuracy 0.99 10000\n",
" macro avg 0.99 0.99 0.99 10000\n",
"weighted avg 0.99 0.99 0.99 10000\n",
"\n"
]
},
{
"output_type": "display_data",
"data": {
"text/plain": [
"<Figure size 640x480 with 2 Axes>"
],
"image/png": "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\n"
},
"metadata": {}
}
]
},
{
"cell_type": "code",
"source": [
"# загрузка собственного изображения\n",
"from PIL import Image\n",
"file_data = Image.open('7.png')\n",
"file_data = file_data.convert('L') # перевод в градации серого\n",
"test_img = np.array(file_data)\n",
"# вывод собственного изображения\n",
"plt.imshow(test_img, cmap=plt.get_cmap('gray'))\n",
"plt.show()\n",
"# предобработка\n",
"test_img = test_img / 255\n",
"test_img = np.reshape(test_img, (1,28,28,1))\n",
"# распознавание\n",
"result = model.predict(test_img)\n",
"print('I think it\\'s ', np.argmax(result))"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 466
},
"id": "ukxF_OvrNFKW",
"outputId": "f9617de3-b6e8-4f60-dc2c-0a68c9c303b8",
"collapsed": true
},
"execution_count": 27,
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
],
"image/png": "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yr0Z6b2++uor9ff3q6ioKO7xoqIi/eMf/zCaykZFRYUOHDigefPmqaOjQ++8845eeOEFXb58WTk5OdbjmYhEIpI05Pnx9baJorq6WuvWrVNZWZlaWlr085//XKtWrVJjY6MmT55sPV7CDQwMaPv27Vq6dKkWLFggafB8yM7OVl5eXty+mXw+DHUcJOmHP/yhSktLFQqFdOnSJf3sZz9TU1OT/vznPxtOGy/lA4T/t2rVqth/L1y4UBUVFSotLdWf/vQnbdq0yXAypIIf/OAHsf9+/vnntXDhQs2ZM0f19fVavny54WTJEQ6Hdfny5Qnxc9AHGe44vPbaa7H/fv7551VcXKzly5erpaVFc+bMGe8xh5Ty34IrKCjQ5MmT77uLpbOzU8Fg0Giq1JCXl6dnn31Wzc3N1qOY+foc4Py43+zZs1VQUJCR58e2bdt07NgxnT59Ou6fbwkGg7pz5466urri9s/U82G44zCUiooKSUqp8yHlA5Sdna1Fixaprq4u9tjAwIDq6upUWVlpOJm9mzdvqqWlRcXFxdajmCkrK1MwGIw7P6LRqM6dOzfhz4+rV6/qxo0bGXV+OOe0bds21dbW6tSpUyorK4vbvmjRImVlZcWdD01NTWpra8uo82Gk4zCUixcvSlJqnQ/Wd0E8jI8//tj5/X534MAB9/e//9299tprLi8vz0UiEevRxtVPfvITV19f71pbW91f//pXV1VV5QoKCtz169etR0uq7u5ud+HCBXfhwgUnyb333nvuwoUL7t///rdzzrlf/epXLi8vzx09etRdunTJvfTSS66srMzdvn3bePLEetBx6O7udm+++aZrbGx0ra2t7uTJk+6b3/yme+aZZ1xvb6/16AmzdetWFwgEXH19vevo6IitW7duxfbZsmWLmzVrljt16pT7/PPPXWVlpausrDScOvFGOg7Nzc3uF7/4hfv8889da2urO3r0qJs9e7ZbtmyZ8eTx0iJAzjn329/+1s2aNctlZ2e7JUuWuLNnz1qPNO42bNjgiouLXXZ2tnvqqafchg0bXHNzs/VYSXf69Gkn6b61ceNG59zgrdi7d+92RUVFzu/3u+XLl7umpibboZPgQcfh1q1bbsWKFW7GjBkuKyvLlZaWus2bN2fc/6QN9euX5D788MPYPrdv33avv/66e/LJJ920adPc2rVrXUdHh93QSTDScWhra3PLli1z+fn5zu/3u7lz57q33nrLeZ5nO/g9+OcYAAAmUv5nQACAzESAAAAmCBAAwAQBAgCYIEAAABMECABgggABAEwQIACACQIEADBBgAAAJggQAMAEAQIAmPg/fvtR1bWuPFIAAAAASUVORK5CYII=\n"
},
"metadata": {}
},
{
"output_type": "stream",
"name": "stdout",
"text": [
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 28ms/step\n",
"I think it's 7\n"
]
}
]
},
{
"cell_type": "code",
"source": [
"# загрузка собственного изображения\n",
"from PIL import Image\n",
"file_data = Image.open('5.png')\n",
"file_data = file_data.convert('L') # перевод в градации серого\n",
"test_img = np.array(file_data)\n",
"# вывод собственного изображения\n",
"plt.imshow(test_img, cmap=plt.get_cmap('gray'))\n",
"plt.show()\n",
"# предобработка\n",
"test_img = test_img / 255\n",
"test_img = np.reshape(test_img, (1,28,28,1))\n",
"# распознавание\n",
"result = model.predict(test_img)\n",
"print('I think it\\'s ', np.argmax(result))"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 466
},
"id": "wye66xSBOXym",
"outputId": "33f3668e-5111-4a00-e0f4-41975a02b631",
"collapsed": true
},
"execution_count": 28,
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
],
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAaAAAAGdCAYAAABU0qcqAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAGHpJREFUeJzt3X9MVff9x/HXVeFWW7gUES63IkVtNamVZU4ZcXVNJIpbTP3xh+v6h12MjfbaTF27xSVquyxhs0mzdDHr/qpZVm1nMjT1DxNFwWxDm1qNMeuIMDYwcnE14VxEQQOf7x+sd9+rIIL38r738nwkn0TuOdz75njKs5d7uPqcc04AAIyzSdYDAAAmJgIEADBBgAAAJggQAMAEAQIAmCBAAAATBAgAYIIAAQBMTLEe4F4DAwO6du2acnJy5PP5rMcBAIySc07d3d0KhUKaNGn45zkpF6Br166ppKTEegwAwCNqb2/XzJkzh92ecj+Cy8nJsR4BAJAAI30/T1qA9u/fr6efflqPPfaYKioq9Nlnnz3U5/FjNwDIDCN9P09KgD755BPt3LlTe/fu1RdffKHy8nKtXLlS169fT8bDAQDSkUuCJUuWuHA4HPu4v7/fhUIhV1NTM+Lnep7nJLFYLBYrzZfneQ/8fp/wZ0B37tzR+fPnVVVVFbtt0qRJqqqqUmNj43379/X1KRqNxi0AQOZLeIC++uor9ff3q6ioKO72oqIiRSKR+/avqalRIBCILa6AA4CJwfwquF27dsnzvNhqb2+3HgkAMA4S/ntABQUFmjx5sjo7O+Nu7+zsVDAYvG9/v98vv9+f6DEAACku4c+AsrOztWjRItXV1cVuGxgYUF1dnSorKxP9cACANJWUd0LYuXOnNm7cqG9961tasmSJfvOb36inp0c/+tGPkvFwAIA0lJQAbdiwQf/5z3+0Z88eRSIRfeMb39Dx48fvuzABADBx+ZxzznqI/y8ajSoQCFiPAQB4RJ7nKTc3d9jt5lfBAQAmJgIEADBBgAAAJggQAMAEAQIAmCBAAAATBAgAYIIAAQBMECAAgAkCBAAwQYAAACYIEADABAECAJggQAAAEwQIAGCCAAEATBAgAIAJAgQAMEGAAAAmCBAAwAQBAgCYIEAAABMECABgggABAEwQIACACQIEADBBgAAAJggQAMAEAQIAmCBAAAATBAgAYIIAAQBMECAAgAkCBAAwQYAAACYIEADABAECAJggQAAAEwQIAGCCAAEATBAgAIAJAgQAMEGAAAAmCBAAwAQBAgCYIEAAABMECABgggABAEwQIACACQIEADBBgAAAJggQAMDEFOsBgFTinBuXx/H5fOPyOEAq4xkQAMAEAQIAmEh4gN5++235fL64NX/+/EQ/DAAgzSXlNaDnnntOJ0+e/N+DTOGlJgBAvKSUYcqUKQoGg8m4awBAhkjKa0BXrlxRKBTS7Nmz9corr6itrW3Yffv6+hSNRuMWACDzJTxAFRUVOnDggI4fP67f/e53am1t1QsvvKDu7u4h96+pqVEgEIitkpKSRI8EAEhBPpfkX3zo6upSaWmp3nvvPW3atOm+7X19ferr64t9HI1GiRDM8HtAQOJ4nqfc3Nxhtyf96oC8vDw9++yzam5uHnK73++X3+9P9hgAgBST9N8DunnzplpaWlRcXJzshwIApJGEB+jNN99UQ0OD/vWvf+lvf/ub1q5dq8mTJ+vll19O9EMBANJYwn8Ed/XqVb388su6ceOGZsyYoe985zs6e/asZsyYkeiHAgCksaRfhDBa0WhUgUDAegykuRQ7rZFAXMCRPka6CIH3ggMAmCBAAAATBAgAYIIAAQBMECAAgAkCBAAwQYAAACYIEADABAECAJggQAAAEwQIAGCCAAEATCT9H6QD0glvdAmMH54BAQBMECAAgAkCBAAwQYAAACYIEADABAECAJggQAAAEwQIAGCCAAEATBAgAIAJAgQAMEGAAAAmCBAAwAQBAgCYIEAAABMECABgggABAEwQIACACQIEADBBgAAAJggQAMAEAQIAmCBAAAATBAgAYIIAAQBMECAAgAkCBAAwQYAAACYIEADABAECAJggQAAAEwQIAGCCAAEATBAgAIAJAgQAMEGAAAAmCBAAwAQBAgCYIEAAABNTrAcARuKcsx4BQBLwDAgAYIIAAQBMjDpAZ86c0erVqxUKheTz+XTkyJG47c457dmzR8XFxZo6daqqqqp05cqVRM0LAMgQow5QT0+PysvLtX///iG379u3T++//74++OADnTt3To8//rhWrlyp3t7eRx4WAJBB3COQ5Gpra2MfDwwMuGAw6N59993YbV1dXc7v97tDhw491H16nucksVixNZ6sv1YWK5OW53kP/O8toa8Btba2KhKJqKqqKnZbIBBQRUWFGhsbh/ycvr4+RaPRuAUAyHwJDVAkEpEkFRUVxd1eVFQU23avmpoaBQKB2CopKUnkSACAFGV+FdyuXbvkeV5stbe3W48EABgHCQ1QMBiUJHV2dsbd3tnZGdt2L7/fr9zc3LgFAMh8CQ1QWVmZgsGg6urqYrdFo1GdO3dOlZWViXwoAECaG/Vb8dy8eVPNzc2xj1tbW3Xx4kXl5+dr1qxZ2r59u375y1/qmWeeUVlZmXbv3q1QKKQ1a9Ykcm4AQLob7WWqp0+fHvJyu40bNzrnBi/F3r17tysqKnJ+v98tX77cNTU1PfT9cxk26941nqy/VhYrk9ZIl2H7/vsfXcqIRqMKBALWYyCFpNgpOiH4fD7rEZABPM974Ov65lfBAQAmJgIEADBBgAAAJggQAMAEAQIAmCBAAAATBAgAYIIAAQBMECAAgAkCBAAwQYAAACYIEADABAECAJgY9b8HBKQD3s150FjfSXy83oGcv6eJjWdAAAATBAgAYIIAAQBMECAAgAkCBAAwQYAAACYIEADABAECAJggQAAAEwQIAGCCAAEATBAgAIAJ3owUKY83rBy78Tx24/UGpsgcPAMCAJggQAAAEwQIAGCCAAEATBAgAIAJAgQAMEGAAAAmCBAAwAQBAgCYIEAAABMECABgggABAEwQIACACQIEADBBgAAAJggQAMAEAQIAmCBAAAATBAgAYIIAAQBMECAAgAkCBAAwQYAAACYIEADABAECAJggQAAAEwQIAGCCAAEATIw6QGfOnNHq1asVCoXk8/l05MiRuO2vvvqqfD5f3Kqurk7UvACADDHqAPX09Ki8vFz79+8fdp/q6mp1dHTE1qFDhx5pSABA5pky2k9YtWqVVq1a9cB9/H6/gsHgmIcCAGS+pLwGVF9fr8LCQs2bN09bt27VjRs3ht23r69P0Wg0bgEAMl/CA1RdXa0//OEPqqur069//Ws1NDRo1apV6u/vH3L/mpoaBQKB2CopKUn0SACAFORzzrkxf7LPp9raWq1Zs2bYff75z39qzpw5OnnypJYvX37f9r6+PvX19cU+jkajRAhIQ2P5VuLz+ZIwCVKF53nKzc0ddnvSL8OePXu2CgoK1NzcPOR2v9+v3NzcuAUAyHxJD9DVq1d148YNFRcXJ/uhAABpZNRXwd28eTPu2Uxra6suXryo/Px85efn65133tH69esVDAbV0tKin/70p5o7d65WrlyZ0MEBAGnOjdLp06edpPvWxo0b3a1bt9yKFSvcjBkzXFZWlistLXWbN292kUjkoe/f87wh75/FYqX2GgvrmVnJXZ7nPfDv/5EuQkiGaDSqQCBgPQaAURrLtxIuQshs5hchAAAwFAIEADBBgAAAJggQAMAEAQIAmCBAAAATBAgAYIIAAQBMECAAgAkCBAAwQYAAACYIEADABAECAJgY9b8HBHyNdz8G8Ch4BgQAMEGAAAAmCBAAwAQBAgCYIEAAABMECABgggABAEwQIACACQIEADBBgAAAJggQAMAEAQIAmCBAAAATBAgAYIIAAQBMECAAgAkCBAAwQYAAACYIEADABAECAJggQAAAEwQIAGCCAAEATBAgAIAJAgQAMDHFegBMLM65UX+Oz+dLwiQTw1iONzBeeAYEADBBgAAAJggQAMAEAQIAmCBAAAATBAgAYIIAAQBMECAAgAkCBAAwQYAAACYIEADABAECAJjgzUgxZmN5k9CxvDkmb6g5/ngDWIwHngEBAEwQIACAiVEFqKamRosXL1ZOTo4KCwu1Zs0aNTU1xe3T29urcDis6dOn64knntD69evV2dmZ0KEBAOlvVAFqaGhQOBzW2bNndeLECd29e1crVqxQT09PbJ8dO3bo008/1eHDh9XQ0KBr165p3bp1CR8cAJDm3CO4fv26k+QaGhqcc851dXW5rKwsd/jw4dg+X375pZPkGhsbH+o+Pc9zklgZupAerM8TVmYsz/MeeJ490mtAnudJkvLz8yVJ58+f1927d1VVVRXbZ/78+Zo1a5YaGxuHvI++vj5Fo9G4BQDIfGMO0MDAgLZv366lS5dqwYIFkqRIJKLs7Gzl5eXF7VtUVKRIJDLk/dTU1CgQCMRWSUnJWEcCAKSRMQcoHA7r8uXL+vjjjx9pgF27dsnzvNhqb29/pPsDAKSHMf0i6rZt23Ts2DGdOXNGM2fOjN0eDAZ1584ddXV1xT0L6uzsVDAYHPK+/H6//H7/WMYAAKSxUT0Dcs5p27Ztqq2t1alTp1RWVha3fdGiRcrKylJdXV3stqamJrW1tamysjIxEwMAMsKongGFw2EdPHhQR48eVU5OTux1nUAgoKlTpyoQCGjTpk3auXOn8vPzlZubqzfeeEOVlZX69re/nZQvAACQphJxaeaHH34Y2+f27dvu9ddfd08++aSbNm2aW7t2revo6Hjox+Ay7MxeSA/W5wkrM9ZIl2H7/nuypYxoNKpAIGA9BgDgEXmep9zc3GG3815wAAATBAgAYIIAAQBMECAAgAkCBAAwQYAAACYIEADABAECAJggQAAAEwQIAGCCAAEATBAgAIAJAgQAMEGAAAAmCBAAwAQBAgCYIEAAABMECABgggABAEwQIACACQIEADBBgAAAJggQAMAEAQIAmCBAAAATBAgAYIIAAQBMECAAgAkCBAAwQYAAACYIEADABAECAJggQAAAEwQIAGCCAAEATBAgAIAJAgQAMEGAAAAmCBAAwAQBAgCYIEAAABMECABgggABAEwQIACACQIEADBBgAAAJggQAMAEAQIAmCBAAAATBAgAYIIAAQBMECAAgAkCBAAwQYAAACYIEADAxKgCVFNTo8WLFysnJ0eFhYVas2aNmpqa4vZ58cUX5fP54taWLVsSOjQAIP2NKkANDQ0Kh8M6e/asTpw4obt372rFihXq6emJ22/z5s3q6OiIrX379iV0aABA+psymp2PHz8e9/GBAwdUWFio8+fPa9myZbHbp02bpmAwmJgJAQAZ6ZFeA/I8T5KUn58fd/tHH32kgoICLViwQLt27dKtW7eGvY++vj5Fo9G4BQCYANwY9ff3u+9///tu6dKlcbf//ve/d8ePH3eXLl1yf/zjH91TTz3l1q5dO+z97N2710lisVgsVoYtz/Me2JExB2jLli2utLTUtbe3P3C/uro6J8k1NzcPub23t9d5nhdb7e3t5geNxWKxWI++RgrQqF4D+tq2bdt07NgxnTlzRjNnznzgvhUVFZKk5uZmzZkz577tfr9ffr9/LGMAANLYqALknNMbb7yh2tpa1dfXq6ysbMTPuXjxoiSpuLh4TAMCADLTqAIUDod18OBBHT16VDk5OYpEIpKkQCCgqVOnqqWlRQcPHtT3vvc9TZ8+XZcuXdKOHTu0bNkyLVy4MClfAAAgTY3mdR8N83O+Dz/80DnnXFtbm1u2bJnLz893fr/fzZ0717311lsj/hzw//M8z/znliwWi8V69DXS937ff8OSMqLRqAKBgPUYAIBH5HmecnNzh93Oe8EBAEwQIACACQIEADBBgAAAJggQAMAEAQIAmCBAAAATBAgAYIIAAQBMECAAgAkCBAAwQYAAACYI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\n"
},
"metadata": {}
},
{
"output_type": "stream",
"name": "stdout",
"text": [
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 28ms/step\n",
"I think it's 5\n"
]
}
]
},
{
"cell_type": "code",
"source": [
"model = keras.models.load_model(\"best_model.keras\")\n",
"model.summary()"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 214
},
"id": "Ng1vTN8-OacA",
"outputId": "abb528fa-2e25-4238-f5ea-27286fb7c895",
"collapsed": true
},
"execution_count": 29,
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": [
"\u001b[1mModel: \"sequential_3\"\u001b[0m\n"
],
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-weight: bold\">Model: \"sequential_3\"</span>\n",
"</pre>\n"
]
},
"metadata": {}
},
{
"output_type": "display_data",
"data": {
"text/plain": [
"┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓\n",
"┃\u001b[1m \u001b[0m\u001b[1mLayer (type) \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1mOutput Shape \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1m Param #\u001b[0m\u001b[1m \u001b[0m┃\n",
"┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩\n",
"│ dense_4 (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m300\u001b[0m) │ \u001b[38;5;34m235,500\u001b[0m │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ dense_5 (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m10\u001b[0m) │ \u001b[38;5;34m3,010\u001b[0m │\n",
"└─────────────────────────────────┴────────────────────────┴───────────────┘\n"
],
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓\n",
"┃<span style=\"font-weight: bold\"> Layer (type) </span>┃<span style=\"font-weight: bold\"> Output Shape </span>┃<span style=\"font-weight: bold\"> Param # </span>┃\n",
"┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩\n",
"│ dense_4 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Dense</span>) │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">300</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">235,500</span> │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ dense_5 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Dense</span>) │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">10</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">3,010</span> │\n",
"└─────────────────────────────────┴────────────────────────┴───────────────┘\n",
"</pre>\n"
]
},
"metadata": {}
},
{
"output_type": "display_data",
"data": {
"text/plain": [
"\u001b[1m Total params: \u001b[0m\u001b[38;5;34m238,512\u001b[0m (931.69 KB)\n"
],
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-weight: bold\"> Total params: </span><span style=\"color: #00af00; text-decoration-color: #00af00\">238,512</span> (931.69 KB)\n",
"</pre>\n"
]
},
"metadata": {}
},
{
"output_type": "display_data",
"data": {
"text/plain": [
"\u001b[1m Trainable params: \u001b[0m\u001b[38;5;34m238,510\u001b[0m (931.68 KB)\n"
],
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-weight: bold\"> Trainable params: </span><span style=\"color: #00af00; text-decoration-color: #00af00\">238,510</span> (931.68 KB)\n",
"</pre>\n"
]
},
"metadata": {}
},
{
"output_type": "display_data",
"data": {
"text/plain": [
"\u001b[1m Non-trainable params: \u001b[0m\u001b[38;5;34m0\u001b[0m (0.00 B)\n"
],
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-weight: bold\"> Non-trainable params: </span><span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> (0.00 B)\n",
"</pre>\n"
]
},
"metadata": {}
},
{
"output_type": "display_data",
"data": {
"text/plain": [
"\u001b[1m Optimizer params: \u001b[0m\u001b[38;5;34m2\u001b[0m (12.00 B)\n"
],
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-weight: bold\"> Optimizer params: </span><span style=\"color: #00af00; text-decoration-color: #00af00\">2</span> (12.00 B)\n",
"</pre>\n"
]
},
"metadata": {}
}
]
},
{
"cell_type": "code",
"source": [
"# развернем каждое изображение 28*28 в вектор 784\n",
"X_train, X_test, y_train, y_test = train_test_split(X, y,\n",
" test_size = 10000,\n",
" train_size = 60000,\n",
" random_state = 7)\n",
"num_pixels = X_train.shape[1] * X_train.shape[2]\n",
"X_train = X_train.reshape(X_train.shape[0], num_pixels) / 255\n",
"X_test = X_test.reshape(X_test.shape[0], num_pixels) / 255\n",
"print('Shape of transformed X train:', X_train.shape)\n",
"print('Shape of transformed X train:', X_test.shape)\n",
"\n",
"# переведем метки в one-hot\n",
"y_train = keras.utils.to_categorical(y_train, num_classes)\n",
"y_test = keras.utils.to_categorical(y_test, num_classes)\n",
"print('Shape of transformed y train:', y_train.shape)\n",
"print('Shape of transformed y test:', y_test.shape)"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "rQNRFPX1PGTc",
"outputId": "e1ab1ccc-6cd8-4321-f87f-ee58733a3d6e",
"collapsed": true
},
"execution_count": 30,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Shape of transformed X train: (60000, 784)\n",
"Shape of transformed X train: (10000, 784)\n",
"Shape of transformed y train: (60000, 10)\n",
"Shape of transformed y test: (10000, 10)\n"
]
}
]
},
{
"cell_type": "code",
"source": [
"# Оценка качества работы модели на тестовых данных\n",
"scores = model.evaluate(X_test, y_test)\n",
"print('Loss on test data:', scores[0])\n",
"print('Accuracy on test data:', scores[1])"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "QqJZMAa-PNn8",
"outputId": "26ce3d0d-d4b4-4f45-8d8a-09b8e50f0463",
"collapsed": true
},
"execution_count": 31,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"\u001b[1m313/313\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 3ms/step - accuracy: 0.9016 - loss: 0.3667\n",
"Loss on test data: 0.37091827392578125\n",
"Accuracy on test data: 0.9013000130653381\n"
]
}
]
},
{
"cell_type": "code",
"source": [],
"metadata": {
"id": "hJ0tLgh1PfoO"
},
"execution_count": 31,
"outputs": []
},
{
"cell_type": "code",
"source": [],
"metadata": {
"id": "OO-ulBjiPf6q"
},
"execution_count": 31,
"outputs": []
}
]
}