{"nbformat":4,"nbformat_minor":0,"metadata":{"colab":{"provenance":[],"gpuType":"T4","mount_file_id":"1bbVMysVGcsTFqIt6MuC4au-eAoPm6ccx","authorship_tag":"ABX9TyPxXSxO2w1/b3Roa81PFZ0r"},"kernelspec":{"name":"python3","display_name":"Python 3"},"language_info":{"name":"python"},"accelerator":"GPU"},"cells":[{"cell_type":"code","source":["# импорт модулей\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\n"],"metadata":{"id":"deohyGvD2Aax","executionInfo":{"status":"ok","timestamp":1765216722444,"user_tz":-180,"elapsed":2,"user":{"displayName":"Чиёми Анзай","userId":"17549274460477558773"}}},"execution_count":6,"outputs":[]},{"cell_type":"code","source":["# загрузка датасета\n","from keras.datasets import mnist\n","(X_train, y_train), (X_test, y_test) = mnist.load_data()\n"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"2CQR5-Rl4w-y","executionInfo":{"status":"ok","timestamp":1765216725348,"user_tz":-180,"elapsed":2902,"user":{"displayName":"Чиёми Анзай","userId":"17549274460477558773"}},"outputId":"0eee5160-a10b-4556-fa60-1817ac6bed11"},"execution_count":7,"outputs":[{"output_type":"stream","name":"stdout","text":["Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/mnist.npz\n","\u001b[1m11490434/11490434\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 0us/step\n"]}]},{"cell_type":"code","source":["# создание своего разбиения датасета\n","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 = 23)\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)\n"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"6FSKMZhi4zp4","executionInfo":{"status":"ok","timestamp":1765216725442,"user_tz":-180,"elapsed":86,"user":{"displayName":"Чиёми Анзай","userId":"17549274460477558773"}},"outputId":"c0171a43-8944-4dbf-f351-3d0b572d6390"},"execution_count":8,"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)\n"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"Pg0IU4ez5kYp","executionInfo":{"status":"ok","timestamp":1765216725588,"user_tz":-180,"elapsed":144,"user":{"displayName":"Чиёми Анзай","userId":"17549274460477558773"}},"outputId":"be885f59-6028-496c-9cbd-cdf2b39c8d39"},"execution_count":9,"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()\n"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":430},"id":"fLpm_MXA53q9","executionInfo":{"status":"ok","timestamp":1765216729000,"user_tz":-180,"elapsed":2476,"user":{"displayName":"Чиёми Анзай","userId":"17549274460477558773"}},"outputId":"452e5cc4-ce60-4d40-83b5-ed6c791dfe8c"},"execution_count":10,"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\"\u001b[0m\n"],"text/html":["
Model: \"sequential\"\n","\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 (\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 (\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_1 (\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_1 (\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 (\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 (\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 (\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":["┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓\n","┃ Layer (type) ┃ Output Shape ┃ Param # ┃\n","┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩\n","│ conv2d (Conv2D) │ (None, 26, 26, 32) │ 320 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ max_pooling2d (MaxPooling2D) │ (None, 13, 13, 32) │ 0 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv2d_1 (Conv2D) │ (None, 11, 11, 64) │ 18,496 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ max_pooling2d_1 (MaxPooling2D) │ (None, 5, 5, 64) │ 0 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ dropout (Dropout) │ (None, 5, 5, 64) │ 0 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ flatten (Flatten) │ (None, 1600) │ 0 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ dense (Dense) │ (None, 10) │ 16,010 │\n","└─────────────────────────────────┴────────────────────────┴───────────────┘\n","\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":["
Total params: 34,826 (136.04 KB)\n","\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":["
Trainable params: 34,826 (136.04 KB)\n","\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":["
Non-trainable params: 0 (0.00 B)\n","\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":"on8tduvA6Hps","executionInfo":{"status":"ok","timestamp":1765216754501,"user_tz":-180,"elapsed":25502,"user":{"displayName":"Чиёми Анзай","userId":"17549274460477558773"}},"outputId":"1b940a02-1268-47f5-e2b2-9b8cc927ff94"},"execution_count":11,"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[1m9s\u001b[0m 40ms/step - accuracy: 0.6012 - loss: 1.2802 - val_accuracy: 0.9483 - val_loss: 0.1785\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.9392 - loss: 0.2017 - val_accuracy: 0.9675 - val_loss: 0.1072\n","Epoch 3/15\n","\u001b[1m106/106\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 12ms/step - accuracy: 0.9605 - loss: 0.1282 - val_accuracy: 0.9728 - val_loss: 0.0857\n","Epoch 4/15\n","\u001b[1m106/106\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 11ms/step - accuracy: 0.9684 - loss: 0.1051 - val_accuracy: 0.9792 - val_loss: 0.0735\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.9721 - loss: 0.0891 - val_accuracy: 0.9815 - val_loss: 0.0629\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.9759 - loss: 0.0796 - val_accuracy: 0.9823 - val_loss: 0.0598\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.9779 - loss: 0.0708 - val_accuracy: 0.9845 - val_loss: 0.0574\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.9810 - loss: 0.0614 - val_accuracy: 0.9850 - val_loss: 0.0526\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.9809 - loss: 0.0618 - val_accuracy: 0.9845 - val_loss: 0.0534\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.9815 - loss: 0.0565 - val_accuracy: 0.9847 - val_loss: 0.0497\n","Epoch 11/15\n","\u001b[1m106/106\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 10ms/step - accuracy: 0.9828 - loss: 0.0538 - val_accuracy: 0.9845 - val_loss: 0.0502\n","Epoch 12/15\n","\u001b[1m106/106\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 10ms/step - accuracy: 0.9840 - loss: 0.0504 - val_accuracy: 0.9860 - val_loss: 0.0481\n","Epoch 13/15\n","\u001b[1m106/106\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 10ms/step - accuracy: 0.9841 - loss: 0.0483 - val_accuracy: 0.9872 - val_loss: 0.0468\n","Epoch 14/15\n","\u001b[1m106/106\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 12ms/step - accuracy: 0.9856 - loss: 0.0464 - val_accuracy: 0.9868 - val_loss: 0.0434\n","Epoch 15/15\n","\u001b[1m106/106\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 12ms/step - accuracy: 0.9861 - loss: 0.0432 - val_accuracy: 0.9868 - val_loss: 0.0438\n"]},{"output_type":"execute_result","data":{"text/plain":["
Model: \"sequential_10\"\n","\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_23 (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m100\u001b[0m) │ \u001b[38;5;34m78,500\u001b[0m │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ dense_24 (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m50\u001b[0m) │ \u001b[38;5;34m5,050\u001b[0m │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ dense_25 (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m10\u001b[0m) │ \u001b[38;5;34m510\u001b[0m │\n","└─────────────────────────────────┴────────────────────────┴───────────────┘\n"],"text/html":["┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓\n","┃ Layer (type) ┃ Output Shape ┃ Param # ┃\n","┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩\n","│ dense_23 (Dense) │ (None, 100) │ 78,500 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ dense_24 (Dense) │ (None, 50) │ 5,050 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ dense_25 (Dense) │ (None, 10) │ 510 │\n","└─────────────────────────────────┴────────────────────────┴───────────────┘\n","\n"]},"metadata":{}},{"output_type":"display_data","data":{"text/plain":["\u001b[1m Total params: \u001b[0m\u001b[38;5;34m84,062\u001b[0m (328.37 KB)\n"],"text/html":["
Total params: 84,062 (328.37 KB)\n","\n"]},"metadata":{}},{"output_type":"display_data","data":{"text/plain":["\u001b[1m Trainable params: \u001b[0m\u001b[38;5;34m84,060\u001b[0m (328.36 KB)\n"],"text/html":["
Trainable params: 84,060 (328.36 KB)\n","\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":["
Non-trainable params: 0 (0.00 B)\n","\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":["
Optimizer params: 2 (12.00 B)\n","\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 = 23)\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)\n"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"Gl-SOZoHHkie","executionInfo":{"status":"ok","timestamp":1765216797621,"user_tz":-180,"elapsed":240,"user":{"displayName":"Чиёми Анзай","userId":"17549274460477558773"}},"outputId":"2c7babb2-99de-44fd-85b6-39e1f5a80aa7"},"execution_count":17,"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_lr1.evaluate(X_test, y_test)\n","print('Loss on test data:', scores[0])\n","print('Accuracy on test data:', scores[1])\n"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"NKMJJLIUHsoj","executionInfo":{"status":"ok","timestamp":1765216808331,"user_tz":-180,"elapsed":2878,"user":{"displayName":"Чиёми Анзай","userId":"17549274460477558773"}},"outputId":"8132ade5-55c7-4dc2-d7bc-b45146f75302"},"execution_count":18,"outputs":[{"output_type":"stream","name":"stdout","text":["\u001b[1m313/313\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 5ms/step - accuracy: 0.9576 - loss: 0.1293\n","Loss on test data: 0.13758081197738647\n","Accuracy on test data: 0.9567000269889832\n"]}]},{"cell_type":"code","source":["# загрузка датасета\n","from keras.datasets import cifar10\n","\n","(X_train, y_train), (X_test, y_test) = cifar10.load_data()\n"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"bNlYmpBUH1nD","executionInfo":{"status":"ok","timestamp":1765216911865,"user_tz":-180,"elapsed":16710,"user":{"displayName":"Чиёми Анзай","userId":"17549274460477558773"}},"outputId":"81c84db4-0773-4ea1-8fa5-1876f2ffa569"},"execution_count":19,"outputs":[{"output_type":"stream","name":"stdout","text":["Downloading data from https://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz\n","\u001b[1m170498071/170498071\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m13s\u001b[0m 0us/step\n"]}]},{"cell_type":"code","source":["# создание своего разбиения датасета\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 = 50000,\n"," random_state = 23)\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)\n"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"ww_CL1uRIK9V","executionInfo":{"status":"ok","timestamp":1765216926509,"user_tz":-180,"elapsed":365,"user":{"displayName":"Чиёми Анзай","userId":"17549274460477558773"}},"outputId":"25b525a7-0fe7-4da0-9dad-b04b5cce18b7"},"execution_count":20,"outputs":[{"output_type":"stream","name":"stdout","text":["Shape of X train: (50000, 32, 32, 3)\n","Shape of y train: (50000, 1)\n","Shape of X test: (10000, 32, 32, 3)\n","Shape of y test: (10000, 1)\n"]}]},{"cell_type":"code","source":["class_names = ['airplane', 'automobile', 'bird', 'cat', 'deer',\n"," 'dog', 'frog', 'horse', 'ship', 'truck']\n","\n","plt.figure(figsize=(10,10))\n","for i in range(25):\n"," plt.subplot(5,5,i+1)\n"," plt.xticks([])\n"," plt.yticks([])\n"," plt.grid(False)\n"," plt.imshow(X_train[i])\n"," plt.xlabel(class_names[y_train[i][0]])\n","plt.show()\n"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":826},"id":"vn81SpnTINSC","executionInfo":{"status":"ok","timestamp":1765216937490,"user_tz":-180,"elapsed":1611,"user":{"displayName":"Чиёми Анзай","userId":"17549274460477558773"}},"outputId":"2a69ec40-9b23-4e87-c233-a823bf9cc269"},"execution_count":21,"outputs":[{"output_type":"display_data","data":{"text/plain":["
Model: \"sequential_1\"\n","\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;34m32\u001b[0m, \u001b[38;5;34m32\u001b[0m, \u001b[38;5;34m32\u001b[0m) │ \u001b[38;5;34m896\u001b[0m │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ batch_normalization │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m32\u001b[0m, \u001b[38;5;34m32\u001b[0m, \u001b[38;5;34m32\u001b[0m) │ \u001b[38;5;34m128\u001b[0m │\n","│ (\u001b[38;5;33mBatchNormalization\u001b[0m) │ │ │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv2d_3 (\u001b[38;5;33mConv2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m32\u001b[0m, \u001b[38;5;34m32\u001b[0m, \u001b[38;5;34m32\u001b[0m) │ \u001b[38;5;34m9,248\u001b[0m │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ batch_normalization_1 │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m32\u001b[0m, \u001b[38;5;34m32\u001b[0m, \u001b[38;5;34m32\u001b[0m) │ \u001b[38;5;34m128\u001b[0m │\n","│ (\u001b[38;5;33mBatchNormalization\u001b[0m) │ │ │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ max_pooling2d_2 (\u001b[38;5;33mMaxPooling2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m16\u001b[0m, \u001b[38;5;34m16\u001b[0m, \u001b[38;5;34m32\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;34m16\u001b[0m, \u001b[38;5;34m16\u001b[0m, \u001b[38;5;34m32\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv2d_4 (\u001b[38;5;33mConv2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m16\u001b[0m, \u001b[38;5;34m16\u001b[0m, \u001b[38;5;34m64\u001b[0m) │ \u001b[38;5;34m18,496\u001b[0m │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ batch_normalization_2 │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m16\u001b[0m, \u001b[38;5;34m16\u001b[0m, \u001b[38;5;34m64\u001b[0m) │ \u001b[38;5;34m256\u001b[0m │\n","│ (\u001b[38;5;33mBatchNormalization\u001b[0m) │ │ │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv2d_5 (\u001b[38;5;33mConv2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m16\u001b[0m, \u001b[38;5;34m16\u001b[0m, \u001b[38;5;34m64\u001b[0m) │ \u001b[38;5;34m36,928\u001b[0m │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ batch_normalization_3 │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m16\u001b[0m, \u001b[38;5;34m16\u001b[0m, \u001b[38;5;34m64\u001b[0m) │ \u001b[38;5;34m256\u001b[0m │\n","│ (\u001b[38;5;33mBatchNormalization\u001b[0m) │ │ │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ max_pooling2d_3 (\u001b[38;5;33mMaxPooling2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m8\u001b[0m, \u001b[38;5;34m8\u001b[0m, \u001b[38;5;34m64\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ dropout_2 (\u001b[38;5;33mDropout\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m8\u001b[0m, \u001b[38;5;34m8\u001b[0m, \u001b[38;5;34m64\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv2d_6 (\u001b[38;5;33mConv2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m8\u001b[0m, \u001b[38;5;34m8\u001b[0m, \u001b[38;5;34m128\u001b[0m) │ \u001b[38;5;34m73,856\u001b[0m │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ batch_normalization_4 │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m8\u001b[0m, \u001b[38;5;34m8\u001b[0m, \u001b[38;5;34m128\u001b[0m) │ \u001b[38;5;34m512\u001b[0m │\n","│ (\u001b[38;5;33mBatchNormalization\u001b[0m) │ │ │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv2d_7 (\u001b[38;5;33mConv2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m8\u001b[0m, \u001b[38;5;34m8\u001b[0m, \u001b[38;5;34m128\u001b[0m) │ \u001b[38;5;34m147,584\u001b[0m │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ batch_normalization_5 │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m8\u001b[0m, \u001b[38;5;34m8\u001b[0m, \u001b[38;5;34m128\u001b[0m) │ \u001b[38;5;34m512\u001b[0m │\n","│ (\u001b[38;5;33mBatchNormalization\u001b[0m) │ │ │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ max_pooling2d_4 (\u001b[38;5;33mMaxPooling2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m4\u001b[0m, \u001b[38;5;34m4\u001b[0m, \u001b[38;5;34m128\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ dropout_3 (\u001b[38;5;33mDropout\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m4\u001b[0m, \u001b[38;5;34m4\u001b[0m, \u001b[38;5;34m128\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;34m2048\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;34m128\u001b[0m) │ \u001b[38;5;34m262,272\u001b[0m │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ dropout_4 (\u001b[38;5;33mDropout\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m128\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ dense_2 (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m10\u001b[0m) │ \u001b[38;5;34m1,290\u001b[0m │\n","└─────────────────────────────────┴────────────────────────┴───────────────┘\n"],"text/html":["┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓\n","┃ Layer (type) ┃ Output Shape ┃ Param # ┃\n","┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩\n","│ conv2d_2 (Conv2D) │ (None, 32, 32, 32) │ 896 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ batch_normalization │ (None, 32, 32, 32) │ 128 │\n","│ (BatchNormalization) │ │ │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv2d_3 (Conv2D) │ (None, 32, 32, 32) │ 9,248 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ batch_normalization_1 │ (None, 32, 32, 32) │ 128 │\n","│ (BatchNormalization) │ │ │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ max_pooling2d_2 (MaxPooling2D) │ (None, 16, 16, 32) │ 0 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ dropout_1 (Dropout) │ (None, 16, 16, 32) │ 0 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv2d_4 (Conv2D) │ (None, 16, 16, 64) │ 18,496 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ batch_normalization_2 │ (None, 16, 16, 64) │ 256 │\n","│ (BatchNormalization) │ │ │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv2d_5 (Conv2D) │ (None, 16, 16, 64) │ 36,928 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ batch_normalization_3 │ (None, 16, 16, 64) │ 256 │\n","│ (BatchNormalization) │ │ │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ max_pooling2d_3 (MaxPooling2D) │ (None, 8, 8, 64) │ 0 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ dropout_2 (Dropout) │ (None, 8, 8, 64) │ 0 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv2d_6 (Conv2D) │ (None, 8, 8, 128) │ 73,856 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ batch_normalization_4 │ (None, 8, 8, 128) │ 512 │\n","│ (BatchNormalization) │ │ │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv2d_7 (Conv2D) │ (None, 8, 8, 128) │ 147,584 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ batch_normalization_5 │ (None, 8, 8, 128) │ 512 │\n","│ (BatchNormalization) │ │ │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ max_pooling2d_4 (MaxPooling2D) │ (None, 4, 4, 128) │ 0 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ dropout_3 (Dropout) │ (None, 4, 4, 128) │ 0 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ flatten_1 (Flatten) │ (None, 2048) │ 0 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ dense_1 (Dense) │ (None, 128) │ 262,272 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ dropout_4 (Dropout) │ (None, 128) │ 0 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ dense_2 (Dense) │ (None, 10) │ 1,290 │\n","└─────────────────────────────────┴────────────────────────┴───────────────┘\n","\n"]},"metadata":{}},{"output_type":"display_data","data":{"text/plain":["\u001b[1m Total params: \u001b[0m\u001b[38;5;34m552,362\u001b[0m (2.11 MB)\n"],"text/html":["
Total params: 552,362 (2.11 MB)\n","\n"]},"metadata":{}},{"output_type":"display_data","data":{"text/plain":["\u001b[1m Trainable params: \u001b[0m\u001b[38;5;34m551,466\u001b[0m (2.10 MB)\n"],"text/html":["
Trainable params: 551,466 (2.10 MB)\n","\n"]},"metadata":{}},{"output_type":"display_data","data":{"text/plain":["\u001b[1m Non-trainable params: \u001b[0m\u001b[38;5;34m896\u001b[0m (3.50 KB)\n"],"text/html":["
Non-trainable params: 896 (3.50 KB)\n","\n"]},"metadata":{}}]},{"cell_type":"code","source":["# компилируем и обучаем модель\n","batch_size = 64\n","epochs = 50\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":"1MmpBaHFLM9S","executionInfo":{"status":"ok","timestamp":1765218101408,"user_tz":-180,"elapsed":368146,"user":{"displayName":"Чиёми Анзай","userId":"17549274460477558773"}},"outputId":"6619dad6-9783-4fad-fb5c-6495a11bcebf"},"execution_count":24,"outputs":[{"output_type":"stream","name":"stdout","text":["Epoch 1/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m33s\u001b[0m 23ms/step - accuracy: 0.2713 - loss: 2.0996 - val_accuracy: 0.4600 - val_loss: 1.4698\n","Epoch 2/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 9ms/step - accuracy: 0.4710 - loss: 1.4611 - val_accuracy: 0.5876 - val_loss: 1.2134\n","Epoch 3/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 10ms/step - accuracy: 0.5671 - loss: 1.2243 - val_accuracy: 0.6042 - val_loss: 1.2126\n","Epoch 4/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 9ms/step - accuracy: 0.6242 - loss: 1.0786 - val_accuracy: 0.6838 - val_loss: 0.8650\n","Epoch 5/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 10ms/step - accuracy: 0.6618 - loss: 0.9714 - val_accuracy: 0.7076 - val_loss: 0.8535\n","Epoch 6/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 9ms/step - accuracy: 0.7015 - loss: 0.8811 - val_accuracy: 0.7096 - val_loss: 0.8280\n","Epoch 7/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 10ms/step - accuracy: 0.7175 - loss: 0.8198 - val_accuracy: 0.7428 - val_loss: 0.7633\n","Epoch 8/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 9ms/step - accuracy: 0.7368 - loss: 0.7710 - val_accuracy: 0.7632 - val_loss: 0.6851\n","Epoch 9/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 10ms/step - accuracy: 0.7579 - loss: 0.7130 - val_accuracy: 0.7674 - val_loss: 0.6738\n","Epoch 10/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 9ms/step - accuracy: 0.7730 - loss: 0.6751 - val_accuracy: 0.8030 - val_loss: 0.5984\n","Epoch 11/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 9ms/step - accuracy: 0.7847 - loss: 0.6376 - val_accuracy: 0.7694 - val_loss: 0.7044\n","Epoch 12/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 9ms/step - accuracy: 0.7970 - loss: 0.5956 - val_accuracy: 0.7886 - val_loss: 0.6338\n","Epoch 13/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 9ms/step - accuracy: 0.8038 - loss: 0.5751 - val_accuracy: 0.7992 - val_loss: 0.6106\n","Epoch 14/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 10ms/step - accuracy: 0.8139 - loss: 0.5532 - val_accuracy: 0.8152 - val_loss: 0.5782\n","Epoch 15/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 9ms/step - accuracy: 0.8206 - loss: 0.5221 - val_accuracy: 0.8126 - val_loss: 0.5920\n","Epoch 16/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 10ms/step - accuracy: 0.8288 - loss: 0.5039 - val_accuracy: 0.8266 - val_loss: 0.5345\n","Epoch 17/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 9ms/step - accuracy: 0.8327 - loss: 0.4915 - val_accuracy: 0.8188 - val_loss: 0.5628\n","Epoch 18/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 10ms/step - accuracy: 0.8415 - loss: 0.4732 - val_accuracy: 0.8248 - val_loss: 0.5356\n","Epoch 19/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 9ms/step - accuracy: 0.8486 - loss: 0.4533 - val_accuracy: 0.8232 - val_loss: 0.5351\n","Epoch 20/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 10ms/step - accuracy: 0.8525 - loss: 0.4387 - val_accuracy: 0.8304 - val_loss: 0.5254\n","Epoch 21/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 10ms/step - accuracy: 0.8520 - loss: 0.4297 - val_accuracy: 0.7862 - val_loss: 0.7218\n","Epoch 22/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 10ms/step - accuracy: 0.8589 - loss: 0.4169 - val_accuracy: 0.8384 - val_loss: 0.5035\n","Epoch 23/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 9ms/step - accuracy: 0.8636 - loss: 0.4034 - val_accuracy: 0.8192 - val_loss: 0.5844\n","Epoch 24/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 10ms/step - accuracy: 0.8716 - loss: 0.3834 - val_accuracy: 0.8250 - val_loss: 0.5500\n","Epoch 25/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 9ms/step - accuracy: 0.8709 - loss: 0.3822 - val_accuracy: 0.8364 - val_loss: 0.5000\n","Epoch 26/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 10ms/step - accuracy: 0.8786 - loss: 0.3592 - val_accuracy: 0.8500 - val_loss: 0.4872\n","Epoch 27/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 9ms/step - accuracy: 0.8708 - loss: 0.3783 - val_accuracy: 0.8492 - val_loss: 0.5018\n","Epoch 28/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 10ms/step - accuracy: 0.8819 - loss: 0.3502 - val_accuracy: 0.8498 - val_loss: 0.4784\n","Epoch 29/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 9ms/step - accuracy: 0.8866 - loss: 0.3325 - val_accuracy: 0.8434 - val_loss: 0.5009\n","Epoch 30/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 10ms/step - accuracy: 0.8878 - loss: 0.3299 - val_accuracy: 0.8450 - val_loss: 0.4781\n","Epoch 31/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 9ms/step - accuracy: 0.8902 - loss: 0.3252 - val_accuracy: 0.8550 - val_loss: 0.4734\n","Epoch 32/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 10ms/step - accuracy: 0.8907 - loss: 0.3245 - val_accuracy: 0.8434 - val_loss: 0.5142\n","Epoch 33/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 9ms/step - accuracy: 0.8927 - loss: 0.3160 - val_accuracy: 0.8498 - val_loss: 0.5049\n","Epoch 34/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 10ms/step - accuracy: 0.8983 - loss: 0.3004 - val_accuracy: 0.8432 - val_loss: 0.5066\n","Epoch 35/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 9ms/step - accuracy: 0.8984 - loss: 0.3011 - val_accuracy: 0.8394 - val_loss: 0.5416\n","Epoch 36/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 10ms/step - accuracy: 0.9025 - loss: 0.2877 - val_accuracy: 0.8502 - val_loss: 0.4972\n","Epoch 37/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 10ms/step - accuracy: 0.9016 - loss: 0.2897 - val_accuracy: 0.8468 - val_loss: 0.5086\n","Epoch 38/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 9ms/step - accuracy: 0.9011 - loss: 0.2889 - val_accuracy: 0.8528 - val_loss: 0.4809\n","Epoch 39/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 10ms/step - accuracy: 0.9063 - loss: 0.2709 - val_accuracy: 0.8506 - val_loss: 0.5207\n","Epoch 40/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 9ms/step - accuracy: 0.9082 - loss: 0.2689 - val_accuracy: 0.8546 - val_loss: 0.4983\n","Epoch 41/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 10ms/step - accuracy: 0.9040 - loss: 0.2784 - val_accuracy: 0.8522 - val_loss: 0.5021\n","Epoch 42/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 9ms/step - accuracy: 0.9055 - loss: 0.2769 - val_accuracy: 0.8520 - val_loss: 0.5108\n","Epoch 43/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 10ms/step - accuracy: 0.9098 - loss: 0.2575 - val_accuracy: 0.8470 - val_loss: 0.5368\n","Epoch 44/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 9ms/step - accuracy: 0.9134 - loss: 0.2487 - val_accuracy: 0.8542 - val_loss: 0.4839\n","Epoch 45/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 10ms/step - accuracy: 0.9147 - loss: 0.2523 - val_accuracy: 0.8494 - val_loss: 0.5282\n","Epoch 46/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 9ms/step - accuracy: 0.9162 - loss: 0.2465 - val_accuracy: 0.8538 - val_loss: 0.4990\n","Epoch 47/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 10ms/step - accuracy: 0.9169 - loss: 0.2459 - val_accuracy: 0.8584 - val_loss: 0.4915\n","Epoch 48/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 9ms/step - accuracy: 0.9178 - loss: 0.2409 - val_accuracy: 0.8602 - val_loss: 0.4881\n","Epoch 49/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 10ms/step - accuracy: 0.9168 - loss: 0.2516 - val_accuracy: 0.8578 - val_loss: 0.5049\n","Epoch 50/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 9ms/step - accuracy: 0.9204 - loss: 0.2299 - val_accuracy: 0.8524 - val_loss: 0.4976\n"]},{"output_type":"execute_result","data":{"text/plain":["