{"nbformat":4,"nbformat_minor":0,"metadata":{"colab":{"provenance":[],"gpuType":"T4","authorship_tag":"ABX9TyMdzhccQQnmGAjjqRNUC4cu"},"kernelspec":{"name":"python3","display_name":"Python 3"},"language_info":{"name":"python"},"accelerator":"GPU"},"cells":[{"cell_type":"markdown","source":["Импорт модулей"],"metadata":{"id":"Dzf4Ynt3RHl7"}},{"cell_type":"code","execution_count":null,"metadata":{"id":"reN-TdVHPk0R"},"outputs":[],"source":["# импорт модулей\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":"markdown","source":["Загрузка набора данных"],"metadata":{"id":"g2_CTk0fRX2X"}},{"cell_type":"code","source":["# загрузка датасета\n","from keras.datasets import mnist\n","(X_train, y_train), (X_test, y_test) = mnist.load_data()\n","2\n","# создание своего разбиения датасета\n","from sklearn.model_selection import train_test_split\n","# объединяем в один набор\n","X = np.concatenate((X_train, X_test))\n","y = np.concatenate((y_train, y_test))\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 = 39)\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":"iCzWwhTKRa7Y","executionInfo":{"status":"ok","timestamp":1765220905573,"user_tz":-180,"elapsed":129,"user":{"displayName":"Егор Кирсанов","userId":"10290320580506007453"}},"outputId":"1440dcda-9a84-40a4-bb29-e0733da18c70"},"execution_count":null,"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":"markdown","source":["Предобработка данных"],"metadata":{"id":"tu2I7_uGR4M9"}},{"cell_type":"code","source":["# Зададим параметры данных и модели\n","num_classes = 10\n","input_shape = (28, 28, 1)\n","# Приведение входных данных к диапазону [0, 1]\n","X_train = X_train / 255\n","X_test = X_test / 255\n","# Расширяем размерность входных данных, чтобы каждое изображение имело\n","# размерность (высота, ширина, количество каналов)\n","3\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","# переведем метки в 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":"G3iLFVuhR6WG","executionInfo":{"status":"ok","timestamp":1765220905723,"user_tz":-180,"elapsed":146,"user":{"displayName":"Егор Кирсанов","userId":"10290320580506007453"}},"outputId":"6a287364-8e5d-4a21-d829-dca62ef62be0"},"execution_count":null,"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":"markdown","source":["Реализация сверточной нейронной сети и оценка качества классификации"],"metadata":{"id":"c2-AL2D4SATF"}},{"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","model.summary()"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":430},"id":"9u7K8x36SA3R","executionInfo":{"status":"ok","timestamp":1765220905821,"user_tz":-180,"elapsed":92,"user":{"displayName":"Егор Кирсанов","userId":"10290320580506007453"}},"outputId":"9bf0c568-9fb4-4f44-c492-4160aa8aa5e9"},"execution_count":null,"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_2\"\u001b[0m\n"],"text/html":["
Model: \"sequential_2\"\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_4 (\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_4 (\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_5 (\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_5 (\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_2 (\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_2 (\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_2 (\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_4 (Conv2D) │ (None, 26, 26, 32) │ 320 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ max_pooling2d_4 (MaxPooling2D) │ (None, 13, 13, 32) │ 0 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv2d_5 (Conv2D) │ (None, 11, 11, 64) │ 18,496 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ max_pooling2d_5 (MaxPooling2D) │ (None, 5, 5, 64) │ 0 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ dropout_2 (Dropout) │ (None, 5, 5, 64) │ 0 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ flatten_2 (Flatten) │ (None, 1600) │ 0 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ dense_2 (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)"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"9YdsUe1SSrEM","executionInfo":{"status":"ok","timestamp":1765220930442,"user_tz":-180,"elapsed":24618,"user":{"displayName":"Егор Кирсанов","userId":"10290320580506007453"}},"outputId":"4b648739-f133-4701-dae3-92f26d8af04e"},"execution_count":null,"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[1m7s\u001b[0m 40ms/step - accuracy: 0.6094 - loss: 1.2944 - val_accuracy: 0.9478 - val_loss: 0.1765\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.9412 - loss: 0.1983 - val_accuracy: 0.9695 - val_loss: 0.1006\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.9601 - loss: 0.1309 - val_accuracy: 0.9747 - val_loss: 0.0796\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.9690 - loss: 0.1062 - val_accuracy: 0.9773 - val_loss: 0.0661\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.9728 - loss: 0.0889 - val_accuracy: 0.9802 - val_loss: 0.0581\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.9753 - loss: 0.0769 - val_accuracy: 0.9825 - val_loss: 0.0510\n","Epoch 7/15\n","\u001b[1m106/106\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 12ms/step - accuracy: 0.9781 - loss: 0.0706 - val_accuracy: 0.9845 - val_loss: 0.0472\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.9808 - loss: 0.0646 - val_accuracy: 0.9850 - val_loss: 0.0459\n","Epoch 9/15\n","\u001b[1m106/106\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 12ms/step - accuracy: 0.9822 - loss: 0.0584 - val_accuracy: 0.9858 - val_loss: 0.0412\n","Epoch 10/15\n","\u001b[1m106/106\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 12ms/step - accuracy: 0.9818 - loss: 0.0571 - val_accuracy: 0.9860 - val_loss: 0.0400\n","Epoch 11/15\n","\u001b[1m106/106\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 10ms/step - accuracy: 0.9832 - loss: 0.0542 - val_accuracy: 0.9873 - val_loss: 0.0381\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.9855 - loss: 0.0481 - val_accuracy: 0.9872 - val_loss: 0.0366\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.9852 - loss: 0.0485 - val_accuracy: 0.9882 - val_loss: 0.0353\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.9868 - loss: 0.0448 - val_accuracy: 0.9895 - val_loss: 0.0344\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.9862 - loss: 0.0455 - val_accuracy: 0.9880 - val_loss: 0.0343\n"]},{"output_type":"execute_result","data":{"text/plain":["
Model: \"sequential_16\"\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_26 (\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_27 (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m10\u001b[0m) │ \u001b[38;5;34m1,010\u001b[0m │\n","└─────────────────────────────────┴────────────────────────┴───────────────┘\n"],"text/html":["┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓\n","┃ Layer (type) ┃ Output Shape ┃ Param # ┃\n","┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩\n","│ dense_26 (Dense) │ (None, 100) │ 78,500 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ dense_27 (Dense) │ (None, 10) │ 1,010 │\n","└─────────────────────────────────┴────────────────────────┴───────────────┘\n","\n"]},"metadata":{}},{"output_type":"display_data","data":{"text/plain":["\u001b[1m Total params: \u001b[0m\u001b[38;5;34m79,512\u001b[0m (310.60 KB)\n"],"text/html":["
Total params: 79,512 (310.60 KB)\n","\n"]},"metadata":{}},{"output_type":"display_data","data":{"text/plain":["\u001b[1m Trainable params: \u001b[0m\u001b[38;5;34m79,510\u001b[0m (310.59 KB)\n"],"text/html":["
Trainable params: 79,510 (310.59 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":["X_train_flat = X.reshape(70000, 28*28)\n","X_train_flat = X_train_flat / 255.0\n","X_train_flat, X_test_flat, y_train_flat, y_test_flat = train_test_split(\n"," X_train_flat, y, test_size=10000, train_size=60000, random_state=39\n",")\n","y_train_flat = keras.utils.to_categorical(y_train_flat, num_classes)\n","y_test_flat = keras.utils.to_categorical(y_test_flat, num_classes)\n","print('Shape of transformed X train:', X_train_flat.shape)\n","print('Shape of transformed X test:', X_test_flat.shape)\n","print('Shape of transformed y train:', y_train_flat.shape)\n","print('Shape of transformed y test:', y_test_flat.shape)"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"RdKmjz59W8SB","executionInfo":{"status":"ok","timestamp":1765220934974,"user_tz":-180,"elapsed":287,"user":{"displayName":"Егор Кирсанов","userId":"10290320580506007453"}},"outputId":"2c8d1a9f-2512-4101-fe56-acf38140f186"},"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["Shape of transformed X train: (60000, 784)\n","Shape of transformed X test: (10000, 784)\n","Shape of transformed y train: (60000, 10)\n","Shape of transformed y test: (10000, 10)\n"]}]},{"cell_type":"code","source":["scores = model_lr1.evaluate(X_test_flat, y_test_flat)\n","print('Loss on test data:', scores[0])\n","print('Accuracy on test data:', scores[1])"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"0KJygQVEW_hj","executionInfo":{"status":"ok","timestamp":1765220937230,"user_tz":-180,"elapsed":2254,"user":{"displayName":"Егор Кирсанов","userId":"10290320580506007453"}},"outputId":"992765f0-16df-44d0-ead4-d8f1c9ad6fb4"},"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["\u001b[1m313/313\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 5ms/step - accuracy: 0.9153 - loss: 0.3012\n","Loss on test data: 0.2998492121696472\n","Accuracy on test data: 0.9138000011444092\n"]}]},{"cell_type":"markdown","source":["Работа с набором CIFAR-10"],"metadata":{"id":"uMjahLELXt6z"}},{"cell_type":"code","source":["# загрузка датасета\n","from keras.datasets import cifar10\n","(X_train, y_train), (X_test, y_test) = cifar10.load_data()"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"q5DbBUbCXyR9","executionInfo":{"status":"ok","timestamp":1765221287271,"user_tz":-180,"elapsed":6661,"user":{"displayName":"Егор Кирсанов","userId":"10290320580506007453"}},"outputId":"169ee2f4-76c1-481d-86cf-26e79a78ffe7"},"execution_count":null,"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[1m4s\u001b[0m 0us/step\n"]}]},{"cell_type":"code","source":["# создание своего разбиения датасета\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(\n"," X, y, test_size=10000, train_size=50000, random_state=39\n",")\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":"197DXGkEZSat","executionInfo":{"status":"ok","timestamp":1765221413124,"user_tz":-180,"elapsed":168,"user":{"displayName":"Егор Кирсанов","userId":"10290320580506007453"}},"outputId":"75c95f69-107f-426f-df21-902fe9e78512"},"execution_count":null,"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","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()"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":826},"id":"Ag_MNxOzYR9j","executionInfo":{"status":"ok","timestamp":1765221426490,"user_tz":-180,"elapsed":502,"user":{"displayName":"Егор Кирсанов","userId":"10290320580506007453"}},"outputId":"5092c1cd-e906-425a-de04-016b2de3c140"},"execution_count":null,"outputs":[{"output_type":"display_data","data":{"text/plain":["
Model: \"sequential_15\"\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_52 (\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_29 │ (\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_53 (\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_30 │ (\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","│ batch_normalization_31 │ (\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","│ dropout_37 (\u001b[38;5;33mDropout\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;34m0\u001b[0m │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv2d_54 (\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;34m64\u001b[0m) │ \u001b[38;5;34m18,496\u001b[0m │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv2d_55 (\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;34m64\u001b[0m) │ \u001b[38;5;34m36,928\u001b[0m │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ max_pooling2d_34 (\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;34m64\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ dropout_38 (\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;34m64\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv2d_56 (\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;34m128\u001b[0m) │ \u001b[38;5;34m73,856\u001b[0m │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ max_pooling2d_35 (\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;34m128\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ dropout_39 (\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;34m128\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ flatten_15 (\u001b[38;5;33mFlatten\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m8192\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ dense_27 (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m128\u001b[0m) │ \u001b[38;5;34m1,048,704\u001b[0m │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ dropout_40 (\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_28 (\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_52 (Conv2D) │ (None, 32, 32, 32) │ 896 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ batch_normalization_29 │ (None, 32, 32, 32) │ 128 │\n","│ (BatchNormalization) │ │ │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv2d_53 (Conv2D) │ (None, 32, 32, 32) │ 9,248 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ batch_normalization_30 │ (None, 32, 32, 32) │ 128 │\n","│ (BatchNormalization) │ │ │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ batch_normalization_31 │ (None, 32, 32, 32) │ 128 │\n","│ (BatchNormalization) │ │ │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ dropout_37 (Dropout) │ (None, 32, 32, 32) │ 0 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv2d_54 (Conv2D) │ (None, 32, 32, 64) │ 18,496 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv2d_55 (Conv2D) │ (None, 32, 32, 64) │ 36,928 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ max_pooling2d_34 (MaxPooling2D) │ (None, 16, 16, 64) │ 0 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ dropout_38 (Dropout) │ (None, 16, 16, 64) │ 0 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv2d_56 (Conv2D) │ (None, 16, 16, 128) │ 73,856 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ max_pooling2d_35 (MaxPooling2D) │ (None, 8, 8, 128) │ 0 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ dropout_39 (Dropout) │ (None, 8, 8, 128) │ 0 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ flatten_15 (Flatten) │ (None, 8192) │ 0 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ dense_27 (Dense) │ (None, 128) │ 1,048,704 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ dropout_40 (Dropout) │ (None, 128) │ 0 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ dense_28 (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;34m1,189,802\u001b[0m (4.54 MB)\n"],"text/html":["
Total params: 1,189,802 (4.54 MB)\n","\n"]},"metadata":{}},{"output_type":"display_data","data":{"text/plain":["\u001b[1m Trainable params: \u001b[0m\u001b[38;5;34m1,189,610\u001b[0m (4.54 MB)\n"],"text/html":["
Trainable params: 1,189,610 (4.54 MB)\n","\n"]},"metadata":{}},{"output_type":"display_data","data":{"text/plain":["\u001b[1m Non-trainable params: \u001b[0m\u001b[38;5;34m192\u001b[0m (768.00 B)\n"],"text/html":["
Non-trainable params: 192 (768.00 B)\n","\n"]},"metadata":{}}]},{"cell_type":"code","source":["# компилируем и обучаем модель\n","model.compile(loss=\"categorical_crossentropy\", optimizer=\"adam\", metrics=[\"accuracy\"])\n","model.fit(X_train, y_train, batch_size=64, validation_split=0.1, epochs=50)\n"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"v6einaknayfG","executionInfo":{"status":"ok","timestamp":1765230506617,"user_tz":-180,"elapsed":525401,"user":{"displayName":"Егор Кирсанов","userId":"10290320580506007453"}},"outputId":"b5266b42-dc60-43ca-f817-0aea002c110c"},"execution_count":129,"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[1m26s\u001b[0m 25ms/step - accuracy: 0.2890 - loss: 1.9436 - val_accuracy: 0.5242 - val_loss: 1.3238\n","Epoch 2/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 14ms/step - accuracy: 0.5058 - loss: 1.3752 - val_accuracy: 0.5944 - val_loss: 1.1384\n","Epoch 3/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 14ms/step - accuracy: 0.5717 - loss: 1.1952 - val_accuracy: 0.6540 - val_loss: 1.0330\n","Epoch 4/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 14ms/step - accuracy: 0.6078 - loss: 1.1018 - val_accuracy: 0.6750 - val_loss: 0.9730\n","Epoch 5/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 14ms/step - accuracy: 0.6435 - loss: 1.0084 - val_accuracy: 0.6826 - val_loss: 0.9025\n","Epoch 6/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 15ms/step - accuracy: 0.6635 - loss: 0.9596 - val_accuracy: 0.6910 - val_loss: 0.9187\n","Epoch 7/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m19s\u001b[0m 14ms/step - accuracy: 0.6766 - loss: 0.9151 - val_accuracy: 0.6944 - val_loss: 0.8935\n","Epoch 8/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 14ms/step - accuracy: 0.6900 - loss: 0.8780 - val_accuracy: 0.7118 - val_loss: 0.8351\n","Epoch 9/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 14ms/step - accuracy: 0.7026 - loss: 0.8393 - val_accuracy: 0.7242 - val_loss: 0.8037\n","Epoch 10/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 14ms/step - accuracy: 0.7103 - loss: 0.8130 - val_accuracy: 0.7256 - val_loss: 0.8080\n","Epoch 11/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 15ms/step - accuracy: 0.7247 - loss: 0.7776 - val_accuracy: 0.7216 - val_loss: 0.8186\n","Epoch 12/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 14ms/step - accuracy: 0.7316 - loss: 0.7570 - val_accuracy: 0.7464 - val_loss: 0.7636\n","Epoch 13/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 14ms/step - accuracy: 0.7411 - loss: 0.7408 - val_accuracy: 0.7188 - val_loss: 0.7994\n","Epoch 14/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 14ms/step - accuracy: 0.7461 - loss: 0.7251 - val_accuracy: 0.7462 - val_loss: 0.7230\n","Epoch 15/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 14ms/step - accuracy: 0.7513 - loss: 0.6972 - val_accuracy: 0.7402 - val_loss: 0.7612\n","Epoch 16/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 15ms/step - accuracy: 0.7535 - loss: 0.6857 - val_accuracy: 0.7336 - val_loss: 0.7845\n","Epoch 17/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 14ms/step - accuracy: 0.7570 - loss: 0.6822 - val_accuracy: 0.7594 - val_loss: 0.7080\n","Epoch 18/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 14ms/step - accuracy: 0.7681 - loss: 0.6493 - val_accuracy: 0.7562 - val_loss: 0.7110\n","Epoch 19/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 14ms/step - accuracy: 0.7655 - loss: 0.6519 - val_accuracy: 0.7472 - val_loss: 0.7445\n","Epoch 20/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 14ms/step - accuracy: 0.7692 - loss: 0.6357 - val_accuracy: 0.7504 - val_loss: 0.7394\n","Epoch 21/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 14ms/step - accuracy: 0.7796 - loss: 0.6127 - val_accuracy: 0.7504 - val_loss: 0.7497\n","Epoch 22/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 14ms/step - accuracy: 0.7817 - loss: 0.6067 - val_accuracy: 0.7588 - val_loss: 0.7231\n","Epoch 23/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 14ms/step - accuracy: 0.7868 - loss: 0.5887 - val_accuracy: 0.7700 - val_loss: 0.6992\n","Epoch 24/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 14ms/step - accuracy: 0.7915 - loss: 0.5789 - val_accuracy: 0.7782 - val_loss: 0.6825\n","Epoch 25/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 14ms/step - accuracy: 0.7990 - loss: 0.5668 - val_accuracy: 0.7674 - val_loss: 0.6921\n","Epoch 26/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 15ms/step - accuracy: 0.8018 - loss: 0.5562 - val_accuracy: 0.7748 - val_loss: 0.6816\n","Epoch 27/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 14ms/step - accuracy: 0.8088 - loss: 0.5431 - val_accuracy: 0.7844 - val_loss: 0.6551\n","Epoch 28/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 14ms/step - accuracy: 0.8062 - loss: 0.5438 - val_accuracy: 0.7852 - val_loss: 0.6404\n","Epoch 29/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 14ms/step - accuracy: 0.8089 - loss: 0.5272 - val_accuracy: 0.7744 - val_loss: 0.6705\n","Epoch 30/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 14ms/step - accuracy: 0.8136 - loss: 0.5237 - val_accuracy: 0.7806 - val_loss: 0.6414\n","Epoch 31/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 14ms/step - accuracy: 0.8122 - loss: 0.5183 - val_accuracy: 0.7850 - val_loss: 0.6457\n","Epoch 32/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 14ms/step - accuracy: 0.8202 - loss: 0.5026 - val_accuracy: 0.7744 - val_loss: 0.6928\n","Epoch 33/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 14ms/step - accuracy: 0.8216 - loss: 0.5051 - val_accuracy: 0.7848 - val_loss: 0.6481\n","Epoch 34/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 14ms/step - accuracy: 0.8181 - loss: 0.4995 - val_accuracy: 0.7850 - val_loss: 0.6710\n","Epoch 35/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 14ms/step - accuracy: 0.8242 - loss: 0.4876 - val_accuracy: 0.7900 - val_loss: 0.6416\n","Epoch 36/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 14ms/step - accuracy: 0.8259 - loss: 0.4865 - val_accuracy: 0.7820 - val_loss: 0.6664\n","Epoch 37/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 14ms/step - accuracy: 0.8318 - loss: 0.4723 - val_accuracy: 0.7928 - val_loss: 0.6512\n","Epoch 38/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 14ms/step - accuracy: 0.8304 - loss: 0.4738 - val_accuracy: 0.7980 - val_loss: 0.6287\n","Epoch 39/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 14ms/step - accuracy: 0.8389 - loss: 0.4546 - val_accuracy: 0.7838 - val_loss: 0.6557\n","Epoch 40/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 14ms/step - accuracy: 0.8379 - loss: 0.4542 - val_accuracy: 0.7850 - val_loss: 0.6656\n","Epoch 41/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 14ms/step - accuracy: 0.8414 - loss: 0.4457 - val_accuracy: 0.7942 - val_loss: 0.6333\n","Epoch 42/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 14ms/step - accuracy: 0.8418 - loss: 0.4431 - val_accuracy: 0.7948 - val_loss: 0.6201\n","Epoch 43/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 14ms/step - accuracy: 0.8425 - loss: 0.4342 - val_accuracy: 0.7912 - val_loss: 0.6254\n","Epoch 44/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 14ms/step - accuracy: 0.8442 - loss: 0.4375 - val_accuracy: 0.7920 - val_loss: 0.6304\n","Epoch 45/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 14ms/step - accuracy: 0.8476 - loss: 0.4289 - val_accuracy: 0.8010 - val_loss: 0.6174\n","Epoch 46/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 14ms/step - accuracy: 0.8486 - loss: 0.4237 - val_accuracy: 0.8012 - val_loss: 0.6151\n","Epoch 47/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 14ms/step - accuracy: 0.8526 - loss: 0.4200 - val_accuracy: 0.7984 - val_loss: 0.6139\n","Epoch 48/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 14ms/step - accuracy: 0.8552 - loss: 0.4111 - val_accuracy: 0.8024 - val_loss: 0.6180\n","Epoch 49/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 14ms/step - accuracy: 0.8540 - loss: 0.4089 - val_accuracy: 0.7944 - val_loss: 0.6362\n","Epoch 50/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 14ms/step - accuracy: 0.8590 - loss: 0.3945 - val_accuracy: 0.8000 - val_loss: 0.6588\n"]},{"output_type":"execute_result","data":{"text/plain":["