{"nbformat":4,"nbformat_minor":0,"metadata":{"colab":{"provenance":[],"gpuType":"T4","mount_file_id":"1gkrpjeAWlWtOnSgGJKnb8Wk0XgcP3TKN","authorship_tag":"ABX9TyMJfjzH39xmfrJyANBInNm2"},"kernelspec":{"name":"python3","display_name":"Python 3"},"language_info":{"name":"python"},"accelerator":"GPU"},"cells":[{"cell_type":"code","execution_count":5,"metadata":{"id":"8Eaox8MSUny_","executionInfo":{"status":"ok","timestamp":1765239810073,"user_tz":-180,"elapsed":664,"user":{"displayName":"Мирон Романов","userId":"18135774377279153892"}}},"outputs":[],"source":["import os\n","os.chdir('/content/drive/MyDrive/Colab Notebooks/IS_LR3')"]},{"cell_type":"code","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\n","from sklearn.model_selection import train_test_split"],"metadata":{"id":"dnl7MSY3VEeG","executionInfo":{"status":"ok","timestamp":1765239844707,"user_tz":-180,"elapsed":79,"user":{"displayName":"Мирон Романов","userId":"18135774377279153892"}}},"execution_count":7,"outputs":[]},{"cell_type":"code","source":["# загрузка датасета\n","from keras.datasets import mnist\n","(X_train, y_train), (X_test, y_test) = mnist.load_data()"],"metadata":{"id":"3VzhqxxVVJiu","executionInfo":{"status":"ok","timestamp":1765237242369,"user_tz":-180,"elapsed":385,"user":{"displayName":"Мирон Романов","userId":"18135774377279153892"}}},"execution_count":9,"outputs":[]},{"cell_type":"code","source":["# создание своего разбиения датасета\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 = 35)\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":"5Al6fTwNVK19","executionInfo":{"status":"ok","timestamp":1765237243968,"user_tz":-180,"elapsed":50,"user":{"displayName":"Мирон Романов","userId":"18135774377279153892"}},"outputId":"dc443592-c765-485b-d700-1ec98f808c82"},"execution_count":10,"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","# Приведение входных данных к диапазону [0, 1]\n","X_train = X_train / 255\n","X_test = X_test / 255\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","# переведем метки в 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":"FbJZLGLGVSmT","executionInfo":{"status":"ok","timestamp":1765237248168,"user_tz":-180,"elapsed":160,"user":{"displayName":"Мирон Романов","userId":"18135774377279153892"}},"outputId":"043c5967-826b-406c-dd6a-0b1ef3a1cd79"},"execution_count":11,"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","model.summary()"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":408},"id":"2Va1fgxMV1t9","executionInfo":{"status":"ok","timestamp":1765237286023,"user_tz":-180,"elapsed":343,"user":{"displayName":"Мирон Романов","userId":"18135774377279153892"}},"outputId":"3e355b8f-a860-4d66-ddfd-7b087f5eca8c"},"execution_count":12,"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)"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"Y92HKIZ6WBd6","executionInfo":{"status":"ok","timestamp":1765237942967,"user_tz":-180,"elapsed":609222,"user":{"displayName":"Мирон Романов","userId":"18135774377279153892"}},"outputId":"2c6af7bf-2f0a-4d49-f6c1-a99f57038563"},"execution_count":13,"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[1m42s\u001b[0m 379ms/step - accuracy: 0.5997 - loss: 1.3087 - val_accuracy: 0.9533 - val_loss: 0.1712\n","Epoch 2/15\n","\u001b[1m106/106\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m42s\u001b[0m 392ms/step - accuracy: 0.9412 - loss: 0.1983 - val_accuracy: 0.9698 - val_loss: 0.1051\n","Epoch 3/15\n","\u001b[1m106/106\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m39s\u001b[0m 367ms/step - accuracy: 0.9598 - loss: 0.1331 - val_accuracy: 0.9762 - val_loss: 0.0813\n","Epoch 4/15\n","\u001b[1m106/106\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m40s\u001b[0m 381ms/step - accuracy: 0.9675 - loss: 0.1109 - val_accuracy: 0.9772 - val_loss: 0.0718\n","Epoch 5/15\n","\u001b[1m106/106\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m40s\u001b[0m 380ms/step - accuracy: 0.9724 - loss: 0.0904 - val_accuracy: 0.9807 - val_loss: 0.0629\n","Epoch 6/15\n","\u001b[1m106/106\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m41s\u001b[0m 381ms/step - accuracy: 0.9761 - loss: 0.0784 - val_accuracy: 0.9823 - val_loss: 0.0551\n","Epoch 7/15\n","\u001b[1m106/106\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m41s\u001b[0m 384ms/step - accuracy: 0.9785 - loss: 0.0687 - val_accuracy: 0.9827 - val_loss: 0.0518\n","Epoch 8/15\n","\u001b[1m106/106\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m39s\u001b[0m 364ms/step - accuracy: 0.9812 - loss: 0.0622 - val_accuracy: 0.9842 - val_loss: 0.0484\n","Epoch 9/15\n","\u001b[1m106/106\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m40s\u001b[0m 356ms/step - accuracy: 0.9818 - loss: 0.0592 - val_accuracy: 0.9850 - val_loss: 0.0452\n","Epoch 10/15\n","\u001b[1m106/106\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m41s\u001b[0m 355ms/step - accuracy: 0.9829 - loss: 0.0551 - val_accuracy: 0.9853 - val_loss: 0.0440\n","Epoch 11/15\n","\u001b[1m106/106\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m41s\u001b[0m 357ms/step - accuracy: 0.9837 - loss: 0.0530 - val_accuracy: 0.9868 - val_loss: 0.0413\n","Epoch 12/15\n","\u001b[1m106/106\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m41s\u001b[0m 359ms/step - accuracy: 0.9851 - loss: 0.0479 - val_accuracy: 0.9870 - val_loss: 0.0394\n","Epoch 13/15\n","\u001b[1m106/106\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m40s\u001b[0m 375ms/step - accuracy: 0.9850 - loss: 0.0482 - val_accuracy: 0.9875 - val_loss: 0.0397\n","Epoch 14/15\n","\u001b[1m106/106\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m41s\u001b[0m 371ms/step - accuracy: 0.9851 - loss: 0.0455 - val_accuracy: 0.9883 - val_loss: 0.0372\n","Epoch 15/15\n","\u001b[1m106/106\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m39s\u001b[0m 370ms/step - accuracy: 0.9864 - loss: 0.0406 - val_accuracy: 0.9875 - val_loss: 0.0384\n"]},{"output_type":"execute_result","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","│ dense_1 (\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_2 (\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_1 (Dense) │ (None, 100) │ 78,500 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ dense_2 (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, X_test, y_train, y_test = train_test_split(X, y,\n"," test_size = 10000,\n"," train_size = 60000,\n"," random_state = 35)\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":"-w2XrJqrb0Qk","executionInfo":{"status":"ok","timestamp":1765238860632,"user_tz":-180,"elapsed":1366,"user":{"displayName":"Мирон Романов","userId":"18135774377279153892"}},"outputId":"1fef36c3-6b34-48d0-d5fa-6bd2b996856c"},"execution_count":22,"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])"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"M3VJoerVb8rW","executionInfo":{"status":"ok","timestamp":1765238891385,"user_tz":-180,"elapsed":4771,"user":{"displayName":"Мирон Романов","userId":"18135774377279153892"}},"outputId":"56d5e756-d6f8-4ee4-a33e-db32f219cde5"},"execution_count":23,"outputs":[{"output_type":"stream","name":"stdout","text":["\u001b[1m313/313\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 5ms/step - accuracy: 0.9166 - loss: 0.3003\n","Loss on test data: 0.3069264590740204\n","Accuracy on test data: 0.9150000214576721\n"]}]},{"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":"T9k32HbZcuGf","executionInfo":{"status":"ok","timestamp":1765239800398,"user_tz":-180,"elapsed":12853,"user":{"displayName":"Мирон Романов","userId":"18135774377279153892"}},"outputId":"2ccb8643-f330-4e6c-a6e3-76d9de3c82c5"},"execution_count":2,"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[1m5s\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 = 35)\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":"nP5ZVWTbeJj1","executionInfo":{"status":"ok","timestamp":1765239855697,"user_tz":-180,"elapsed":134,"user":{"displayName":"Мирон Романов","userId":"18135774377279153892"}},"outputId":"66d6f70c-4774-4373-8db0-aadfb2e4f817"},"execution_count":8,"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()\n"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":826},"id":"oXnbRrUBcxPE","executionInfo":{"status":"ok","timestamp":1765239859750,"user_tz":-180,"elapsed":765,"user":{"displayName":"Мирон Романов","userId":"18135774377279153892"}},"outputId":"0d4d6261-4ee7-4258-a5ff-e5affa16cd14"},"execution_count":9,"outputs":[{"output_type":"display_data","data":{"text/plain":["
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;34m30\u001b[0m, \u001b[38;5;34m30\u001b[0m, \u001b[38;5;34m32\u001b[0m) │ \u001b[38;5;34m896\u001b[0m │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ max_pooling2d (\u001b[38;5;33mMaxPooling2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m15\u001b[0m, \u001b[38;5;34m15\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;34m13\u001b[0m, \u001b[38;5;34m13\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;34m6\u001b[0m, \u001b[38;5;34m6\u001b[0m, \u001b[38;5;34m64\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv2d_2 (\u001b[38;5;33mConv2D\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;34m73,856\u001b[0m │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ max_pooling2d_2 (\u001b[38;5;33mMaxPooling2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m2\u001b[0m, \u001b[38;5;34m2\u001b[0m, \u001b[38;5;34m128\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;34m512\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;34m128\u001b[0m) │ \u001b[38;5;34m65,664\u001b[0m │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ dropout (\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_1 (\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 (Conv2D) │ (None, 30, 30, 32) │ 896 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ max_pooling2d (MaxPooling2D) │ (None, 15, 15, 32) │ 0 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv2d_1 (Conv2D) │ (None, 13, 13, 64) │ 18,496 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ max_pooling2d_1 (MaxPooling2D) │ (None, 6, 6, 64) │ 0 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv2d_2 (Conv2D) │ (None, 4, 4, 128) │ 73,856 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ max_pooling2d_2 (MaxPooling2D) │ (None, 2, 2, 128) │ 0 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ flatten (Flatten) │ (None, 512) │ 0 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ dense (Dense) │ (None, 128) │ 65,664 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ dropout (Dropout) │ (None, 128) │ 0 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ dense_1 (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;34m160,202\u001b[0m (625.79 KB)\n"],"text/html":["
Total params: 160,202 (625.79 KB)\n","\n"]},"metadata":{}},{"output_type":"display_data","data":{"text/plain":["\u001b[1m Trainable params: \u001b[0m\u001b[38;5;34m160,202\u001b[0m (625.79 KB)\n"],"text/html":["
Trainable params: 160,202 (625.79 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 = 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)"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"eRutWFYse5eZ","executionInfo":{"status":"ok","timestamp":1765240059049,"user_tz":-180,"elapsed":169608,"user":{"displayName":"Мирон Романов","userId":"18135774377279153892"}},"outputId":"e835fa53-6fb0-4a3d-93dd-2e5da962f61e"},"execution_count":12,"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[1m12s\u001b[0m 10ms/step - accuracy: 0.2665 - loss: 1.9447 - val_accuracy: 0.4852 - val_loss: 1.4141\n","Epoch 2/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 4ms/step - accuracy: 0.4775 - loss: 1.4451 - val_accuracy: 0.5650 - val_loss: 1.2281\n","Epoch 3/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 4ms/step - accuracy: 0.5397 - loss: 1.2815 - val_accuracy: 0.6018 - val_loss: 1.1288\n","Epoch 4/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 4ms/step - accuracy: 0.5841 - loss: 1.1718 - val_accuracy: 0.6170 - val_loss: 1.0916\n","Epoch 5/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 5ms/step - accuracy: 0.6163 - loss: 1.1004 - val_accuracy: 0.6434 - val_loss: 1.0126\n","Epoch 6/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 4ms/step - accuracy: 0.6398 - loss: 1.0222 - val_accuracy: 0.6596 - val_loss: 0.9966\n","Epoch 7/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 4ms/step - accuracy: 0.6629 - loss: 0.9663 - val_accuracy: 0.6488 - val_loss: 0.9930\n","Epoch 8/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 5ms/step - accuracy: 0.6819 - loss: 0.9165 - val_accuracy: 0.6808 - val_loss: 0.9155\n","Epoch 9/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 4ms/step - accuracy: 0.6976 - loss: 0.8693 - val_accuracy: 0.6846 - val_loss: 0.9188\n","Epoch 10/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 4ms/step - accuracy: 0.7092 - loss: 0.8309 - val_accuracy: 0.6960 - val_loss: 0.8803\n","Epoch 11/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 4ms/step - accuracy: 0.7252 - loss: 0.7833 - val_accuracy: 0.6866 - val_loss: 0.9156\n","Epoch 12/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 4ms/step - accuracy: 0.7389 - loss: 0.7513 - val_accuracy: 0.6980 - val_loss: 0.8891\n","Epoch 13/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 5ms/step - accuracy: 0.7489 - loss: 0.7227 - val_accuracy: 0.7106 - val_loss: 0.8728\n","Epoch 14/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 4ms/step - accuracy: 0.7589 - loss: 0.6988 - val_accuracy: 0.7116 - val_loss: 0.8715\n","Epoch 15/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 4ms/step - accuracy: 0.7630 - loss: 0.6719 - val_accuracy: 0.7134 - val_loss: 0.8539\n","Epoch 16/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 4ms/step - accuracy: 0.7742 - loss: 0.6419 - val_accuracy: 0.7150 - val_loss: 0.8817\n","Epoch 17/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 5ms/step - accuracy: 0.7751 - loss: 0.6425 - val_accuracy: 0.7134 - val_loss: 0.8575\n","Epoch 18/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 4ms/step - accuracy: 0.7923 - loss: 0.5986 - val_accuracy: 0.6882 - val_loss: 0.9823\n","Epoch 19/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 4ms/step - accuracy: 0.8005 - loss: 0.5771 - val_accuracy: 0.7208 - val_loss: 0.8856\n","Epoch 20/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 4ms/step - accuracy: 0.8014 - loss: 0.5661 - val_accuracy: 0.7152 - val_loss: 0.9009\n","Epoch 21/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 5ms/step - accuracy: 0.8071 - loss: 0.5448 - val_accuracy: 0.7080 - val_loss: 0.9332\n","Epoch 22/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 4ms/step - accuracy: 0.8152 - loss: 0.5233 - val_accuracy: 0.7128 - val_loss: 0.9202\n","Epoch 23/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 4ms/step - accuracy: 0.8201 - loss: 0.5059 - val_accuracy: 0.7152 - val_loss: 0.9343\n","Epoch 24/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 5ms/step - accuracy: 0.8243 - loss: 0.4981 - val_accuracy: 0.7188 - val_loss: 0.9274\n","Epoch 25/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 4ms/step - accuracy: 0.8289 - loss: 0.4826 - val_accuracy: 0.7162 - val_loss: 0.9568\n","Epoch 26/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 4ms/step - accuracy: 0.8365 - loss: 0.4606 - val_accuracy: 0.7162 - val_loss: 0.9787\n","Epoch 27/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 4ms/step - accuracy: 0.8361 - loss: 0.4606 - val_accuracy: 0.7208 - val_loss: 0.9641\n","Epoch 28/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 4ms/step - accuracy: 0.8425 - loss: 0.4403 - val_accuracy: 0.7202 - val_loss: 0.9633\n","Epoch 29/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 4ms/step - accuracy: 0.8440 - loss: 0.4314 - val_accuracy: 0.7254 - val_loss: 0.9901\n","Epoch 30/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 4ms/step - accuracy: 0.8516 - loss: 0.4154 - val_accuracy: 0.7136 - val_loss: 1.0164\n","Epoch 31/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 4ms/step - accuracy: 0.8546 - loss: 0.4067 - val_accuracy: 0.7190 - val_loss: 1.0651\n","Epoch 32/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 5ms/step - accuracy: 0.8592 - loss: 0.3928 - val_accuracy: 0.7224 - val_loss: 1.0705\n","Epoch 33/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 4ms/step - accuracy: 0.8589 - loss: 0.3900 - val_accuracy: 0.7110 - val_loss: 1.0371\n","Epoch 34/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 4ms/step - accuracy: 0.8632 - loss: 0.3763 - val_accuracy: 0.7196 - val_loss: 1.0296\n","Epoch 35/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 4ms/step - accuracy: 0.8702 - loss: 0.3570 - val_accuracy: 0.7188 - val_loss: 1.0846\n","Epoch 36/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 5ms/step - accuracy: 0.8721 - loss: 0.3516 - val_accuracy: 0.7166 - val_loss: 1.1253\n","Epoch 37/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 4ms/step - accuracy: 0.8725 - loss: 0.3537 - val_accuracy: 0.7172 - val_loss: 1.1199\n","Epoch 38/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 4ms/step - accuracy: 0.8694 - loss: 0.3607 - val_accuracy: 0.7152 - val_loss: 1.1645\n","Epoch 39/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 4ms/step - accuracy: 0.8754 - loss: 0.3421 - val_accuracy: 0.7154 - val_loss: 1.2121\n","Epoch 40/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 4ms/step - accuracy: 0.8731 - loss: 0.3501 - val_accuracy: 0.7184 - val_loss: 1.1481\n","Epoch 41/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 5ms/step - accuracy: 0.8793 - loss: 0.3328 - val_accuracy: 0.7174 - val_loss: 1.2047\n","Epoch 42/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 4ms/step - accuracy: 0.8836 - loss: 0.3210 - val_accuracy: 0.7140 - val_loss: 1.2677\n","Epoch 43/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 4ms/step - accuracy: 0.8847 - loss: 0.3154 - val_accuracy: 0.7098 - val_loss: 1.2376\n","Epoch 44/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 4ms/step - accuracy: 0.8894 - loss: 0.3046 - val_accuracy: 0.7088 - val_loss: 1.2208\n","Epoch 45/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 5ms/step - accuracy: 0.8886 - loss: 0.3104 - val_accuracy: 0.7046 - val_loss: 1.3501\n","Epoch 46/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 4ms/step - accuracy: 0.8900 - loss: 0.3018 - val_accuracy: 0.7086 - val_loss: 1.3483\n","Epoch 47/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 4ms/step - accuracy: 0.8901 - loss: 0.3028 - val_accuracy: 0.7100 - val_loss: 1.4048\n","Epoch 48/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 4ms/step - accuracy: 0.8948 - loss: 0.2922 - val_accuracy: 0.7044 - val_loss: 1.3963\n","Epoch 49/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 5ms/step - accuracy: 0.8944 - loss: 0.2900 - val_accuracy: 0.7124 - val_loss: 1.3789\n","Epoch 50/50\n","\u001b[1m704/704\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 4ms/step - accuracy: 0.8971 - loss: 0.2795 - val_accuracy: 0.7118 - val_loss: 1.3672\n"]},{"output_type":"execute_result","data":{"text/plain":["