From 9ee4fbdc337e46dec8d6ff0532b3eeba3bf50717 Mon Sep 17 00:00:00 2001 From: ChaginSA Date: Sat, 20 Sep 2025 17:37:43 +0000 Subject: [PATCH] =?UTF-8?q?=D0=97=D0=B0=D0=B3=D1=80=D1=83=D0=B7=D0=B8?= =?UTF-8?q?=D0=BB(=D0=B0)=20=D1=84=D0=B0=D0=B9=D0=BB=D1=8B=20=D0=B2=20'lab?= =?UTF-8?q?works/LW1'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- labworks/LW1/11.png | Bin 0 -> 6415 bytes labworks/LW1/12.png | Bin 0 -> 6485 bytes labworks/LW1/13.png | Bin 0 -> 6442 bytes labworks/LW1/IS_LR1.ipynb | 2484 +++++++++++++++++++++++++++++++++++++ labworks/LW1/report.md | 576 +++++++++ 5 files changed, 3060 insertions(+) create mode 100644 labworks/LW1/11.png create mode 100644 labworks/LW1/12.png create mode 100644 labworks/LW1/13.png create mode 100644 labworks/LW1/IS_LR1.ipynb create mode 100644 labworks/LW1/report.md diff --git a/labworks/LW1/11.png b/labworks/LW1/11.png new file mode 100644 index 0000000000000000000000000000000000000000..e333ccf926f3be5cf9ccec981c4234ed7eda9d6b GIT binary patch literal 6415 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 literal 0 HcmV?d00001 diff --git a/labworks/LW1/13.png b/labworks/LW1/13.png new file mode 100644 index 0000000000000000000000000000000000000000..cf1f62986f32e49baaefb88c7a26d8ab9acd6d97 GIT binary patch literal 6442 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 XZVKH;^DW^a@S|}}N2UDgod^E`665`P literal 0 HcmV?d00001 diff --git a/labworks/LW1/IS_LR1.ipynb b/labworks/LW1/IS_LR1.ipynb new file mode 100644 index 0000000..3056fe2 --- /dev/null +++ b/labworks/LW1/IS_LR1.ipynb @@ -0,0 +1,2484 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "provenance": [] + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3" + }, + "language_info": { + "name": "python" + } + }, + "cells": [ + { + "cell_type": "code", + "execution_count": 216, + "metadata": { + "id": "HUUZx52sc1LD" + }, + "outputs": [], + "source": [ + "import os\n", + "os.chdir('/content/drive/MyDrive/Colab Notebooks')" + ] + }, + { + "cell_type": "code", + "source": [ + "# импорт модулей\n", + "from tensorflow import keras\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "import sklearn" + ], + "metadata": { + "id": "3Y-Ux1dadqdA" + }, + "execution_count": 217, + "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": "w25XE8ADdqP5" + }, + "execution_count": 218, + "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 = 19) #(5*4-1)" + ], + "metadata": { + "id": "QcXt9zqCdqDH" + }, + "execution_count": 219, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "# вывод размерностей\n", + "print('Shape of X train:', X_train.shape)\n", + "print('Shape of y train:', y_train.shape)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "9Cd705vod51B", + "outputId": "dc7fdd80-1b3d-47c8-d47c-eb5e1a684976" + }, + "execution_count": 220, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Shape of X train: (60000, 28, 28)\n", + "Shape of y train: (60000,)\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "# Выводим 4 изображения\n", + "plt.figure(figsize=(10, 3))\n", + "for i in range(4):\n", + " plt.subplot(1, 4, i + 1)\n", + " plt.imshow(X_train[i], cmap='gray')\n", + " plt.title(f'Label: {y_train[i]}')\n", + " plt.axis('off')\n", + "plt.tight_layout()\n", + "plt.show()\n", + "\n" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 290 + }, + "id": "vLYfI---d5rm", + "outputId": "f8378365-1dc8-4315-b3a9-13c68cc1c42b" + }, + "execution_count": 221, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA90AAAERCAYAAABme8RgAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAHydJREFUeJzt3XuU1lW9P/A9XByUSyBihAqGWkihqOONdKVSAupKsgFcHbxEehJxiSzpdAwLogtmckRPKoWGmqyyZaiYqZniMTsIulpgmAhMEApeQFTAuCh8f3/4k2VncO8ZZjYzzzOv11r+4fPe890fH9nz8PaL860oiqIIAAAAQKNr1dQDAAAAQLlSugEAACATpRsAAAAyUboBAAAgE6UbAAAAMlG6AQAAIBOlGwAAADJRugEAACATpRsAAAAyUbpL3MqVK0NFRUW47rrrGu2aTzzxRKioqAhPPPFEo10TqB9nG8qPcw3lx7mmLpTuJnD77beHioqK8Oyzzzb1KFndfffd4cQTTwzt27cPnTt3DgMGDAiPP/54U48F2bSEs7169eowfPjw0Llz59CpU6dw9tlnh7///e9NPRZkU+7n+t577w2DBg0KPXr0CJWVleHAAw8M1dXVYfHixU09GmRT7ud60qRJoaKiotZf7dq1a+rRWqw2TT0A5WnSpElh8uTJobq6Olx44YXh3XffDYsXLw6rV69u6tGA3bRp06Zw6qmnhrfffjt8+9vfDm3btg3XX399+PznPx8WLlwYunbt2tQjAvX017/+NXTp0iWMHTs27LfffuHVV18Nv/jFL8Jxxx0X5s2bF4488simHhHYTbfcckvo0KHDzr9v3bp1E07TsindNLqnn346TJ48OUydOjWMGzeuqccBGsnNN98cli1bFhYsWBCOPfbYEEIIQ4YMCZ/97GfD1KlTw49+9KMmnhCor+9+97u1XrvooovCgQceGG655ZYwffr0JpgKaAzV1dVhv/32a+oxCP54ebO1bdu28N3vfjccc8wx4WMf+1ho3759OPnkk8PcuXM/8muuv/760KtXr7D33nuHz3/+87v8o2FLliwJ1dXVYd999w3t2rULVVVVYc6cOcl5/vnPf4YlS5aEdevWJddOmzYtdO/ePYwdOzYURRE2bdqU/BpoKUr5bN9zzz3h2GOP3Vm4QwihT58+YeDAgeE3v/lN8uuhXJXyud6V/fffP+yzzz7hrbfe2q2vh3JQDue6KIqwYcOGUBRFnb+GPJTuZmrDhg3h1ltvDaecckr48Y9/HCZNmhTWrl0bBg0aFBYuXFhr/Z133hluvPHGMGbMmHDVVVeFxYsXh9NOOy289tprO9c8//zz4YQTTggvvPBC+M///M8wderU0L59+zB06NBw7733RudZsGBBOPzww8NPf/rT5OyPPfZYOPbYY8ONN94YunXrFjp27Bg+8YlP1OlrodyV6tnesWNHeO6550JVVVWt7Ljjjgs1NTVh48aNdXsToMyU6rn+sLfeeiusXbs2/PWvfw0XXXRR2LBhQxg4cGCdvx7KTTmc6969e4ePfexjoWPHjmHkyJH/Mgt7WMEeN3PmzCKEUDzzzDMfuea9994rtm7d+i+vvfnmm8XHP/7xYtSoUTtfW7FiRRFCKPbee+/i5Zdf3vn6/PnzixBCMW7cuJ2vDRw4sOjXr1+xZcuWna/t2LGjGDBgQHHYYYftfG3u3LlFCKGYO3durdcmTpwY/Wdbv359EUIounbtWnTo0KH4yU9+Utx9993F4MGDixBCMX369OjXQykr57O9du3aIoRQTJ48uVZ20003FSGEYsmSJdFrQCkq53P9YZ/+9KeLEEIRQig6dOhQXH311cX27dvr/PVQSsr9XE+bNq247LLLilmzZhX33HNPMXbs2KJNmzbFYYcdVrz99tvJr6fxudPdTLVu3TrstddeIYT37zCtX78+vPfee6Gqqir85S9/qbV+6NCh4YADDtj598cdd1w4/vjjw+9///sQQgjr168Pjz/+eBg+fHjYuHFjWLduXVi3bl144403wqBBg8KyZcuiP+TslFNOCUVRhEmTJkXn/uCPkr/xxhvh1ltvDePHjw/Dhw8PDz74YOjbt2/4wQ9+UN+3AspKqZ7tzZs3hxBCqKysrJV98NNQP1gDLU2pnusPmzlzZnj44YfDzTffHA4//PCwefPmsH379jp/PZSbUj7XY8eODf/93/8dvvrVr4avfOUrYdq0aeGOO+4Iy5YtCzfffHM93wkag9LdjN1xxx3hiCOOCO3atQtdu3YN3bp1Cw8++GB4++23a6097LDDar32qU99KqxcuTKEEMLy5ctDURThO9/5TujWrdu//DVx4sQQQgivv/56g2fee++9QwghtG3bNlRXV+98vVWrVmHE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bgAAAMhE6QYAAIBMlG4AAADIROkGAACATJRuAAAAyKSiSD3J+4OFFRW5Z6GO7r///uSaT33qU9F8wIAB0fzNN9+s10w0rToe41qaw7k+5JBDovnSpUsbvMcXvvCFaD537twG79FQ119/fXLN5ZdfvgcmaZj//d//jebf//73k9f4wx/+0FjjlLTdPdchNI+zvSd06tQpmg8bNix5jWuvvTaad+nSpV4z/V91+TzdtGlTNG/Xrl0032effZJ7tG/fPrkmZuXKldF8yJAhyWu8+OKLDZqhXJTyZzawa6lz7U43AAAAZKJ0AwAAQCZKNwAAAGSidAMAAEAmSjcAAABkonQDAABAJko3AAAAZNKmqQegtiuvvDKan3HGGclrfPGLX4zmnsNNc3HxxRc39QjNwg033JBcc/7550fzzp07R/N169Yl91ixYkU0r6qqiuYDBgyI5r/+9a+TMzz22GPR/Kqrrormy5cvT+5BaTjhhBOi+U9/+tNofvTRRyf3SJ2L2267LZqnfk0vXbo0OcNLL70Uzbt169agPIQQPvGJT0TzCRMmRPNTTjklmj/yyCPJGQ4++ODkGoBy5E43AAAAZKJ0AwAAQCZKNwAAAGSidAMAAEAmSjcAAABkonQDAABAJko3AAAAZOI53c3Q0KFDo/m8efOS16jLGqD5WLlyZXLNyJEjo/ldd90VzRcuXJjc40tf+lI0Tz03OfX1V1xxRXKGc845J5r36tUrmo8bNy65x5///OfkGpreE088Ec332muvaP7ggw8m96iuro7mW7duTV4jt7Vr1zYoDyGEv/3tb9E89V6//PLL0fyAAw5IznDIIYdE85qamuQ1gPLSpk26jqZ+79G9e/dofvTRR0fz119/PTnDtGnTkmti3OkGAACATJRuAAAAyETpBgAAgEyUbgAAAMhE6QYAAIBMlG4AAADIROkGAACATJRuAAAAyCT9NHIaXa9evaL5EUccEc1HjRqV3GPr1q31mgmayuGHH559jz59+kTzuXPnZp+hMTz00EPR/Le//W00//rXv57cY9y4cdH8mmuuiebz5s2L5m+++WZyhtGjR0fzY445Jpp/73vfS+5xxhlnRPNt27Ylr0F+l1xySTRfvHhxNH/hhReSe/i8fF/qe/E+++wTzd95553kHjU1NfWaCZpKx44do/m1116bvMYNN9wQzV955ZVo3r9//+QePXv2TK6JWbt2bTTv1q1b8hqnn356NN9vv/2i+bHHHpvcI/W9Y+nSpdF8/vz50fzJJ59MztBQ7nQDAABAJko3AAAAZKJ0AwAAQCZKNwAAAGSidAMAAEAmSjcAAABkonQDAABAJhVFURR1WlhRkXuWFmPGjBnR/OSTT47mRx11VHKPzZs312smSlsdj3EtzeFcp2bfsWNHg/d45JFHonnqmc2lYu+9947mM2fOTF5jyJAh0Tz1vM133303uUdKVVVVNH/ggQei+f7775/cY/bs2dF82LBhyWvktrvnOoTmcbZpXiorK6P5ihUronn37t2j+YQJE5IzTJkyJbmmJSjlz+yW4rzzzovmd955Z/IaX/va16J56t/nqFGjknukPvcbqi7Pr06tST2P/I033kjusXz58uSappY61+50AwAAQCZKNwAAAGSidAMAAEAmSjcAAABkonQDAABAJko3AAAAZKJ0AwAAQCZtmnqAcrTvvvtG8yOPPDKaDx48OJp7Bjfl5KmnnormAwYM2EOTlL7U94aRI0cmr3HllVdG88Z4bnrKs88+G81XrVoVzevynO5zzjmnXjNBc3bqqacm19xxxx3RPPUc7ueffz6az5w5MzkDNBetW7eO5qnfi9fls3DhwoUNyp2p8uJONwAAAGSidAMAAEAmSjcAAABkonQDAABAJko3AAAAZKJ0AwAAQCZKNwAAAGTiOd0Z/PKXv4zmn/zkJ6P5pk2bGnOcbDp06BDNR4wY0aDrb9y4Mblmzpw50XzLli0NmoH87r///mhel+fSDxw4MJr36dMnmvfo0SO5x5o1a5Jrmrv33nsvuebHP/7xHpgE+LBWreL3QI444ohonvosDCGE9u3bR/MHHnggml922WXR/NVXX03OAM3F6aefHs2HDRsWzUeOHJncI/UcbloWd7oBAAAgE6UbAAAAMlG6AQAAIBOlGwAAADJRugEAACATpRsAAAAyUboBAAAgE6UbAAAAMmnT1AOUmjZt0m/ZQQcdFM0nT54czdetW1evmXK4/PLLk2suueSSaN6nT5/GGucj/eUvf4nmp512WjTfsGFDY47Dbrjuuuui+X333Ze8xosvvhjNe/XqFc27deuW3GPNmjXJNZSOBx98sKlHgJ3OPPPMaH7//fc3eI+bbropmk+ZMiWa+x5IKUn9HvTnP/95NG/btm00nz59enKG1O9BJ0yYEM3Xrl2b3KMoiuQamgd3ugEAACATpRsAAAAyUboBAAAgE6UbAAAAMlG6AQAAIBOlGwAAADJRugEAACATz+mup65duybXHHjggdH80UcfbaxxPtI+++wTzb/3ve9F8yuvvLIxx8nm6KOPjubnnHNONL/99tsbcRpKVerXSQghLFq0aA9Mwp7y/PPPN/UIlIj+/ftH8wsvvDCaH3/88ck9qqqq6jHR7lm3bl0037x5c/YZoDH07NkzuWbx4sXR/PXXX4/mZ5xxRjTfvn17cobzzjsvmq9cuTKaX3PNNck9Jk+enFxD8+BONwAAAGSidAMAAEAmSjcAAABkonQDAABAJko3AAAAZKJ0AwAAQCZKNwAAAGTiOd31lHoudAghdO7cOf8gCddff300v/jii6N5URTJPaZPnx7NZ8yYkbxGzNe//vXkmjFjxkTzvfbaq0Ez0PTeeeed5Jo1a9ZE8x49ekTz3r1712sm8jrmmGOieZ8+fRq8x6xZsxp8DcpD6tfTn/70p2jevn37aF6X519v2rQpuSamY8eOyTUTJ06M5hdccEE0P//886P5U089lZwBGsNhhx2WXNO6detofvvtt0fzhx56qD4j7dIf/vCHaP7DH/4wms+ZMye5R+p54ak92HPc6QYAAIBMlG4AAADIROkGAACATJRuAAAAyETpBgAAgEyUbgAAAMhE6QYAAIBMlG4AAADIpE1TD1Bqxo4d29QjhK997WvJNaNGjYrmb731VjQfMGBAco8lS5Yk1zTEli1bkmveeeedaP673/2uscahibzyyivJNf/+7/8ezVO/Ds4666zkHl/84hej+aOPPpq8BnVzxRVXRPMOHTpE82XLliX3WLFiRX1GooylPsu++c1vRvPXXnstmj/33HPJGWpqapJrYuryPWzcuHHR/NRTT43mU6ZMieZnn312cob169cn10DK448/nlzTpk284uzYsaOxxtltqe89n/nMZ5LXSP0e6bHHHovmTz/9dHIPGoc73QAAAJCJ0g0AAACZKN0AAACQidINAAAAmSjdAAAAkInSDQAAAJko3QAAAJBJRVEURZ0WVlTknqUkHHfccck1qWfe/eY3v4nmixYtiubf+ta3kjN06tQpmp944onRfP78+ck9Us9APPnkk6P5sGHDonnqWeMhhLB48eJoXlVVlbxGOajj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\n" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "code", + "source": [ + "# развернем каждое изображение 28*28 в вектор 784\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)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "d0oyu59gd5fz", + "outputId": "c3751271-2547-45ec-e128-d5dae91c4e1d" + }, + "execution_count": 222, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Shape of transformed X train: (60000, 784)\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "# переведем метки в one-hot\n", + "from keras.utils import to_categorical\n", + "\n", + "y_train = to_categorical(y_train)\n", + "y_test = to_categorical(y_test)\n", + "\n", + "print('Shape of transformed y train:', y_train.shape)\n", + "num_classes = y_train.shape[1]" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "Q227fINPeD1A", + "outputId": "ab9f7f29-cc44-4b76-fe55-b42117bf583f" + }, + "execution_count": 223, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Shape of transformed y train: (60000, 10)\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "from keras.models import Sequential\n", + "from keras.layers import Dense" + ], + "metadata": { + "id": "TzaA61smeDoO" + }, + "execution_count": 224, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "# 1. создаем модель - объявляем ее объектом класса Sequential\n", + "model = Sequential()\n", + "# 2. добавляем выходной слой(скрытые слои отсутствуют)\n", + "model.add(Dense(units=num_classes, activation='softmax'))\n", + "# 3. компилируем модель\n", + "model.compile(loss='categorical_crossentropy', optimizer='sgd', metrics=['accuracy'])" + ], + "metadata": { + "id": "Liq39zruhz0d" + }, + "execution_count": 225, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "# вывод информации об архитектуре модели\n", + "print(model.summary())" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 179 + }, + "id": "jMGGsq7piZOu", + "outputId": "cdef6cfe-58f4-4554-dc6a-87b4dec3f1b1" + }, + "execution_count": 226, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "\u001b[1mModel: \"sequential_6\"\u001b[0m\n" + ], + "text/html": [ + "
Model: \"sequential_6\"\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_18 (\u001b[38;5;33mDense\u001b[0m) │ ? │ \u001b[38;5;34m0\u001b[0m (unbuilt) │\n", + "└─────────────────────────────────┴────────────────────────┴───────────────┘\n" + ], + "text/html": [ + "
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓\n",
+              "┃ Layer (type)                     Output Shape                  Param # ┃\n",
+              "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩\n",
+              "│ dense_18 (Dense)                │ ?                      │   0 (unbuilt) │\n",
+              "└─────────────────────────────────┴────────────────────────┴───────────────┘\n",
+              "
\n" + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "\u001b[1m Total params: \u001b[0m\u001b[38;5;34m0\u001b[0m (0.00 B)\n" + ], + "text/html": [ + "
 Total params: 0 (0.00 B)\n",
+              "
\n" + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "\u001b[1m Trainable params: \u001b[0m\u001b[38;5;34m0\u001b[0m (0.00 B)\n" + ], + "text/html": [ + "
 Trainable params: 0 (0.00 B)\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": "stream", + "name": "stdout", + "text": [ + "None\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "# Обучаем модель\n", + "H = model.fit(X_train, y_train, validation_split=0.1, epochs=50)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "n_pCdxphiedM", + "outputId": "bf57db6e-af51-497b-e312-e042a6038ea2" + }, + "execution_count": 227, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Epoch 1/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 2ms/step - accuracy: 0.7042 - loss: 1.1653 - val_accuracy: 0.8770 - val_loss: 0.5080\n", + "Epoch 2/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.8784 - loss: 0.4844 - val_accuracy: 0.8907 - val_loss: 0.4209\n", + "Epoch 3/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 3ms/step - accuracy: 0.8895 - loss: 0.4177 - val_accuracy: 0.8992 - val_loss: 0.3834\n", + "Epoch 4/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.8945 - loss: 0.3846 - val_accuracy: 0.9028 - val_loss: 0.3628\n", + "Epoch 5/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.9008 - loss: 0.3695 - val_accuracy: 0.9048 - val_loss: 0.3491\n", + "Epoch 6/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 3ms/step - accuracy: 0.9022 - loss: 0.3552 - val_accuracy: 0.9063 - val_loss: 0.3407\n", + "Epoch 7/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 3ms/step - accuracy: 0.9052 - loss: 0.3446 - val_accuracy: 0.9090 - val_loss: 0.3315\n", + "Epoch 8/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 3ms/step - accuracy: 0.9069 - loss: 0.3360 - val_accuracy: 0.9090 - val_loss: 0.3263\n", + "Epoch 9/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 3ms/step - accuracy: 0.9081 - loss: 0.3285 - val_accuracy: 0.9105 - val_loss: 0.3217\n", + "Epoch 10/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.9114 - loss: 0.3214 - val_accuracy: 0.9120 - val_loss: 0.3178\n", + "Epoch 11/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 3ms/step - accuracy: 0.9117 - loss: 0.3201 - val_accuracy: 0.9120 - val_loss: 0.3143\n", + "Epoch 12/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.9111 - loss: 0.3175 - val_accuracy: 0.9133 - val_loss: 0.3107\n", + "Epoch 13/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 2ms/step - accuracy: 0.9117 - loss: 0.3190 - val_accuracy: 0.9153 - val_loss: 0.3078\n", + "Epoch 14/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 3ms/step - accuracy: 0.9171 - loss: 0.3035 - val_accuracy: 0.9140 - val_loss: 0.3063\n", + "Epoch 15/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 2ms/step - accuracy: 0.9142 - loss: 0.3091 - val_accuracy: 0.9160 - val_loss: 0.3039\n", + "Epoch 16/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 3ms/step - accuracy: 0.9165 - loss: 0.2978 - val_accuracy: 0.9150 - val_loss: 0.3035\n", + "Epoch 17/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.9146 - loss: 0.3069 - val_accuracy: 0.9162 - val_loss: 0.3004\n", + "Epoch 18/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 2ms/step - accuracy: 0.9170 - loss: 0.2994 - val_accuracy: 0.9160 - val_loss: 0.2989\n", + "Epoch 19/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 4ms/step - accuracy: 0.9177 - loss: 0.2975 - val_accuracy: 0.9168 - val_loss: 0.2978\n", + "Epoch 20/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.9174 - loss: 0.2976 - val_accuracy: 0.9180 - val_loss: 0.2969\n", + "Epoch 21/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.9177 - loss: 0.2938 - val_accuracy: 0.9193 - val_loss: 0.2955\n", + "Epoch 22/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 3ms/step - accuracy: 0.9190 - loss: 0.2960 - val_accuracy: 0.9188 - val_loss: 0.2945\n", + "Epoch 23/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.9170 - loss: 0.2957 - val_accuracy: 0.9198 - val_loss: 0.2938\n", + "Epoch 24/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 3ms/step - accuracy: 0.9210 - loss: 0.2855 - val_accuracy: 0.9207 - val_loss: 0.2933\n", + "Epoch 25/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 3ms/step - accuracy: 0.9209 - loss: 0.2871 - val_accuracy: 0.9192 - val_loss: 0.2923\n", + "Epoch 26/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 3ms/step - accuracy: 0.9200 - loss: 0.2843 - val_accuracy: 0.9197 - val_loss: 0.2916\n", + "Epoch 27/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 3ms/step - accuracy: 0.9194 - loss: 0.2907 - val_accuracy: 0.9207 - val_loss: 0.2903\n", + "Epoch 28/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 3ms/step - accuracy: 0.9202 - loss: 0.2872 - val_accuracy: 0.9200 - val_loss: 0.2901\n", + "Epoch 29/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 3ms/step - accuracy: 0.9199 - loss: 0.2882 - val_accuracy: 0.9208 - val_loss: 0.2893\n", + "Epoch 30/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 3ms/step - accuracy: 0.9220 - loss: 0.2847 - val_accuracy: 0.9218 - val_loss: 0.2890\n", + "Epoch 31/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 3ms/step - accuracy: 0.9221 - loss: 0.2794 - val_accuracy: 0.9208 - val_loss: 0.2889\n", + "Epoch 32/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 3ms/step - accuracy: 0.9229 - loss: 0.2774 - val_accuracy: 0.9217 - val_loss: 0.2877\n", + "Epoch 33/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.9205 - loss: 0.2878 - val_accuracy: 0.9218 - val_loss: 0.2870\n", + "Epoch 34/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 3ms/step - accuracy: 0.9244 - loss: 0.2693 - val_accuracy: 0.9230 - val_loss: 0.2874\n", + "Epoch 35/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 3ms/step - accuracy: 0.9221 - loss: 0.2799 - val_accuracy: 0.9217 - val_loss: 0.2858\n", + "Epoch 36/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 2ms/step - accuracy: 0.9233 - loss: 0.2752 - val_accuracy: 0.9220 - val_loss: 0.2862\n", + "Epoch 37/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 3ms/step - accuracy: 0.9225 - loss: 0.2832 - val_accuracy: 0.9225 - val_loss: 0.2858\n", + "Epoch 38/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 3ms/step - accuracy: 0.9210 - loss: 0.2797 - val_accuracy: 0.9232 - val_loss: 0.2854\n", + "Epoch 39/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.9254 - loss: 0.2691 - val_accuracy: 0.9222 - val_loss: 0.2850\n", + "Epoch 40/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 3ms/step - accuracy: 0.9250 - loss: 0.2743 - val_accuracy: 0.9225 - val_loss: 0.2851\n", + "Epoch 41/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.9229 - loss: 0.2815 - val_accuracy: 0.9238 - val_loss: 0.2843\n", + "Epoch 42/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.9235 - loss: 0.2762 - val_accuracy: 0.9237 - val_loss: 0.2843\n", + "Epoch 43/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 3ms/step - accuracy: 0.9232 - loss: 0.2753 - val_accuracy: 0.9230 - val_loss: 0.2841\n", + "Epoch 44/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.9233 - loss: 0.2751 - val_accuracy: 0.9232 - val_loss: 0.2834\n", + "Epoch 45/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 3ms/step - accuracy: 0.9237 - loss: 0.2741 - val_accuracy: 0.9232 - val_loss: 0.2833\n", + "Epoch 46/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 3ms/step - accuracy: 0.9265 - loss: 0.2705 - val_accuracy: 0.9237 - val_loss: 0.2832\n", + "Epoch 47/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 3ms/step - accuracy: 0.9242 - loss: 0.2715 - val_accuracy: 0.9235 - val_loss: 0.2825\n", + "Epoch 48/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 3ms/step - accuracy: 0.9254 - loss: 0.2664 - val_accuracy: 0.9240 - val_loss: 0.2823\n", + "Epoch 49/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.9248 - loss: 0.2754 - val_accuracy: 0.9233 - val_loss: 0.2824\n", + "Epoch 50/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 3ms/step - accuracy: 0.9266 - loss: 0.2631 - val_accuracy: 0.9240 - val_loss: 0.2821\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "# вывод графика ошибки по эпохам\n", + "plt.plot(H.history['loss'])\n", + "plt.plot(H.history['val_loss'])\n", + "plt.grid()\n", + "plt.xlabel('Epochs')\n", + "plt.ylabel('loss')\n", + "plt.legend(['train_loss', 'val_loss'])\n", + "plt.title('Loss by epochs')\n", + "plt.show()" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 472 + }, + "id": "Sz_YOlsVivoR", + "outputId": "f212f3ea-eb0c-485b-8633-17f11c84a5dc" + }, + "execution_count": 228, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjcAAAHHCAYAAABDUnkqAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAY1pJREFUeJzt3Xl4VNXhxvHv7EsWEsjGEgiygwKKggFUkFUUpdK6UUVspSrUhWqVtgrYKlUrxR1rRf1VrdTdqlAiCi4gOwrIvisk7GSfmczc3x+TTBgS9lkgvJ/nuc/M3HvuzJmTAC/nnHuuyTAMAxEREZE6whzvCoiIiIhEksKNiIiI1CkKNyIiIlKnKNyIiIhInaJwIyIiInWKwo2IiIjUKQo3IiIiUqco3IiIiEidonAjIiIidYrCjYjE1c0330xiYmK8qxF3JpOJ0aNHx7saInWCwo1IHfXqq69iMplYtGhRvKsiIhJTCjciIiJSpyjciIiISJ2icCNyhlu6dCmXXXYZycnJJCYm0qdPH7799tuwMj6fjwkTJtCqVSucTicNGjSgZ8+e5OXlhcrk5+czYsQImjRpgsPhoGHDhlx11VVs3rz5mOqxceNGBgwYQEJCAo0aNeLhhx/GMAwADMMgJyeHq666qsZ55eXl1KtXj9/85jdH/YzXX3+dLl264HK5qF+/Ptdddx3btm0LK9OrVy/OPvtsFi9eTPfu3XG5XDRv3pwpU6bUeL+dO3fyq1/9iszMTJxOJ506deK1116rUS4QCPDUU09xzjnn4HQ6SU9PZ+DAgbUOGX7wwQecffbZOBwOOnTowIwZM8KOFxUVcffdd5OTk4PD4SAjI4N+/fqxZMmSo35/kTOFwo3IGWzlypVcdNFFfPfdd/z+97/nwQcfZNOmTfTq1Yv58+eHyo0fP54JEybQu3dvnn32Wf74xz/StGnTsH9Qhw4dyvvvv8+IESN4/vnnufPOOykqKmLr1q1HrYff72fgwIFkZmby+OOP06VLF8aNG8e4ceOA4GTbX/7yl0yfPp29e/eGnfvf//6XwsJCfvnLXx7xMx555BFuuukmWrVqxaRJk7j77ruZNWsWF198Mfv37w8ru2/fPgYNGkSXLl14/PHHadKkCbfffjtTp04NlSkrK6NXr17861//YtiwYTzxxBPUq1ePm2++maeeeirs/X71q19x9913k52dzWOPPcYDDzyA0+msESK//vpr7rjjDq677joef/xxysvLGTp0KHv27AmVue2223jhhRcYOnQozz//PPfeey8ul4tVq1YdtZ1FzhiGiNRJr7zyigEYCxcuPGyZIUOGGHa73diwYUNo3/bt242kpCTj4osvDu3r1KmTcfnllx/2ffbt22cAxhNPPHHc9Rw+fLgBGL/97W9D+wKBgHH55Zcbdrvd2LVrl2EYhrFmzRoDMF544YWw86+88kojJyfHCAQCh/2MzZs3GxaLxXjkkUfC9i9fvtywWq1h+y+55BIDMJ588snQPo/HY3Tu3NnIyMgwvF6vYRiGMXnyZAMwXn/99VA5r9dr5ObmGomJiUZhYaFhGIbx+eefG4Bx55131qjXwXUGDLvdbqxfvz6077vvvjMA45lnngntq1evnjFq1KjDflcRMQz13Iicofx+PzNnzmTIkCGcddZZof0NGzbkhhtu4Ouvv6awsBCAlJQUVq5cybp162p9L5fLhd1uZ/bs2ezbt++E6nPwZdBVl0V7vV4+++wzAFq3bk23bt144403QuX27t3L9OnTGTZsGCaT6bDv/d577xEIBLjmmmvYvXt3aMvKyqJVq1Z88cUXYeWtVmvYMJfdbuc3v/kNO3fuZPHixQB8+umnZGVlcf3114fK2Ww27rzzToqLi5kzZw4A7777LiaTKdQLdbBD69y3b19atGgRet2xY0eSk5PZuHFjaF9KSgrz589n+/bth/2+Imc6hRuRM9SuXbsoLS2lTZs2NY61a9eOQCAQmo/y8MMPs3//flq3bs0555zDfffdx/fffx8q73A4eOyxx5g+fTqZmZlcfPHFPP744+Tn5x9TXcxmc1jAgmCYAcLm7Nx000188803bNmyBYC3334bn8/HjTfeeMT3X7duHYZh0KpVK9LT08O2VatWsXPnzrDyjRo1IiEh4Yj12bJlC61atcJsDv9rtF27dqHjABs2bKBRo0bUr1//aM1A06ZNa+xLTU0NC4yPP/44K1asIDs7m65duzJ+/Piw8CMiCjcicgwuvvhiNmzYwNSpUzn77LP55z//yXnnncc///nPUJm7776btWvXMnHiRJxOJw8++CDt2rVj6dKlEavHddddh81mC/XevP7665x//vm1BrSDBQIBTCYTM2bMIC8vr8b24osvRqyOJ8NisdS636icWA1wzTXXsHHjRp555hkaNWrEE088QYcOHZg+fXqsqilyylO4ETlDpaen43a7WbNmTY1jq1evxmw2k52dHdpXv359RowYwb///W+2bdtGx44dGT9+fNh5LVq04He/+x0zZ85kxYoVeL1ennzyyaPWJRAI1Oh9WLt2LQA5OTlhdbj88st544032LJlC998881Re22q6mUYBs2bN6dv3741tgsvvDCs/Pbt2ykpKTlifZo1a8a6desIBAJh5VavXh06XvXZ27dvrzER+mQ0bNiQO+64gw8++IBNmzbRoEEDHnnkkYi9v8jpTuFG5AxlsVjo378/H374YdjQT0FBAW+++SY9e/YkOTkZIOxqHYDExERatmyJx+MBoLS0lPLy8rAyLVq0ICkpKVTmaJ599tnQc8MwePbZZ7HZbPTp0yes3I033sgPP/zAfffdh8Vi4brrrjvqe1999dVYLBYmTJgQ1gtS9VmHfr+Kioqw3hyv18uLL75Ieno6Xbp0AWDQoEHk5+czbdq0sPOeeeYZEhMTueSSS4DgVWSGYTBhwoQa9Tq0Lkfj9/s5cOBA2L6MjAwaNWp0zO0sciawxrsCIhJdU6dOrbFWCsBdd93FX/7yF/Ly8ujZsyd33HEHVquVF198EY/Hw+OPPx4q2759e3r16kWXLl2oX78+ixYt4p133glNAl67di19+vThmmuuoX379litVt5//30KCgqOKXw4nU5mzJjB8OHD6datG9OnT+eTTz7hD3/4A+np6WFlL7/8cho0aMDbb7/NZZddRkZGxlHfv0WLFvzlL39h7NixbN68mSFDhpCUlMSmTZt4//33GTlyJPfee2+ofKNGjXjsscfYvHkzrVu3Ztq0aSxbtox//OMf2Gw2AEaOHMmLL77IzTffzOLFi8nJyeGdd97hm2++YfLkySQlJQHQu3dvbrzxRp5++mnWrVvHwIEDCQQCfPXVV/Tu3fu47idVVFREkyZN+PnPf06nTp1ITEzks88+Y+HChcfUQyZyxojfhVoiEk1Vl4Ifbtu2bZthGIaxZMkSY8CAAUZiYqLhdruN3r17G3Pnzg17r7/85S9G165djZSUFMPlchlt27Y1HnnkkdBl0bt37zZGjRpltG3b1khISDDq1atndOvWzfjPf/5z1HoOHz7cSEhIMDZs2GD079/fcLvdRmZmpjFu3DjD7/fXes4dd9xh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h+1gTzhqsdTUVC677DLefPNN+vTpA8A777xDWloavXv3xmw206lTp1D5P//5z7z//vt89NFHoRByot58803Ky8v5v//7PxISgnV99tlnGTx4MI899hg2m40DBw5wxRVX0KJFCwDatWsXOn/r1q3cd999tG3bFoBWrVqdVH2iQT03EaRhKREROVbDhg3j3XffxePxAPDGG29w3XXXYTabKS4u5t5776Vdu3akpKSQmJjIqlWrItJzs2rVKjp16hQKNgA9evQgEAiwZs0a6tevz80338yAAQMYPHgwTz31FDt27AiVHTNmDL/+9a/p27cvf/3rX9mwYcNJ1ynS1HMTQZpQLCJyCrC5gz0oxyEQCFBYVERyUhJm80n8v9/mPuaigwcPxjAMPvnkEy644AK++uor/v73vwNw7733kpeXx9/+9jdatmyJy+Xi5z//OV6v98TrdhxeeeUV7rzzTmbMmMG0adP405/+RF5eHhdeeCHjx4/nhhtu4JNPPmH69OmMGzeOt956i5/97GcxqduxULiJIPXciIicAkymYxoaChMIgM0fPO9kws1xcDqdXH311bzxxhusX7+eNm3acN555wHwzTffcPPNN4cCQ3FxMZs3b47I57Zr145XX32VkpKSUO/NN998g9lspk2bNqFy5557Lueeey5jx44lNzeXN998kwsvvBCA1q1b07p1a+655x6uv/56XnnllVMq3GhYKoKqJhT7/AYV/sBRSouIyJlu2LBhfPLJJ0ydOpVhw4aF9rdq1Yr33nuPZcuW8d1333HDDTfUuLLqZD7T6XQyfPhwVqxYwRdffMFvf/tbbrzxRjIzM9m0aRNjx45l3rx5bNmyhZkzZ7Ju3TratWtHWVkZo0ePZvbs2WzZsoVvvvmGhQsXhs3JORWo5yaCqu4tBcH7SyVblB1FROTwLr30UurXr8+aNWu44YYbQvsnTZrELbfcQvfu3UlLS+P++++nsLAwIp/pdrv53//+x1133cUFF1yA2+1m6NChTJo0KXR89erVvPbaa+zZs4eGDRsyatQofvOb31BRUcGePXu46aabKCgoIC0tjauvvpoJEyZEpG6RonATQXarGRMGBibKvH6SnafWpXEiInJqMZvNbN9ec35QTk4On3/+edi+UaNGhb0+nmEq45BL1M8555wa718lMzOT999/v9Zjdrudf//738f8ufGiroUIMplMVI5Mad6NiIhInCjcRJijskV180wREYmFN954g8TExFq3Dh06xLt6caFhqQizWwCfem5ERCQ2rrzySrp161brsVNt5eBYUbiJsOqeG4UbERGJvqSkJJKSkuJdjVOKhqUirGrOTZmGpUREROJC4SbC7ObgjHT13IiIxE6k1oCR+Dr0qq4TpWGpCLNrWEpEJGbsdnvocur09HTsdnvo7tXHIxAI4PV6KS8vP7nbL8gxqa29DcNg165dmEymk54rpHATYdXDUgo3IiLRZjabad68OTt27Kh1vZhjZRgGZWVluFyuEwpHcnwO194mk4kmTZpgsViOcPbRKdxEmCYUi4jElt1up2nTplRUVOD3n9jfvT6fjy+//JKLL774jL3CKJYO1942m+2kgw0o3ERcaBE/nyYUi4jEStVQxokGE4vFQkVFBU6nU+EmBqLd3hpYjLCqOTcalhIREYkPhZsIs1t0tZSIiEg8KdxEmEM9NyIiInGlcBNh1TfO1JwbERGReFC4iTCtcyMiIhJfCjcRFlrnxqdwIyIiEg8KNxFWNeemxKNhKRERkXhQuImwqqulNKFYREQkPhRuIiy0QrGGpUREROJC4SbCqq+WUrgRERGJB4WbCKu6WspbEcAfiMyt20VEROTYKdxEmP2gFtVaNyIiIrGncBNhNjNU3b1dk4pFRERiT+EmwkwmcNuCE28070ZERCT2FG6iwGVXuBEREYkXhZsocFX23JT5NOdGREQk1hRuosCtnhsREZG4UbiJAg1LiYiIxI/CTRRUTSjW1VIiIiKxp3ATBeq5ERERiR+FmyhwhS4F14RiERGRWFO4iYIEh3puRERE4uWUCDfPPfccOTk5OJ1OunXrxoIFCw5btlevXphMphrb5ZdfHsMaH5lLi/iJiIjETdzDzbRp0xgzZgzjxo1jyZIldOrUiQEDBrBz585ay7/33nvs2LEjtK1YsQKLxcIvfvGLGNf88Krm3JRpWEpERCTm4h5uJk2axK233sqIESNo3749U6ZMwe12M3Xq1FrL169fn6ysrNCWl5eH2+0+pcKNbr8gIiISP9Z4frjX62Xx4sWMHTs2tM9sNtO3b1/mzZt3TO/x8ssvc91115GQkFDrcY/Hg8fjCb0uLCwEwOfz4fP5TqL2NVW9n90SvHNmiSfynyHVqtpWbRwbau/YUnvHlto7tk6kvY+nbFzDze7du/H7/WRmZobtz8zMZPXq1Uc9f8GCBaxYsYKXX375sGUmTpzIhAkTauyfOXMmbrf7+Ct9DDatWw1Y2PzjDj799KeofIZUy8vLi3cVzihq79hSe8eW2ju2jqe9S0tLj7lsXMPNyXr55Zc555xz6Nq162HLjB07ljFjxoReFxYWkp2dTf/+/UlOTo5ofXw+H3l5eZzf+Rze2vgDSakNGDTogoh+hlSrau9+/fphs9niXZ06T+0dW2rv2FJ7x9aJtHfVyMuxiGu4SUtLw2KxUFBQELa/oKCArKysI55bUlLCW2+9xcMPP3zEcg6HA4fDUWO/zWaL2i9wossOQLkvoD8kMRDNn6XUpPaOLbV3bKm9Y+t42vt4fi5xnVBst9vp0qULs2bNCu0LBALMmjWL3NzcI5779ttv4/F4+OUvfxntah433ThTREQkfuI+LDVmzBiGDx/O+eefT9euXZk8eTIlJSWMGDECgJtuuonGjRszceLEsPNefvllhgwZQoMGDeJR7SPSOjciIiLxE/dwc+2117Jr1y4eeugh8vPz6dy5MzNmzAhNMt66dStmc3gH05o1a/j666+ZOXNmPKp8VFU9N2U+hRsREZFYi3u4ARg9ejSjR4+u9djs2bNr7GvTpg2GYUS5Vieu+saZWsRPREQk1uK+iF9dVLWIX7kvQCBw6oYwERGRukjhJgqqem5AQ1MiIiKxpnATBU6rBVNwkWJKNDQlIiISUwo3UWA2m0JXTJXpiikREZGYUriJEq11IyIiEh8KN1HiUrgRERGJC4WbKHHbglfZa1hKREQkthRuokRr3YiIiMSHwk2UaJViERGR+FC4iRJNKBYREYkPhZsocdmDc24UbkRERGJL4SZK3KF1bjTnRkREJJYUbqJEl4KLiIjEh8JNlGjOjYiISHwo3ERJ6GophRsREZGYUriJktCEYl0KLiIiElMKN1FS3XOjCcUiIiKxpHATJVXhpsSjnhsREZFYUriJEreGpUREROJC4SZKNCwlIiISHwo3UaJ1bkREROJD4SZKdCm4iIhIfCjcRInbpntLiYiIxIPCTZRUDUuV+fwEAkacayMiInLmULiJkqphKYDyCvXeiIiIxIrCTZS4bNXhRkNTIiIisaNwEyVmswmnLdi8mlQsIiISOwo3URRayE/hRkREJGYUbqKoamiqVAv5iYiIxIzCTRRprRsREZHYU7iJIrdWKRYREYk5hZsoqlrrpkTDUiIiIjGjcBNFCZUTijUsJSIiEjsKN1Gkm2eKiIjEnsJNFLkPugWDiIiIxIbCTRRVr3OjOTciIiKxonATRRqWEhERiT2Fmyhy27TOjYiISKwp3ESRem5ERERiT+EminRvKRERkdhTuImi6qulNKFYREQkVhRuokjDUiIiIrGncBNFunGmiIhI7CncRJFunCkiIhJ7CjdR5LJpQrGIiEisKdxEUXXPjSYUi4iIxIrCTRS5HdX3ljIMI861EREROTMo3ERR1To3hgHlvkCcayMiInJmULiJIlfl7RdAQ1MiIiKxonATRRazCYc12MSaVCwiIhIbCjdRVr1KscKNiIhILCjcRJnuLyUiIhJbcQ83zz33HDk5OTidTrp168aCBQuOWH7//v2MGjWKhg0b4nA4aN26NZ9++mmManv8XLocXEREJKas8fzwadOmMWbMGKZMmUK3bt2YPHkyAwYMYM2aNWRkZNQo7/V66devHxkZGbzzzjs0btyYLVu2kJKSEvvKHyPdgkFERCS24hpuJk2axK233sqIESMAmDJlCp988glTp07lgQceqFF+6tSp7N27l7lz52Kz2QDIycmJZZWPW9UVUxqWEhERiY24hRuv18vixYsZO3ZsaJ/ZbKZv377Mmzev1nM++ugjcnNzGTVqFB9++CHp6enccMMN3H///VgsllrP8Xg8eDye0OvCwkIAfD4fPp8vgt+I0Psd/L5OW3Dkr6jMG/HPO9PV1t4SPWrv2FJ7x5baO7ZOpL2Pp2zcws3u3bvx+/1kZmaG7c/MzGT16tW1nrNx40Y+//xzhg0bxqeffsr69eu544478Pl8jBs3rtZzJk6cyIQJE2rsnzlzJm63++S/SC3y8vJCzw/sMQNmFi/7noSC76LyeWe6g9tbok/tHVtq79hSe8fW8bR3aWnpMZeN67DU8QoEAmRkZPCPf/wDi8VCly5d+Omnn3jiiScOG27Gjh3LmDFjQq8LCwvJzs6mf//+JCcnR7R+Pp+PvLw8+vXrFxo2m1O+gmV7ttO8VVsGXdw8op93pqutvSV61N6xpfaOLbV3bJ1Ie1eNvByLuIWbtLQ0LBYLBQUFYfsLCgrIysqq9ZyGDRtis9nChqDatWtHfn4+Xq8Xu91e4xyHw4HD4aix32azRe0X+OD3TnQGHz1+Q39goiSaP0upSe0dW2rv2FJ7x9bxtPfx/Fzidim43W6nS5cuzJo1K7QvEAgwa9YscnNzaz2nR48erF+/nkCg+j5Na9eupWHDhrUGm1NB9aXgmlAsIiISC3Fd52bMmDG89NJLvPbaa6xatYrbb7+dkpKS0NVTN910U9iE49tvv529e/dy1113sXbtWj755BMeffRRRo0aFa+vcFRuW9UiflrnRkREJBbiOufm2muvZdeuXTz00EPk5+fTuXNnZsyYEZpkvHXrVszm6vyVnZ3N//73P+655x46duxI48aNueuuu7j//vvj9RWOKsGhnhsREZFYivuE4tGjRzN69Ohaj82ePbvGvtzcXL799tso1ypyNCwlIiISW3G//UJdpxWKRUREYkvhJspcmnMjIiISUwo3UebWsJSIiEhMKdxEWWhYyqdwIyIiEgsKN1GmCcUiIiKxpXATZW57cM6NJhSLiIjEhsJNlFXPuanAMIw410ZERKTuU7iJsqphqYABnorAUUqLiIjIyVK4iTK3rfomnxqaEhERiT6FmyizWszYLcFmLtUVUyIiIlGncBMDrtAqxVrIT0REJNoUbmKgalJxiUc9NyIiItGmcBMDWutGREQkdhRuYiChaq0bn4alREREok3hJgbUcyMiIhI7CjcxoJtnioiIxI7CTQyEbp6pcCMiIhJ1Cjcx4LIF59yo50ZERCT6FG5iwK11bkRERGJG4SYGNOdGREQkdhRuYiB0tZRuvyAiIhJ1CjcxoAnFIiIisaNwEwMue9WEYs25ERERibYTCjevvfYan3zySej173//e1JSUujevTtbtmyJWOXqCrdNc25ERERi5YTCzaOPPorL5QJg3rx5PPfcczz++OOkpaVxzz33RLSCdYGGpURERGLHeiInbdu2jZYtWwLwwQcfMHToUEaOHEmPHj3o1atXJOtXJ+j2CyIiIrFzQj03iYmJ7NmzB4CZM2fSr18/AJxOJ2VlZZGrXR3h1pwbERGRmDmhnpt+/frx61//mnPPPZe1a9cyaNAgAFauXElOTk4k61cnaJ0bERGR2DmhnpvnnnuO3Nxcdu3axbvvvkuDBg0AWLx4Mddff31EK1gXaM6NiIhI7JxQz01KSgrPPvtsjf0TJkw46QrVRaFhKZ8fwzAwmUxxrpGIiEjddUI9NzNmzODrr78OvX7uuefo3LkzN9xwA/v27YtY5eqKqgnF/oCB1x+Ic21ERETqthMKN/fddx+FhYUALF++nN/97ncMGjSITZs2MWbMmIhWsC6oGpYCDU2JiIhE2wkNS23atIn27dsD8O6773LFFVfw6KOPsmTJktDkYqlms5ixWUz4/AalXj8p7njXSEREpO46oZ4bu91OaWkpAJ999hn9+/cHoH79+qEeHQnn0irFIiIiMXFCPTc9e/ZkzJgx9OjRgwULFjBt2jQA1q5dS5MmTSJawbrCbbdSWF6hYSkREZEoO6Gem2effRar1co777zDCy+8QOPGjQGYPn06AwcOjGgF64rqtW60kJ+IiEg0nVDPTdOmTfn4449r7P/73/9+0hWqq0K3YPCp50ZERCSaTijcAPj9fj744ANWrVoFQIcOHbjyyiuxWCxHOfPMpIX8REREYuOEws369esZNGgQP/30E23atAFg4sSJZGdn88knn9CiRYuIVrIucIXuL6VwIyIiEk0nNOfmzjvvpEWLFmzbto0lS5awZMkStm7dSvPmzbnzzjsjXcc6wW2r6rnRnBsREZFoOqGemzlz5vDtt99Sv3790L4GDRrw17/+lR49ekSscnVJ1bBUiXpuREREouqEem4cDgdFRUU19hcXF2O320+6UnWRS3cGFxERiYkTCjdXXHEFI0eOZP78+RiGgWEYfPvtt9x2221ceeWVka5jnZDgCHaSaVhKREQkuk4o3Dz99NO0aNGC3NxcnE4nTqeT7t2707JlSyZPnhzhKtYNWqFYREQkNk5ozk1KSgoffvgh69evD10K3q5dO1q2bBnRytUluhRcREQkNo453Bztbt9ffPFF6PmkSZNOvEZ1lFtzbkRERGLimMPN0qVLj6mcyWQ64crUZaF1brRCsYiISFQdc7g5uGdGjl/1sJQmFIuIiETTCU0oluOnS8FFRERiQ+Emkkr3kFi+vdZD1SsUK9yIiIhEk8JNpKz9H7a/t6HL5udrPezWvaVERERiQuEmUhoEL4NPKt8BgZoBpnpYSnNuREREoumUCDfPPfccOTk5OJ1OunXrxoIFCw5b9tVXX8VkMoVtTqczhrU9jNQcDKsTi+GD/ZtrHA5NKNbVUiIiIlEV93Azbdo0xowZw7hx41iyZAmdOnViwIAB7Ny587DnJCcns2PHjtC2ZcuWGNb4MMwWaNAKANOuNTUOV4Ubn9/AWxGIadVERETOJHEPN5MmTeLWW29lxIgRtG/fnilTpuB2u5k6dephzzGZTGRlZYW2zMzMGNb48Iz0tgCYdq2ucaxqWAo0qVhERCSaTuj2C5Hi9XpZvHgxY8eODe0zm8307duXefPmHfa84uJimjVrRiAQ4LzzzuPRRx+lQ4cOtZb1eDx4PJ7Q68LCQgB8Ph8+ny9C3yTIqN8KO2DsXFXjvU2GgcVswh8wOFBajtsW0Y8+I1W1caR/jlI7tXdsqb1jS+0dWyfS3sdTNq7hZvfu3fj9/ho9L5mZmaxeXbP3A6BNmzZMnTqVjh07cuDAAf72t7/RvXt3Vq5cSZMmTWqUnzhxIhMmTKixf+bMmbjd7sh8kap6HyjjQqBk0yJmf/ppjeM2kwU/JmZ89jmZroh+9BktLy8v3lU4o6i9Y0vtHVtq79g6nvYuLS095rImwzCME6lQJGzfvp3GjRszd+5ccnNzQ/t///vfM2fOHObPn3/U9/D5fLRr147rr7+eP//5zzWO19Zzk52dze7du0lOTo7MF6lUsWs9rn9ciGFxUPH7LWAOz449H59DQZGHD26/kA6NIvvZZyKfz0deXh79+vXDZlNXWLSpvWNL7R1bau/YOpH2LiwsJC0tjQMHDhz13++49tykpaVhsVgoKCgI219QUEBWVtYxvYfNZuPcc89l/fr1tR53OBw4HI5az4v4L3DaWVSY7Vj9HmxFP0Fa+F3S3Q4rFHnwBkz6wxNBUflZymGpvWNL7R1bau/YOp72Pp6fS1wnFNvtdrp06cKsWbNC+wKBALNmzQrryTkSv9/P8uXLadiwYbSqeexMZoodjYLPd62qcdhl01o3IiIi0Rb3q6XGjBnDSy+9xGuvvcaqVau4/fbbKSkpYcSIEQDcdNNNYROOH374YWbOnMnGjRtZsmQJv/zlL9myZQu//vWv4/UVwhS6Ggef7Kw5Z6j65pm6WkpERCRa4josBXDttdeya9cuHnroIfLz8+ncuTMzZswITTLeunUrZnN1Btu3bx+33nor+fn5pKam0qVLF+bOnUv79u3j9RXCFDkrJzXX1nOjm2eKiIhEXdzDDcDo0aMZPXp0rcdmz54d9vrvf/87f//732NQqxNT5KwcljpCz02pVikWERGJmrgPS9U1oZ6bPevAHz63purmmWWacyMiIhI1CjcRVmpvgGFzg98LezeGHdOwlIiISPQp3ESayYyR1jr4/JB5N26bJhSLiIhEm8JNNFTeY+rQeTdu9dyIiIhEncJNFBhpbYJPDum5cVXOuVG4ERERiR6Fmyioujs4u9aE7Q+tc+PThGIREZFoUbiJglC42b0O/NV3Ma2aUFziUc+NiIhItCjcRENyE7AnQsAXdsWUVigWERGJPoWbaDCZIL1y3s3O6nk3CVVzbjQsJSIiEjUKN9GS3i74uKv6iimtcyMiIhJ9CjfRklF1OXh1z42GpURERKJP4SZaQldMVffcaJ0bERGR6FO4iZaqcLNnPVR4gep1btRzIyIiEj0KN9FSrwnYkyBQAXs3ANW3X/D6A1T4A/GsnYiISJ2lcBMttVwx5XZYQocLy3XFlIiISDQo3ERTRvhKxQ6rheZpCQAs3rIvXrUSERGp0xRuoil0OXj1FVPdWzQA4Jv1u+NRIxERkTpP4SaaMmreHbxHyzQA5m5QuBEREYkGhZtoquq52bshdMVU7lkNMJlgbUExO4vK41g5ERGRuknhJpqSG4EjOXjF1J71AKQm2GnfMBmAeRv2xLN2IiIidZLCTTSZTAct5lc976ZqaErzbkRERCJP4Sbaapl3Uz2peA+GYcSjViIiInWWwk201dJz07V5fWwWEz/tL2Pr3tI4VUxERKRuUriJtvSaPTduu5Vzs1MB+FpDUyIiIhGlcBNtGVVXTG2ECk9od/eWwaGpues1qVhERCSSFG6iLakhOOqB4Yfd60K7ex603k0goHk3IiIikaJwE20m00G3YagemuqUnUKC3cK+Uh+r8gvjVDkREZG6R+EmFtJrhhubxUzX5vUBDU2JiIhEksJNLFTNu9m5Kmx3aL0b3YpBREQkYhRuYqGWnhuA7i2C4WbBpr14KwKxrpWIiEidpHATCwdfMeWrvp9U26wk6ifYKfX6+e7H/fGpm4iISB2jcBMLiZngTAEjAHuqr5gym03khlYr1tCUiIhIJCjcxILJdNC8m/ChqR6VQ1OaVCwiIhIZCjexUsttGAB6VC7mt3TbPkq9FbGulYiISJ2jcBMrtdyGAaBpfTeNU1z4/AYLNu2NQ8VERETqFoWbWMmovefGZDKFem8070ZEROTkKdzESnrVFVObwFcWdii03o3m3YiIiJw0hZtYScwAVypghN1jCqrXu/lhRyF7S7xxqJyIiEjdoXATKyZTde/NIYv5pSc5aJOZBMC8Deq9ERERORkKN7FUNe/mkNswAHSvmnejWzGIiIicFIWbWDpMzw0cvN6Nwo2IiMjJULiJpSP03HQ7qz4Ws4nNe0r5aX9ZjeMiIiJybBRuYqmq52bfZijbH3YoyWmjY5N6gC4JFxERORkKN7GUmF4ZcAxY8W6NwxqaEhEROXkKN7F23o3Bx6X/qnGoelLxHgzDiGWtRERE6gyFm1jreB2YbbB9Kez4PuzQeU1TcVjN7CrysH5ncZwqKCIicnpTuIm1hAbQ9vLg80N6b5w2Cxfk1Afgaw1NiYiInBCFm3g476bg4/fTdCsGERGRCFO4iYezekO9plB+AFZ9HHao6iaa8zfuocIfiEftRERETmsKN/FgNsO5w4LPl7wWdqhDo3okO60UeSpYsHlvHConIiJyelO4iZfOwwATbP4K9m4M7baYTVzesREAkz9bp6umREREjpPCTbykZEPLPsHnS18PO/TbS1tit5pZsGkvX67TxGIREZHjcUqEm+eee46cnBycTifdunVjwYIFx3TeW2+9hclkYsiQIdGtYLScW7XmzRvgrwjtbpTi4sYLmwHwxP9WEwio90ZERORYxT3cTJs2jTFjxjBu3DiWLFlCp06dGDBgADt37jzieZs3b+bee+/loosuilFNo6DNIHA3gOJ8WJ8XduiOXi1IsFtY8VMh01fkx6mCIiIip5+4h5tJkyZx6623MmLECNq3b8+UKVNwu91MnTr1sOf4/X6GDRvGhAkTOOuss2JY2wiz2qHT9cHnS/4v7FCDRAe/vij43Z7MW6Mrp0RERI6RNZ4f7vV6Wbx4MWPHjg3tM5vN9O3bl3nz5h32vIcffpiMjAx+9atf8dVXXx3xMzweDx6PJ/S6sLAQAJ/Ph8/nO8lvEK7q/Y7rfTvegG3esxhr/0fF3m2QlBU6NPzCbP5v3mY27irhPwu38IsuTSJa39PdCbW3nDC1d2ypvWNL7R1bJ9Lex1M2ruFm9+7d+P1+MjMzw/ZnZmayevXqWs/5+uuvefnll1m2bNkxfcbEiROZMGFCjf0zZ87E7XYfd52PRV5e3tELHaRnQisalKxj3dsTWJc1OOzYJekmPthi4fFPV2Lf8T22uPe1nXqOt73l5Ki9Y0vtHVtq79g6nvYuLS095rJxDTfHq6ioiBtvvJGXXnqJtLS0Yzpn7NixjBkzJvS6sLCQ7Oxs+vfvT3JyckTr5/P5yMvLo1+/fthstmM+z9R4P3x8J+3KF9HqsufBZAod6+Pz8+3kr8kv9LC3fgdGdG8W0Tqfzk60veXEqL1jS+0dW2rv2DqR9q4aeTkWcQ03aWlpWCwWCgoKwvYXFBSQlZVVo/yGDRvYvHkzgwdX924EAsG5KFarlTVr1tCiRYuwcxwOBw6Ho8Z72Wy2qP0CH/d7nzMUZv4R075N2LYvgJyeYe91V9/WjH1vOVO+3MQNF+aQ6DitMmnURfNnKTWpvWNL7R1bau/YOp72Pp6fS1wHOex2O126dGHWrFmhfYFAgFmzZpGbm1ujfNu2bVm+fDnLli0LbVdeeSW9e/dm2bJlZGdnx7L6keNIDAYcqDGxGOAXXZrQPC2BvSVeXv5qU4wrJyIicnqJ+wyOMWPG8NJLL/Haa6+xatUqbr/9dkpKShgxYgQAN910U2jCsdPp5Oyzzw7bUlJSSEpK4uyzz8Zut8fzq5yccytvpvnDh1C2L+yQ1WJmTL/WALz01Ub2lnhjXTsREZHTRtzDzbXXXsvf/vY3HnroITp37syyZcuYMWNGaJLx1q1b2bFjR5xrGQONz4OMDlBRDsvfqXH48nMa0r5hMsWeCl6YvT4OFRQRETk9xD3cAIwePZotW7bg8XiYP38+3bp1Cx2bPXs2r7766mHPffXVV/nggw+iX8loM5ngvMrem1qGpsxmE/cNbAPAa/O2sONAWSxrJyIicto4JcKNVOp4DVjskP89bF9W43Cv1ul0zamPtyLA07PUeyMiIlIbhZtTibs+tKu8EqyW3huTqbr35j+LtrFpd0ksayciInJaULg51VQNTS1/B7w1Fyy6IKc+vduk4w8YTMpbG+PKiYiInPoUbk41ORdDag54DsDsibUWuXdAsPfmv99tZ/mPB2JYORERkVOfws2pxmyGAY8Gn899BjZ9WaNIh0b1uLJTIwDueHMxe4o9NcqIiIicqRRuTkVtL4fzhgMGvH9bjXVvAMZf2YGm9d1s21vGba8vxlPhj309RURETkEKN6eqgROhfgso/Ak+vgcMI+xw/QQ7U28+nySnlYWb9/GH91ZgHFJGRETkTKRwc6qyJ8DQl8BshZXvw3dv1SjSMiOJ5244D4vZxLtLfuTFLzfGoaIiIiKnFoWbU1njLtDrgeDzT++DvTXvK3Vx63QeuqI9AI/NWM3/VubHsoYiIiKnHIWbU13PMdA0F7xF8N5I8FfUKDK8ew43XtgMw4C731rGyu26gkpERM5cCjenOrMFfvYiOJLhxwXw1ZO1Fhs3uD0XtUqjzOfn168tYmdheYwrKiIicmpQuDkdpDaDQX8LPp/zGGxbWKOI1WLm2RvOo0V6AjsOlHPrvxZT7tMVVCIicuZRuDlddLwGzh4Khh/euxU8RTWK1HPZeHn4BaS4bXy3bT/3vv2drqASEZEzjsLN6cJkgssnQXIT2LcJZjxQa7GctASm/LILNouJj7/fwVOz1sW4oiIiIvGlcHM6caXA1S8CJlj6OvzwUa3FLjyrAY8MOQeAyZ+t4+1F22JXRxERkThTuDnd5PSEHncFn//3TjjwY63Frrkgm5EXnwXAfe98zzOz1mmISkREzggKN6ej3n+Ehp2Ct2V4ZVCt698APDCwLbde1ByAJ/PW8vt3vsfnD8SypiIiIjGncHM6strh2tchtTns3wJTB0LBDzWKmc0m/nh5e/58VQfMJnh78Y/c/MoCDpT54lBpERGR2FC4OV2lNIVbZkBGByjOh1cugx8X11r0xtwc/jn8fNx2C9+s38Mvpszlx32lMa6wiIhIbCjcnM6SsuDmj6HJBVC+H/7vStg4p9ail7bN5D+/ySUjycHagmJ+9vxcvv9xf0yrKyIiEgsKN6c7d3248QNofgl4i+GNX8DqT2otenbjenwwqgdts5LYVeTh2he/Je+HgtjWV0REJMoUbuoCRyLc8B9oewX4PTDtRvhuWq1FG6W4ePu2XC5unU6Zz8/Ify3ilW9qn5AsIiJyOlK4qStsTvjFa9Dp+uAqxu+PhAUv1Vo0yWnj5eHnc33XbAwDJvz3B8a+9z1F5ZpoLCIipz+Fm7rEYoWrnoeuvwm+/vRe+PJvUMv6NjaLmUd/dg73D2wLwL8XbKPfpC+ZuTI/ljUWERGJOIWbusZshsseg0vuD77+/M/Be1EV7qhR1GQycXuvFrzx6240a+Amv7Cckf9azO2vL6ZAdxUXEZHTlMJNXWQyQe8/wIBHARMsfxue6RLsxfHVDC09Wqbxv7sv5vZeLbCYTUxfkU/fJ+fw+rdbCAS0qrGIiJxeFG7qstxRcOssaNIVfCXBXpznLoAfPqwxVOW0Wbh/YFs+/m1POmWnUOSp4E8frOCaF+exrqDmHchFREROVQo3dV3jLvCrmXD1PyG5MezfCv+5CV69AvKX1yjermEy793enfGD25Ngt7Boyz4GPf0Vk/LWUu7zx+ELiIiIHB+FmzOByQQdfwGjFwbn4lidsOVrePFi+O/dULI7rLjFbOLmHs3JG3MJfdtl4PMbPD1rHQMnf8kHS3/Cr6EqERE5hSncnEnsCcG5OKMXQoerwQjA4lfg6fPg2xcgEN4z0yjFxUs3nc/zw84jPcnB5j2l3D1tGQMnf8mny3doPo6IiJySFG7ORClN4RevwIjpkNURPAdgxgPwzz6w47uwoiaTiUHnNOSLe3tx34A2JDutrNtZzB1vLOHyZ77msx8KMGq51FxERCReFG7OZM26w8jZcMXfwVEPti+Ff/SG//0RvCVhRRMdVkb1bslX91/KnX1akeiwsmpHIb/+v0UMeX4uc9buUsgREZFTgsLNmc5sgfNvgdELoMPPgqsbz3sWnrsQ1uXVKF7PZWNMv9Z89fve3N6rBS6bhe+27Wf41AVc8+I85q7frZAjIiJxpXAjQUlZ8ItXg/eoqpcNB7bCGz+Hd26B4p01iqcm2Ll/YFu+/H1vftWzOXarmYWb93HDP+dz2VNf8eb8rZR6K2L/PURE5IyncCPhWg+AO76F3NFgMsOKd+HZ82HxaxAI1CienuTgwSva89Xve3NTbjOcNjOr84v4w/vL6fboLCb8dyUbdxXH4YuIiMiZSuFGanIkwoBH4NbPgxOOyw/Af++Ef14KC1+G0r01TslMdvLwVWczf2xf/nR5O5o1cFNUXsEr32zm0ifncOPL85m5Ml+XkYuISNRZ410BOYU1Ohdu/QLmT4EvHglOON6+FKbfD636B9fOaT0QbK7QKfXcNn590Vnc0qM5X67bxb/mbeHzNTv5at1uvlq3m8YpLm7o1pSh5zUhq54zjl9ORETqKoUbOTKLFbqPhnN+Dt//J7gVLIc1nwQ3RzK0uxI6XgM5PYMTlAGz2USvNhn0apPBtr2lvP7tFqYt2sZP+8t44n9r+NvMNVzYvAFDzm3EwLMbUs9li/MXFRGRukLhRo5NUhb0uDO4FfwAy/8Dy9+BA9tg2evBLakhnD00GHaaXBC8QzmQXd/N2EHtuKdfaz7+fgfTFm5l4eZ9zNu4h3kb9/DgByvp3TadIZ0b07ttBk6bJc5fVkRETmcKN3L8MttD5ni49CHYOi8YdFa+D0U7gpeRz3sWEjKgzWXQ9gpofjHYnDhtFn7epQk/79KEbXtL+ei77Xy47CfWFhTzv5UF/G9lAUlOK5edncWQzo3pdlYDLGZTvL+tiIicZhRu5MSZzZDTI7hd9jismxm84/jamVCyE5a8FtzsidCybzDotOoHrhSy67sZ1bsld/Rqwer8Ij5Y9hMfLdvOjgPl/GfRj/xn0Y+kum30bptB33aZXNQqjSSnhq5EROToFG4kMqwOaDc4uFV4gzfmXP1JcCvaAT98ENzM1uDcnJZ94azemDI70K5hMu0aJnP/gLYs2LyXD5dt59PlO9hX6uO9JT/x3pKfsFlMXHhWA/q2y6RPuwyapLrj/Y1FROQUpXAjkWe1Q4tLg9tlT8COpdVBZ9dq2Dg7uAEkpMNZveCs3phb9ObCsxpx4VkN+PNVHVi0ZR+f/VDArNU72bS7JHTF1biPVtI2K4nerdOwF4LPH8CmTh0REamkcCPRZTZD4y7Brc9DsGcDrJ0BG76ALd9AyS5Y/nZwA0hrA2f1wtqiNxc2686FZ7XnT1e0Z8OuYmatKuCzH3ayaMteVucXsTq/CLDyz/VfkHtWGhe1SqNnqzTOSkvAZNJcHRGRM5XCjcRWgxaQOyq4VXjgx4XBoLPxi+AaOrvXBLcFLwImyDobmvWgRdNcWpzXnZEXt2BfiZfZa3eStzKf2avzKfH4+WxVAZ+tKgCgUT0nPVul0aNlGj1bptEg0RHf7ywiIjGlcCPxY3UE59/k9IQ+D0LZPtj0VTDobJwNezdC/vLgNn9K8JwGLUlt1p2fNe3OFQO68nHCj+ScexHzNu/j63W7WbR5H9sPmpQM0DYriS7NUjk/J5UuTeuTXd+lnh0RkTpM4UZOHa5UaH9lcAMoyoctc4OXm2+ZCwUrYc/64Lbk/7ABA2z1cfov5dycntwxpAdlyeezcMs+vl4fnJ+zakdhaAjrjflbgeD9sLo0DYad85ql0qFRMg6r1tYREakrFG7k1JWUBWdfHdwg2LOzdT5snQtb5mJsX4rbtxdWvBPcAJc7jYubdefiZj3gmu7sTujCoq0HWLR5H4u37mPFTwfYVeRhxsp8ZqzMB8BuNdOxcT06ZafQsUk9Omen0LS+W707IiKnKYUbOX24UqHNwOAGVJTsZ8H7L3BhVgWWH+cH5++U7oZVHwU3IM1Zj4FNujKw0blw6bmUZ3RkeaGbxVv2sWjzPpZs3cfeEi+Ltuxj0ZZ9oY9Kcdvo2CSFTk3qBR+z65GRpHthiYicDhRu5PRlT2B3UnsClwzCYrMFJyhvXxq8CmvLXNj6bfCO5uvzghvgBC5IzOKCRudCs3Mxcjuz1dGeRbttfP/jfpb9eIBV2wvZX+rjy7W7+HLtrtDHNaznpEOjZNo3TKZ9o2TaN6yn+TsiIqcghRupO6wOaHphcLvod+CvgPzv4afF1Xc037UaivNh7XRYOx0T0AxolpjJ0ORGUL8R/qZZ7CKVDZ56rCxys3CPg/l7HOw4YLDjQDmfrdoZ+sgkh5V2lWGnXcMk2jesR6vMRN0fS0QkjhRupO6yWKHxecGtircE8ldUh53tS2H3WiguCG4sxQJkVW49gJEADvBb3ex3NWWrOZuV3kzmF6Wx2tuIZZszWbB5b+gjzCZo1iCBVhmJtMlKolVmEm0yk2ieloDdao5lC4iInJFOiXDz3HPP8cQTT5Cfn0+nTp145pln6Nq1a61l33vvPR599FHWr1+Pz+ejVatW/O53v+PGG2+Mca3ltGRPgKbdglsVTxHsXhe8OqtoOxTuOOT5Dijfj6WilAZFq2nAas4FfmkFrBAwWdhnb8RmU2OWl2ew0+fCs8+Kd5+NgjU2thk2ZmClwmSnfr0kMuvXIznrLDKzW9IqM5mcNLeu1hIRiaC4h5tp06YxZswYpkyZQrdu3Zg8eTIDBgxgzZo1ZGRk1Chfv359/vjHP9K2bVvsdjsff/wxI0aMICMjgwEDBsThG8hpz5EU3rtTG28pFP4U7OXZtSYYhnavgV1rMXuLaODZRgO20QXgSLeCKK3cfoRdC+uxLNCS/xot2ZHYAW9WZ5pkZdIyPZFWmYmclZ5IoiPuf0RFRE47cf+bc9KkSdx6662MGDECgClTpvDJJ58wdepUHnjggRrle/XqFfb6rrvu4rXXXuPrr79WuJHosbshrVVwa3t59X7DCPbyVAYd9m4Ab3Hw5qEV5eD3QoUHw+/BV16Gx1OG31NGUtmPpJsO0M+ymH4shnIIbDKxfmMjlgVa8pbRklWBpnhdGbgbNKJRg3o0q+8mu76bZg0SaNbATXqiA7NZk5lFRA4V13Dj9XpZvHgxY8eODe0zm8307duXefPmHfV8wzD4/PPPWbNmDY899litZTweDx6PJ/S6sLAQAJ/Ph8/nO8lvEK7q/SL9vlK7U6a9XWmQnQbZPY5YzETwai2AgK8Mo2A5/LQY75aFmLYvxlXyE61NP9Ha/BPXMKeyILAL9uxMYqeRSoGRymYjhfmksteUSiAhE0dyGompmdRrkEVaRiZN6ieSneoiyRnZu4meMu19hlB7x5baO7ZOpL2Pp6zJMAzjuGsVIdu3b6dx48bMnTuX3Nzc0P7f//73zJkzh/nz59d63oEDB2jcuDEejweLxcLzzz/PLbfcUmvZ8ePHM2HChBr733zzTdxud2S+iEgEOHwHSCndSGrJBlJLN5BQno/Ttx8L/mN+j4Bh4gAJ7DWSOEAixeZkPJZE/NYEDJsLsz0Bq8ON3eEGmxufpWpLwG/RPbhE5NRVWlrKDTfcwIEDB0hOTj5i2bgPS52IpKQkli1bRnFxMbNmzWLMmDGcddZZNYasAMaOHcuYMWNCrwsLC8nOzqZ///5HbZzj5fP5yMvLo1+/fthskf1fs9R0JrR3wAgQKNsHRfmYigugOPgYKNyBZ992/IUFULYXu2cvLn8RZpNBKsWkmoqr38RfuXkO9ylBPrMTrzOdQEI6lqQM7PWyMCVlQkI6RkIGFc4GfLXkB3r0vQJbYgMw6cqvaDoTfr9PJWrv2DqR9q4aeTkWcQ03aWlpWCwWCgoKwvYXFBSQlZV12PPMZjMtW7YEoHPnzqxatYqJEyfWGm4cDgcOR83/kdpstqj9AkfzvaWmOt/e9iyoF/7nwUIt85b9FcFbVJTuoezATvbs2kHhnnzK9hfgKd6Hv3Q/lB/A6ivEHSihHiUkm0pIphSrKYAtUI6tdBuUboNdh7558C+LfgA/3IeBiYCjHiZ3KmZXSnD1aFcqOFPAWS94VZojCeyJlc8TwZ500PPE4LpEVlfwkn05rDr/+32KUXvH1vG09/H8XOL6t4rdbqdLly7MmjWLIUOGABAIBJg1axajR48+5vcJBAJh82pEzkgWKySmQ2I6roy2NGl1+KIHynz8tK+MNftK+XFvKTv37KZ0Xz4VB/IxFe/EWr6bBuwnnf2kmwpJN+0nzXSAVIpIMHkwYWDx7AfPfth3+M85JmZrMORYHWBzgdUZ3GyuYFCqCk/OykdXSvjzqgBlTwSr/SQrIyJ1Qdz/yzRmzBiGDx/O+eefT9euXZk8eTIlJSWhq6duuukmGjduzMSJEwGYOHEi559/Pi1atMDj8fDpp5/yr3/9ixdeeCGeX0PktFLPZaOey0b7RlVDs2eFHfcHDPYUe8gvLCf/QDnfF5azfV8pi1dtwJmYTOmBvZQV7cFVUUiKqZh6lJBiKqGeqZhkSkmgHLepnMSDHpPMHhJN5bgpw2Ec9J+RQAV4i4LbyTJbq4OOPQFs7uBzVwokZkBCRmUAzKx+npAR7E0SkToj7uHm2muvZdeuXTz00EPk5+fTuXNnZsyYQWZmJgBbt27FbK4e2y8pKeGOO+7gxx9/xOVy0bZtW15//XWuvfbaeH0FkTrHYjaRkewkI9lJxybBfT6fj0996xg0qDs2mw3DMCgsq2D7gTLyD5Sz40A5Ow6UsbrQw86icnYWedhZ5GFPsYfAIZctmAjgwIcDH068OE3e0PMESwXpToNMZwWZDg8Z1nIaWEpJNZWQRDEJgSJcFUXYKgqxlO/H5C0Bf2VYClQE7ydWfuD4vrDNHewNMlvBbKl8rHp+0GuLvTo8ORIrh96SqofaDh5ys9jB4gj2JlkcYLFV7q/cZ7KAyRScu1S1Yarcp0v8RU5G3MMNwOjRow87DDV79uyw13/5y1/4y1/+EoNaiciRmEwm6rlt1HPbaNfw8JPzK/wB9pZ4K8NOOTsLPewq8rC72MOuYg+7i7zsLvawo9hDUXkFVADFldtR6wApLhsZSRYauQM0dAfIdFaQ4fDTwO6jvtVHitVLMoUk+fbh9O7BVLwTSnZC8U4o2QW+0urtlGHCajIzyOzAujkT3A0gIS346K4P7qrnDSqH5g7qrbIngC0BzMcw4dswgoHQ74WAPxjWFKykDjglwo2I1F1WiznUCwT1jli23OdnT4mX3ZXhZ0+xl90lwQC0p+SgfcUe9pZ4CRiwr9THvlIfa8LeyVK5Va0s1ABojtkEqW479RMqtzQ7Wc4Ksm1FNLB5SXKYSLKZSHJAog0SbCYSrAZ2c2UIqPAE70/mLQZPcXAozVMcvIVHaF9xaPFG/L5gr1KFJ7jP7w2+z1EZmAw/Nn8p7NsU3I6XzV0ddiyO6s8/tF4c1K1mdUFyo8qtce3PTZbK96p8nwrPIc99wUWdLPbgZrYFe60s9oMeK5/bXMG6HUsQEzkOCjcicspw2iw0TnHROMV11LL+gMG+Ui97ioPBZ0+xlz3FnmA4qny+t6Q6CBWWVxAwYE+Jlz0l3sO8a+3LfjmsZuq5XKS4k0lxNaae20aKy0aK20ZKop166cE5TCluGykuO6kJNuon2HHZLJgO7QkJ+IPhwAgctBnhjxj4vOV8mfcpl1xwNlbPfijdE76V7A4+lu8P3h6kKnRVfYeq3qiSWi59O5yKsuAq23s3HPs5kWBxVE4kd4DNWf3c6jxkSM9WWfag55bKK2gOarsazzGCYc+RBI7kysfKzVkv+Gh2YfcVBnv0rNaDzg9Uv4cRAEwHDVPaDhnGtCmonSIUbkTktGQxm0hLdJCW6ACSjlre5w+wr8TL3lIve4uDAacqHO0r9bK3xMuBMh+FZT4OlPnYX/k8YICnIhCaQ3Q87FYz9d12UhPspLptpCbYg6/dNpKcNhKdVhIdlZvTSoLdRlLlPrvLoNjZECO7GxzrJbCGEbztR1XQ8ZYEg09FebC3JDT/x15zLhAmKC6Awu2V20+V2/bqx+KdgBHsvTla2PD7Knt4fOG9VlW9RwcHSX9l708cL3q1AZcBrDjZdzJVz82qWgIhbE5WUnWPmrm2G+YeEoYPnpNlNoe/rtqsjvDPOXgpBkfisQ9T1iEKNyJyRrCFDY8dm0DAoNhbwYHSysBT9VjmZX9pMPzsL61+faDMx75SL/tKfHj9AbwVgeAVZ4XlJ1Zns4VHV8wJzm1y2ajnsoeudEup3JfsspLkqA5KSU4rSc5kEpPqY7ce5z9o9ZsHt8PxVwTn5NT6j/Jx8vuCoavCA76y4GNFWc3XBwekg4fUDg5NcMiE7EOfE+zFKi8MDiF6isBTWP1YXojhKcJkVK0GXjXR++D3qnxdNU8pcLhbARjB+pV5oGzvybdTpFidwVBaNUnedOijOfgY6kE8qLfq0J4wi616gr3FHlyGIjQMWfk8vQ0MeCR+Xzdunywicoozm00kO20kO21kH8d5hmFQ6vWHgs7eUi/7K3uH9pV42Vfqo6jcR7HHT7HHR4nHT7GngqLyCko8FZT5gv/I+gImCoo8FBxnj1EVu9VMUmWvUJKzOgQFn1tDvUdJBwWjBLs1rEcpwWHFYTUHh9ciueCipXIujuPovW6xUOH18umnnzLo8suPfbG4QKA66AQqgkOOoblZh8zLqvG6hBrDoDXuhnTQEJvhP2QIMxD8PMN/yOdVvnfVZxmByi94YgH7hHmOfTXhaFC4ERGJMJPJREJlMGiSevznV/gD7C8p56PpeZx3YU9KfEaoZ6iq56iq16iwKiSV+ygqr6DYU0GpNxiOvBUB9lQcaY7RsbFZgt/n4MATfG0JvT50f4L90H1WEir3n5J3sz+RS/DNZjDbgVN08UjDCPaCeUuCvWCByoBUFcQM/0GPlYGpRs/XIb1XUDm8WNlzFvAdMgRZ+dzdIJ7fXOFGRORUY7WYqeey0cAJHRolH/ftAPwBg2JPMOgUl1dQVO6jqLJnqOp1VU9RYbmvcl8FJd7g8apzq0KSzx8MV/tLI3PHbLfdgtseDDsumwW33UKCw4rLVvlot+C2WXA7rCRUHktwVJ5jt+KuDElVYcllt1T3Lkk1kwns7uB2hlG4ERGpYyxmU2huzsnwB4xQ4CnxVFDkCT6WeCoo9vgrH2vuK/FWD7GFynj9+CtXcyz1+in1+tl9DGsZHSuL2RQMSXZrMDyFwlDwMRiogoGpKjiF9tmtOCwGm4tgbUERyW5naL/TptB0OlK4ERGRWlkOmnN0sgzDwFMROCgM+SnzBR+DYSfYU1Tm9VPirQg9lnoqH73B4FR6yP5yX3BOiT9gUFTZA3XirPx9xbywPSYTlb1LwTDksllw2i04rWactsrXtuDzqu3gfS6bBYfNXLnPgstuwWm14LKbcdmrgpYFu0UhKpIUbkREJOpMJlPoH//g5fuR4Q8YoWB0aAAqO+j1wQGqNBSWqgNWicfHngPFYLVT6vWHQpNhVPc0RVNVz5P7kJ4mp82CwxoMSM7KR0dlsHJYzTiswXKug3ut7NXDe1XDeE6rBZvFdMYEKIUbERE5bVnMJpKcwXWDTobP5wteLTWoNzabjUDAoMx3aCgK9iyV+/yUV1Q+rwhQHrYvQHlF5WtfMCQFywXLeyqCr8t8wc1bUVvPU/QW/LFZTNgs5tBmt5iwWauem0MhqqrnqSpIOW3VAct1UPCq6s1y2S2hHi6XzUKi00r9hPhNtFa4EREROYTZXH3FG0Sup+lQFf4ApT4/pZ7wEFX1vNwXDEQeXzBIeXwBPBXB0FT1WO4Lli85OIgdNJznP+jOtT6/gc/vB6LbE9WxST0+Gt0zqp9xJAo3IiIicWK1mEm2mCMyr6k2hmHg9Qco9wbwBQL4/AF8FcF9voM2b+W+qhAVFqp81WGqzFfZO+ULD2ClVb1RleHMbY/AQo8nQeFGRESkjjKZTME5O9bYhg2jxoKEsXVm3WxCREREoi7eE5cVbkRERKROUbgRERGROkXhRkREROoUhRsRERGpUxRuREREpE5RuBEREZE6ReFGRERE6hSFGxEREalTFG5ERESkTlG4ERERkTpF4UZERETqFIUbERERqVMUbkRERKROsca7ArFWdRv2wsLCiL+3z+ejtLSUwsJCbDZbxN9fwqm9Y0vtHVtq79hSe8fWibR31b/bVf+OH8kZF26KiooAyM7OjnNNRERE5HgVFRVRr169I5YxGccSgeqQQCDA9u3bSUpKwmQyRfS9CwsLyc7OZtu2bSQnJ0f0vaUmtXdsqb1jS+0dW2rv2DqR9jYMg6KiIho1aoTZfORZNWdcz43ZbKZJkyZR/Yzk5GT94YghtXdsqb1jS+0dW2rv2Dre9j5aj00VTSgWERGROkXhRkREROoUhZsIcjgcjBs3DofDEe+qnBHU3rGl9o4ttXdsqb1jK9rtfcZNKBYREZG6TT03IiIiUqco3IiIiEidonAjIiIidYrCjYiIiNQpCjcR8txzz5GTk4PT6aRbt24sWLAg3lWqM7788ksGDx5Mo0aNMJlMfPDBB2HHDcPgoYceomHDhrhcLvr27cu6deviU9nT3MSJE7ngggtISkoiIyODIUOGsGbNmrAy5eXljBo1igYNGpCYmMjQoUMpKCiIU41Pby+88AIdO3YMLWSWm5vL9OnTQ8fV1tH117/+FZPJxN133x3apzaPnPHjx2MymcK2tm3bho5Hs60VbiJg2rRpjBkzhnHjxrFkyRI6derEgAED2LlzZ7yrVieUlJTQqVMnnnvuuVqPP/744zz99NNMmTKF+fPnk5CQwIABAygvL49xTU9/c+bMYdSoUXz77bfk5eXh8/no378/JSUloTL33HMP//3vf3n77beZM2cO27dv5+qrr45jrU9fTZo04a9//SuLFy9m0aJFXHrppVx11VWsXLkSUFtH08KFC3nxxRfp2LFj2H61eWR16NCBHTt2hLavv/46dCyqbW3ISevatasxatSo0Gu/3280atTImDhxYhxrVTcBxvvvvx96HQgEjKysLOOJJ54I7du/f7/hcDiMf//733GoYd2yc+dOAzDmzJljGEawbW02m/H222+HyqxatcoAjHnz5sWrmnVKamqq8c9//lNtHUVFRUVGq1atjLy8POOSSy4x7rrrLsMw9PsdaePGjTM6depU67Fot7V6bk6S1+tl8eLF9O3bN7TPbDbTt29f5s2bF8eanRk2bdpEfn5+WPvXq1ePbt26qf0j4MCBAwDUr18fgMWLF+Pz+cLau23btjRt2lTtfZL8fj9vvfUWJSUl5Obmqq2jaNSoUVx++eVhbQv6/Y6GdevW0ahRI8466yyGDRvG1q1bgei39Rl348xI2717N36/n8zMzLD9mZmZrF69Ok61OnPk5+cD1Nr+VcfkxAQCAe6++2569OjB2WefDQTb2263k5KSElZW7X3ili9fTm5uLuXl5SQmJvL+++/Tvn17li1bpraOgrfeeoslS5awcOHCGsf0+x1Z3bp149VXX6VNmzbs2LGDCRMmcNFFF7FixYqot7XCjYjUatSoUaxYsSJsjFwir02bNixbtowDBw7wzjvvMHz4cObMmRPvatVJ27Zt46677iIvLw+n0xnv6tR5l112Weh5x44d6datG82aNeM///kPLpcrqp+tYamTlJaWhsViqTHDu6CggKysrDjV6sxR1cZq/8gaPXo0H3/8MV988QVNmjQJ7c/KysLr9bJ///6w8mrvE2e322nZsiVdunRh4sSJdOrUiaeeekptHQWLFy9m586dnHfeeVitVqxWK3PmzOHpp5/GarWSmZmpNo+ilJQUWrduzfr166P++61wc5LsdjtdunRh1qxZoX2BQIBZs2aRm5sbx5qdGZo3b05WVlZY+xcWFjJ//ny1/wkwDIPRo0fz/vvv8/nnn9O8efOw4126dMFms4W195o1a9i6davaO0ICgQAej0dtHQV9+vRh+fLlLFu2LLSdf/75DBs2LPRcbR49xcXFbNiwgYYNG0b/9/ukpySL8dZbbxkOh8N49dVXjR9++MEYOXKkkZKSYuTn58e7anVCUVGRsXTpUmPp0qUGYEyaNMlYunSpsWXLFsMwDOOvf/2rkZKSYnz44YfG999/b1x11VVG8+bNjbKysjjX/PRz++23G/Xq1TNmz55t7NixI7SVlpaGytx2221G06ZNjc8//9xYtGiRkZuba+Tm5sax1qevBx54wJgzZ46xadMm4/vvvzceeOABw2QyGTNnzjQMQ20dCwdfLWUYavNI+t3vfmfMnj3b2LRpk/HNN98Yffv2NdLS0oydO3cahhHdtla4iZBnnnnGaNq0qWG3242uXbsa3377bbyrVGd88cUXBlBjGz58uGEYwcvBH3zwQSMzM9NwOBxGnz59jDVr1sS30qep2toZMF555ZVQmbKyMuOOO+4wUlNTDbfbbfzsZz8zduzYEb9Kn8ZuueUWo1mzZobdbjfS09ONPn36hIKNYaitY+HQcKM2j5xrr73WaNiwoWG3243GjRsb1157rbF+/frQ8Wi2tckwDOPk+39ERERETg2acyMiIiJ1isKNiIiI1CkKNyIiIlKnKNyIiIhInaJwIyIiInWKwo2IiIjUKQo3IiIiUqco3IjIGclkMvHBBx/EuxoiEgUKNyISczfffDMmk6nGNnDgwHhXTUTqAGu8KyAiZ6aBAwfyyiuvhO1zOBxxqo2I1CXquRGRuHA4HGRlZYVtqampQHDI6IUXXuCyyy7D5XJx1lln8c4774Sdv3z5ci699FJcLhcNGjRg5MiRFBcXh5WZOnUqHTp0wOFw0LBhQ0aPHh12fPfu3fzsZz/D7XbTqlUrPvroo9Cxffv2MWzYMNLT03G5XLRq1apGGBORU5PCjYickh588EGGDh3Kd999x7Bhw7juuutYtWoVACUlJQwYMIDU1FQWLlzI22+/zWeffRYWXl544QVGjRrFyJEjWb58OR999BEtW7YM+4wJEyZwzTXX8P333zNo0CCGDRvG3r17Q5//ww8/MH36dFatWsULL7xAWlpa7BpARE5cRG6/KSJyHIYPH25YLBYjISEhbHvkkUcMwwjenfy2224LO6dbt27G7bffbhiGYfzjH/8wUlNTjeLi4tDxTz75xDCbzUZ+fr5hGIbRqFEj449//ONh6wAYf/rTn0Kvi4uLDcCYPn26YRiGMXjwYGPEiBGR+cIiElOacyMicdG7d29eeOGFsH3169cPPc/NzQ07lpuby7JlywBYtWoVnTp1IiEhIXS8R48eBAIB1qxZg8lkYvv27fTp0+eIdejYsWPoeUJCAsnJyezcuROA22+/naFDh7JkyRL69+/PkCFD6N69+wl9VxGJLYUbEYmLhISEGsNEkeJyuY6pnM1mC3ttMpkIBAIAXHbZZWzZsoVPP/2UvLw8+vTpw6hRo/jb3/4W8fqKSGRpzo2InJK+/fbbGq/btWsHQLt27fjuu+8oKSkJHf/mm28wm820adOGpKQkcnJymDVr1knVIT09neHDh/P6668zefJk/vGPf5zU+4lIbKjnRkTiwuPxkJ+fH7bParWGJu2+/fbbnH/++fTs2ZM33niDBQsW8PLLLwMwbNgwxo0bx/Dhwxk/fjy7du3it7/9LTfeeCOZmZkAjB8/nttuu42MjAwuu+wyioqK+Oabb/jtb397TPV76KGH6NKlCx06dMDj8fDxxx+HwpWInNoUbkQkLmbMmEHDhg3D9rVp04bVq1cDwSuZ3nrrLe644w4aNmzIv//9b9q3bw+A2+3mf//7H3fddRcXXHABbreboUOHMmnSpNB7DR8+nPLycv7+979z7733kpaWxs9//vNjrp/dbmfs2LFs3rwZl8vFRRddxFtvvRWBby4i0WYyDMOIdyVERA5mMpl4//33GTJkSLyrIiKnIc25ERERkTpF4UZERETqFM25EZFTjkbLReRkqOdGRERE6hSFGxEREalTFG5ERESkTlG4ERERkTpF4UZERETqFIUbERERqVMUbkRERKROUbgRERGROkXhRkREROqU/wcm83P1cZcBOAAAAABJRU5ErkJggg==\n" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "code", + "source": [ + "# Оценка качества работы модели на тестовых данных\n", + "scores = model.evaluate(X_test, y_test)\n", + "print('Loss on test data:', scores[0])\n", + "print('Accuracy on test data:', scores[1])" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "hpJALaZGnyWF", + "outputId": "c160e14d-fc06-41b1-85d9-00d24e11a392" + }, + "execution_count": 231, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "\u001b[1m313/313\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - accuracy: 0.9213 - loss: 0.2825\n", + "Loss on test data: 0.28365787863731384\n", + "Accuracy on test data: 0.9225000143051147\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "# сохранение модели на диск\n", + "model.save('/content/drive/MyDrive/Colab Notebooks/models/model_zero_hide.keras')" + ], + "metadata": { + "id": "Z6eSmpwXn1zM" + }, + "execution_count": 230, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "model100 = Sequential()\n", + "model100.add(Dense(units=100,input_dim=num_pixels, activation='sigmoid'))\n", + "model100.add(Dense(units=num_classes, activation='softmax'))\n", + "\n", + "model100.compile(loss='categorical_crossentropy', optimizer='sgd', metrics=['accuracy'])" + ], + "metadata": { + "id": "G1qGmPNF9afO" + }, + "execution_count": 236, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "# вывод информации об архитектуре модели\n", + "print(model100.summary())" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 211 + }, + "id": "2WtfjJKY9abn", + "outputId": "2bf5f550-f913-4a87-d2ea-7bf6f4b6fa88" + }, + "execution_count": 250, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "\u001b[1mModel: \"sequential_10\"\u001b[0m\n" + ], + "text/html": [ + "
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_19 (\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_20 (\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_19 (Dense)                │ (None, 100)            │        78,500 │\n",
+              "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+              "│ dense_20 (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,510\u001b[0m (310.59 KB)\n" + ], + "text/html": [ + "
 Total params: 79,510 (310.59 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": "stream", + "name": "stdout", + "text": [ + "None\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "# Обучаем модель\n", + "H = model100.fit(X_train, y_train, validation_split=0.1, epochs=50)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "rPuWd80o9aYD", + "outputId": "4a8c1820-0ab1-42e0-8d92-c61653fe5f20" + }, + "execution_count": 251, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Epoch 1/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 5ms/step - accuracy: 0.5517 - loss: 1.8718 - val_accuracy: 0.8182 - val_loss: 0.9644\n", + "Epoch 2/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m8s\u001b[0m 4ms/step - accuracy: 0.8306 - loss: 0.8507 - val_accuracy: 0.8643 - val_loss: 0.6192\n", + "Epoch 3/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 3ms/step - accuracy: 0.8621 - loss: 0.5929 - val_accuracy: 0.8822 - val_loss: 0.4977\n", + "Epoch 4/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 5ms/step - accuracy: 0.8781 - loss: 0.4907 - val_accuracy: 0.8895 - val_loss: 0.4357\n", + "Epoch 5/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 4ms/step - accuracy: 0.8836 - loss: 0.4382 - val_accuracy: 0.8958 - val_loss: 0.3980\n", + "Epoch 6/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 4ms/step - accuracy: 0.8918 - loss: 0.4026 - val_accuracy: 0.8988 - val_loss: 0.3721\n", + "Epoch 7/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m12s\u001b[0m 5ms/step - accuracy: 0.8967 - loss: 0.3788 - val_accuracy: 0.9008 - val_loss: 0.3532\n", + "Epoch 8/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m8s\u001b[0m 4ms/step - accuracy: 0.9012 - loss: 0.3593 - val_accuracy: 0.9052 - val_loss: 0.3390\n", + "Epoch 9/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m8s\u001b[0m 5ms/step - accuracy: 0.9042 - loss: 0.3401 - val_accuracy: 0.9068 - val_loss: 0.3280\n", + "Epoch 10/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 4ms/step - accuracy: 0.9056 - loss: 0.3346 - val_accuracy: 0.9088 - val_loss: 0.3194\n", + "Epoch 11/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m8s\u001b[0m 5ms/step - accuracy: 0.9084 - loss: 0.3252 - val_accuracy: 0.9132 - val_loss: 0.3118\n", + "Epoch 12/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 4ms/step - accuracy: 0.9070 - loss: 0.3252 - val_accuracy: 0.9137 - val_loss: 0.3045\n", + "Epoch 13/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m8s\u001b[0m 5ms/step - accuracy: 0.9122 - loss: 0.3088 - val_accuracy: 0.9150 - val_loss: 0.2984\n", + "Epoch 14/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m8s\u001b[0m 4ms/step - accuracy: 0.9135 - loss: 0.3055 - val_accuracy: 0.9167 - val_loss: 0.2924\n", + "Epoch 15/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m8s\u001b[0m 5ms/step - accuracy: 0.9152 - loss: 0.2963 - val_accuracy: 0.9177 - val_loss: 0.2876\n", + "Epoch 16/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 5ms/step - accuracy: 0.9169 - loss: 0.2904 - val_accuracy: 0.9198 - val_loss: 0.2828\n", + "Epoch 17/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m8s\u001b[0m 3ms/step - accuracy: 0.9186 - loss: 0.2875 - val_accuracy: 0.9215 - val_loss: 0.2783\n", + "Epoch 18/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m8s\u001b[0m 5ms/step - accuracy: 0.9178 - loss: 0.2873 - val_accuracy: 0.9225 - val_loss: 0.2758\n", + "Epoch 19/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 4ms/step - accuracy: 0.9218 - loss: 0.2746 - val_accuracy: 0.9235 - val_loss: 0.2715\n", + "Epoch 20/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m8s\u001b[0m 5ms/step - accuracy: 0.9213 - loss: 0.2733 - val_accuracy: 0.9248 - val_loss: 0.2677\n", + "Epoch 21/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 4ms/step - accuracy: 0.9228 - loss: 0.2682 - val_accuracy: 0.9250 - val_loss: 0.2643\n", + "Epoch 22/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m8s\u001b[0m 5ms/step - accuracy: 0.9251 - loss: 0.2646 - val_accuracy: 0.9262 - val_loss: 0.2616\n", + "Epoch 23/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 4ms/step - accuracy: 0.9246 - loss: 0.2648 - val_accuracy: 0.9283 - val_loss: 0.2592\n", + "Epoch 24/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 4ms/step - accuracy: 0.9241 - loss: 0.2618 - val_accuracy: 0.9285 - val_loss: 0.2544\n", + "Epoch 25/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m8s\u001b[0m 5ms/step - accuracy: 0.9265 - loss: 0.2548 - val_accuracy: 0.9293 - val_loss: 0.2521\n", + "Epoch 26/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 4ms/step - accuracy: 0.9285 - loss: 0.2484 - val_accuracy: 0.9313 - val_loss: 0.2490\n", + "Epoch 27/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m8s\u001b[0m 5ms/step - accuracy: 0.9289 - loss: 0.2502 - val_accuracy: 0.9318 - val_loss: 0.2471\n", + "Epoch 28/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 4ms/step - accuracy: 0.9303 - loss: 0.2405 - val_accuracy: 0.9335 - val_loss: 0.2436\n", + "Epoch 29/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 4ms/step - accuracy: 0.9309 - loss: 0.2410 - val_accuracy: 0.9340 - val_loss: 0.2413\n", + "Epoch 30/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 4ms/step - accuracy: 0.9296 - loss: 0.2439 - val_accuracy: 0.9340 - val_loss: 0.2385\n", + "Epoch 31/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 4ms/step - accuracy: 0.9323 - loss: 0.2335 - val_accuracy: 0.9357 - val_loss: 0.2363\n", + "Epoch 32/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m8s\u001b[0m 5ms/step - accuracy: 0.9314 - loss: 0.2327 - val_accuracy: 0.9353 - val_loss: 0.2347\n", + "Epoch 33/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 4ms/step - accuracy: 0.9343 - loss: 0.2302 - val_accuracy: 0.9370 - val_loss: 0.2315\n", + "Epoch 34/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 4ms/step - accuracy: 0.9358 - loss: 0.2307 - val_accuracy: 0.9377 - val_loss: 0.2291\n", + "Epoch 35/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 5ms/step - accuracy: 0.9372 - loss: 0.2223 - val_accuracy: 0.9375 - val_loss: 0.2273\n", + "Epoch 36/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 4ms/step - accuracy: 0.9359 - loss: 0.2188 - val_accuracy: 0.9382 - val_loss: 0.2245\n", + "Epoch 37/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 4ms/step - accuracy: 0.9374 - loss: 0.2192 - val_accuracy: 0.9385 - val_loss: 0.2238\n", + "Epoch 38/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 4ms/step - accuracy: 0.9396 - loss: 0.2111 - val_accuracy: 0.9393 - val_loss: 0.2209\n", + "Epoch 39/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m8s\u001b[0m 5ms/step - accuracy: 0.9390 - loss: 0.2109 - val_accuracy: 0.9395 - val_loss: 0.2187\n", + "Epoch 40/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 4ms/step - accuracy: 0.9377 - loss: 0.2138 - val_accuracy: 0.9403 - val_loss: 0.2169\n", + "Epoch 41/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m8s\u001b[0m 5ms/step - accuracy: 0.9389 - loss: 0.2095 - val_accuracy: 0.9410 - val_loss: 0.2154\n", + "Epoch 42/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 5ms/step - accuracy: 0.9402 - loss: 0.2089 - val_accuracy: 0.9417 - val_loss: 0.2130\n", + "Epoch 43/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 4ms/step - accuracy: 0.9409 - loss: 0.2048 - val_accuracy: 0.9415 - val_loss: 0.2116\n", + "Epoch 44/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m13s\u001b[0m 5ms/step - accuracy: 0.9413 - loss: 0.2042 - val_accuracy: 0.9418 - val_loss: 0.2097\n", + "Epoch 45/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 4ms/step - accuracy: 0.9418 - loss: 0.2014 - val_accuracy: 0.9420 - val_loss: 0.2075\n", + "Epoch 46/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 4ms/step - accuracy: 0.9418 - loss: 0.1994 - val_accuracy: 0.9433 - val_loss: 0.2054\n", + "Epoch 47/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 4ms/step - accuracy: 0.9440 - loss: 0.1932 - val_accuracy: 0.9435 - val_loss: 0.2038\n", + "Epoch 48/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m8s\u001b[0m 5ms/step - accuracy: 0.9432 - loss: 0.1949 - val_accuracy: 0.9428 - val_loss: 0.2029\n", + "Epoch 49/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 4ms/step - accuracy: 0.9455 - loss: 0.1864 - val_accuracy: 0.9445 - val_loss: 0.2007\n", + "Epoch 50/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 4ms/step - accuracy: 0.9459 - loss: 0.1889 - val_accuracy: 0.9447 - val_loss: 0.1989\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "# вывод графика ошибки по эпохам\n", + "plt.plot(H.history['loss'])\n", + "plt.plot(H.history['val_loss'])\n", + "plt.grid()\n", + "plt.xlabel('Epochs')\n", + "plt.ylabel('loss')\n", + "plt.legend(['train_loss', 'val_loss'])\n", + "plt.title('Loss by epochs')\n", + "plt.show()" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 472 + }, + "id": "JLrW7S1g9aUe", + "outputId": "fac7e0b7-c9ef-4073-a7ff-025bdf780177" + }, + "execution_count": 252, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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387HH38M+H8fAwcOZObMmaxevRqbzca7774b0jKr5SZIzGYTTpuF0govJRUaeCMiIieWlZXF119/zfbt24mJiTluq0qXLl14++23GT16NCaTibvvvjskLTDH85vf/IZzzz2XP//5z1xzzTUsXbqUJ554gieffBKA//3vf2zdupULL7yQxMRE3n//fXw+H926dePrr79m0aJFDB8+nLS0NL7++mv27dtH9+7dQ1pmtdwEUfW4m1KFGxEROYk777wTi8XCGWecQWpq6nHH0MyZM4fExEQGDBjA6NGjGTFiBGeffXbYynn22Wfz73//m9dee41evXpxzz33cO+99zJhwgQAEhISePvtt7n44ovp0aMHTz/9NK+++io9e/YkLi6Ozz77jFGjRtG1a1f+9Kc/8cgjjzBy5MiQllktN0HkHyFfoW4pERE5qa5du7J06dIa56oDw9GysrICXTzVJk+eXOP5sd1UdU1sqe92CoMGDar1/rFjxzJ27Ng6rz///PNZvHhxna/16NGDBQsW1Dof6pYntdwEkcuulhsREZFIU7gJImdVt1SxWm5ERKSJuummm4iJianzuOmmmyJdvKBQt1QQuaoWblLLjYiINFX33nsvd955Z52vxcXFhbk0oaFwE0TqlhIRkaYuLS2NtLS0SBcjpNQtFUTVS25rQLGIiEjkKNwEkVNTwUVERCJO4SaIqrultIifiIhI5CjcBFH1gOKSCnVLiYiIRIrCTRAFuqXcarkRERGJFIWbINJsKRERCZesrCzmzp1br2tNJlPIN6tsShRugsipbikREZGIU7gJouqNM0vULSUiIhIxCjdB5LKr5UZERE7umWeeITMzs9YGkpdffjn/93//x5YtW7j88stJT08nJiaGc889l48++ihon//dd99x8cUXEx0dTXJyMpMmTaK4uDjw+uLFiznvvPNwuVwkJCQwcOBAduzYAcA333zD4MGDiY2NJS4ujr59+7JixYqglS0YFG6CSOvciIg0AYYBFSUNPzyljXvf0Ucdu3HX5Wc/+xkHDhzgk08+CZw7ePAgCxYsYNy4cRQXFzNq1CgWLVrE6tWrueSSSxg9ejQ7d+485eopKSlhxIgRJCYmsnz5ct544w0++ugjpkyZAkBlZSVjxozhoosu4ttvv2Xp0qVMmjQJk8kEwLhx42jTpg3Lly9n5cqV3HXXXVit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GzdupE2bNkEtYLNUHW48JeAuBEd8oFsK/AEnxt6oqhcREZGTaFTLzRNPPEFUVBRvvvkmTz31FK1btwbggw8+4JJLLglqAZslqxMc8f7HVQv52aPMmE3+U+qaEhERCZ1GNR+0a9eO//3vf7XO//Wvfz3lArUYsZlQfhiK9kBad0wmEy57FEXllQo3IiIiIdTovhGv18u7777LunXrAOjZsyeXXXYZFoslaIVr1mIzYN86KMoNnHLZ/OFGWzCIiIiETqPCzebNmxk1ahS7d++mW7duAMyaNYu2bdsyf/58OnXqFNRCNktxmf6fNRby0xYMIiIiodaoMTe33nornTp1YteuXaxatYpVq1axc+dOOnTowK233hrsMjZPdUwH1xYMIiIiodeolptPP/2Ur776iqSkpMC55ORkHnjgAQYOHBi0wjVrcUdNB69SvXmmFvITEREJnUa13NjtdoqKimqdLy4uxmaznXKhWoTYqm6poqNWKdZCfiIiIiHXqHDz05/+lEmTJvH1119jGAaGYfDVV19x0003cdlllzXoXvPmzSMrKwuHw0G/fv1YtmzZCa+fO3cu3bp1Izo6mrZt23LHHXdQXl7emK8RWnW03AS2YNCAYhERkZBpVLh57LHH6NSpE/3798fhcOBwOBgwYACdO3dm7ty59b7P66+/ztSpU5k+fTqrVq0iOzubESNGkJ+fX+f1r7zyCnfddRfTp09n3bp1/POf/+T111/nD3/4Q2O+RmhVt9yU5IPX31JTvUqxWm5ERERCp1FjbhISEvjPf/7D5s2bA1PBe/ToQefOnRt0nzlz5vDLX/6SiRMnAvD0008zf/58nn32We66665a13/55ZcMHDiQ66+/HoCsrCyuu+46vv7668Z8jdBypYI5CnyVUJwH8a1xVndLaUCxiIhIyNQ73Jxst+9PPvkk8HjOnDknvV9FRQUrV65k2rRpgXNms5mhQ4eydOnSOt8zYMAAXnrpJZYtW8Z5553H1q1bef/997nhhhuO+zlutxu32x14Xr33lcfjwePxnLScDVF9v+qfUTHpmAp3U3loF4Yzjego/xLFxWXB/+zT0bH1LaGl+g4v1Xd4qb7DqzH13ZBr6x1uVq9eXa/rTCZTva7bv38/Xq+X9PT0GufT09NZv359ne+5/vrr2b9/P+effz6GYVBZWclNN910wm6pWbNmMXPm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ERGRFkXhRkRERFoUhRsRERFpURRugmTevHlkZWXhcDjo168fy5Yti3SRWozPPvuM0aNHk5mZiclk4t13363xumEY3HPPPbRq1Yro6GiGDh3Kpk2bIlPYZm7WrFmce+65xMbGkpaWxpgxY9iwYUONa8rLy5k8eTLJycnExMQwduxY8vLyIlTi5u2pp57izDPPDCxk1r9/fz744IPA66rr0HrggQcwmUzcfvvtgXOq8+CZMWMGJpOpxtG9e/fA66Gsa4WbIHj99deZOnUq06dPZ9WqVWRnZzNixAjy8/MjXbQWoaSkhOzsbObNm1fn67Nnz+axxx7j6aef5uuvv8blcjFixAjKy8vDXNLm79NPP2Xy5Ml89dVX5OTk4PF4GD58OCUlJYFr7rjjDv773//yxhtv8Omnn7Jnzx6uvPLKCJa6+WrTpg0PPPAAK1euZMWKFVx88cVcfvnlfP/994DqOpSWL1/O3/72N84888wa51XnwdWzZ0/27t0bOL744ovAayGta0NO2XnnnWdMnjw58Nzr9RqZmZnGrFmzIliqlgkw3nnnncBzn89nZGRkGA899FDgXEFBgWG3241XX301AiVsWfLz8w3A+PTTTw3D8Net1Wo13njjjcA169atMwBj6dKlkSpmi5KYmGj84x//UF2HUFFRkdGlSxcjJyfHuOiii4zbbrvNMAz9+Q626dOnG9nZ2XW+Fuq6VsvNKaqoqGDlypUMHTo0cM5sNjN06FCWLl0awZKdHrZt20Zubm6N+o+Pj6dfv36q/yA4fPgwAElJSQCsXLkSj8dTo767d+9Ou3btVN+nyOv18tprr1FSUkL//v1V1yE0efJkLr300hp1C/rzHQqbNm0iMzOTjh07Mm7cOHbu3AmEvq5Pu40zg23//v14vV7S09NrnE9PT2f9+vURKtXpIzc3F6DO+q9+TRrH5/Nx++23M3DgQHr16gX469tms5GQkFDjWtV343333Xf079+f8vJyYmJieOeddzjjjDNYs2aN6joEXnvtNVatWsXy5ctrvaY/38HVr18/nn/+ebp168bevXuZOXMmF1xwAWvXrg15XSvciEidJk+ezNq1a2v0kUvwdevWjTVr1nD48GHefPNNxo8fz6effhrpYrVIu3bt4rbbbiMnJweHwxHp4rR4I0eODDw+88wz6devH+3bt+ff//430dHRIf1sdUudopSUFCwWS60R3nl5eWRkZESoVKeP6jpW/QfXlClT+N///scnn3xCmzZtAuczMjKoqKigoKCgxvWq78az2Wx07tyZvn37MmvWLLKzs3n00UdV1yGwcuVK8vPzOfvss4mKiiIqKopPP/2Uxx57jKioKNLT01XnIZSQkEDXrl3ZvHlzyP98K9ycIpvNRt++fVm0aFHgnM/nY9GiRfTv3z+CJTs9dOjQgYyMjBr1X1hYyNdff636bwTDMJgyZQrvvPMOH3/8MR06dKjxet++fbFarTXqe8OGDezcuVP1HSQ+nw+32626DoEhQ4bw3XffsWbNmsBxzjnnMG7cuMBj1XnoFBcXs2XLFlq1ahX6P9+nPCRZjNdee82w2+3G888/b/zwww/GpEmTjISEBCM3NzfSRWsRioqKjNWrVxurV682AGPOnDnG6tWrjR07dhiGYRgPPPCAkZCQYPznP/8xvv32W+Pyyy83OnToYJSVlUW45M3PzTffbMTHxxuLFy829u7dGzhKS0sD19x0001Gu3btjI8//thYsWKF0b9/f6N///4RLHXzdddddxmffvqpsW3bNuPbb7817rrrLsNkMhkLFy40DEN1HQ5Hz5YyDNV5MP3mN78xFi9ebGzbts1YsmSJMXToUCMlJcXIz883DCO0da1wEySPP/640a5dO8NmsxnnnXee8dVXX0W6SC3GJ598YgC1jvHjxxuG4Z8Ofvfddxvp6emG3W43hgwZYmzYsCGyhW6m6qpnwHjuuecC15SVlRm33HKLkZiYaDidTuOKK64w9u7dG7lCN2P/93//Z7Rv396w2WxGamqqMWTIkECwMQzVdTgcG25U58FzzTXXGK1atTJsNpvRunVr45prrjE2b94ceD2UdW0yDMM49fYfERERkaZBY25ERESkRVG4ERERkRZF4UZERERaFIUbERERaVEUbkRERKRFUbgRERGRFkXhRkRERFoUhRsROS2ZTCbefffdSBdDREJA4UZEwm7ChAmYTKZaxyWXXBLpoolICxAV6QKIyOnpkksu4bnnnqtxzm63R6g0ItKSqOVGRCLCbreTkZFR40hMTAT8XUZPPfUUI0eOJDo6mo4dO/Lmm2/WeP93333HxRdfTHR0NMnJyUyaNIni4uIa1zz77LP07NkTu91Oq1atmDJlSo3X9+/fzxVXXIHT6aRLly689957gdcOHTrEuHHjSE1NJTo6mi5dutQKYyLSNCnciEiTdPfddzN27Fi++eYbxo0bx7XXXsu6desAKCkpYcSIESQmJrJ8+XLeeOMNPvrooxrh5amnnmLy5MlMmjSJ7777jvfee4/OnTvX+IyZM2dy9dVX8+233zJq1CjGjRvHwYMHA5//ww8/8MEHH7Bu3TqeeuopUlJSwlcBItJ4Qdl+U0SkAcaPH29YLBbD5XLVOO677z7DMPy7k99000013tOvXz/j5ptvNgzDMJ555hkjMTHRKC4uDrw+f/58w2w2G7m5uYZhGEZmZqbxxz/+8bhlAIw//elPgefFxcUGYHzwwQeGYRjG6NGjjYkTJwbnC4tIWGnMjYhExODBg3nqqadqnEtKSgo87t+/f43X+vfvz5o1awBYt24d2dnZuFyuwOsDBw7E5/OxYcMGTCYTe/bsYciQIScsw5lnnhl47HK5iIuLIz8/H4Cbb76ZsWPHsmrVKoYPH86YMWMYMGBAo76riISXwo2IRITL5arVTRQs0dHR9brOarXWeG4ymfD5fACMHDmSHTt28P7775OTk8OQIUOYPHkyDz/8cNDLKyLBpTE3ItIkffXVV7We9+jRA4AePXrwzTffUFJSEnh9yZIlmM1munXrRmxsLFlZWSxatOiUypCamsr48eN56aWXmDt3Ls8888wp3U9EwkMtNyISEW63m9zc3BrnoqKiAoN233jjDc455xzOP/98Xn75ZZYtW8Y///lPAMaNG8f06dMZP348M2bMYN++ffz617/mhhtuID09HYAZM2Zw0003kZaWxsiRIykqKmLJkiX8+te/rlf57rnnHvr27UvPnj1xu93873//C4QrEWnaFG5EJCIWLFhAq1atapzr1q0b69evB/wzmV577TVuueUWWrVqxauvvsoZZ5wBgNPp5MMPP+S2227j3HPPxel0MnbsWObMmRO41/jx4ykvL+evf/0rd955JykpKVx11VX1Lp/NZmPatGls376d6OhoLrjgAl577bUgfHMRCTWTYRhGpAshInI0k8nEO++8w5gxYyJdFBFphjTmRkRERFoUhRsRERFpUTTmRkSaHPWWi8ipUMuNiIiItCgKNyIiItKiKNyIiIhIi6JwIyIiIi2Kwo2IiIi0KAo3IiIi0qIo3IiIiEiLonAjIiIiLYrCjYiIiLQo/x/RCiNTOjp8RQAAAABJRU5ErkJggg==\n" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "code", + "source": [ + "# Оценка качества работы модели на тестовых данных\n", + "scores = model100.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": "8jdS02JZ9aRc", + "outputId": "b8c7f95a-861b-4d48-91df-b0d303b12425" + }, + "execution_count": 253, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "\u001b[1m313/313\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 4ms/step - accuracy: 0.9465 - loss: 0.1946\n", + "Loss on test data: 0.19745595753192902\n", + "Accuracy on test data: 0.9442999958992004\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "# сохранение модели на диск\n", + "model100.save('/content/drive/MyDrive/Colab Notebooks/models/model100in_1hide.keras')" + ], + "metadata": { + "id": "_bR3qoBy9aNy" + }, + "execution_count": 263, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "model300 = Sequential()\n", + "model300.add(Dense(units=300,input_dim=num_pixels, activation='sigmoid'))\n", + "model300.add(Dense(units=num_classes, activation='softmax'))\n", + "\n", + "model300.compile(loss='categorical_crossentropy', optimizer='sgd', metrics=['accuracy'])" + ], + "metadata": { + "id": "V4m3nGORGnPC" + }, + "execution_count": 257, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "# вывод информации об архитектуре модели\n", + "print(model300.summary())" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 211 + }, + "id": "yETaYKzdA9fp", + "outputId": "2fbe0ae2-eb31-4a93-96d4-16317167a89e" + }, + "execution_count": 258, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "\u001b[1mModel: \"sequential_14\"\u001b[0m\n" + ], + "text/html": [ + "
Model: \"sequential_14\"\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_27 (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m300\u001b[0m) │ \u001b[38;5;34m235,500\u001b[0m │\n", + "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", + "│ dense_28 (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m10\u001b[0m) │ \u001b[38;5;34m3,010\u001b[0m │\n", + "└─────────────────────────────────┴────────────────────────┴───────────────┘\n" + ], + "text/html": [ + "
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓\n",
+              "┃ Layer (type)                     Output Shape                  Param # ┃\n",
+              "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩\n",
+              "│ dense_27 (Dense)                │ (None, 300)            │       235,500 │\n",
+              "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+              "│ dense_28 (Dense)                │ (None, 10)             │         3,010 │\n",
+              "└─────────────────────────────────┴────────────────────────┴───────────────┘\n",
+              "
\n" + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "\u001b[1m Total params: \u001b[0m\u001b[38;5;34m238,510\u001b[0m (931.68 KB)\n" + ], + "text/html": [ + "
 Total params: 238,510 (931.68 KB)\n",
+              "
\n" + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "\u001b[1m Trainable params: \u001b[0m\u001b[38;5;34m238,510\u001b[0m (931.68 KB)\n" + ], + "text/html": [ + "
 Trainable params: 238,510 (931.68 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": "stream", + "name": "stdout", + "text": [ + "None\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "# Обучаем модель\n", + "H = model300.fit(X_train, y_train, validation_split=0.1, epochs=50)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "SFPh0Lw-A9Zq", + "outputId": "f428c438-35ca-4285-dceb-e4616c4ad4a0" + }, + "execution_count": 259, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Epoch 1/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 5ms/step - accuracy: 0.5545 - loss: 1.7947 - val_accuracy: 0.8370 - val_loss: 0.8455\n", + "Epoch 2/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 5ms/step - accuracy: 0.8401 - loss: 0.7563 - val_accuracy: 0.8668 - val_loss: 0.5617\n", + "Epoch 3/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 4ms/step - accuracy: 0.8676 - loss: 0.5395 - val_accuracy: 0.8873 - val_loss: 0.4600\n", + "Epoch 4/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 5ms/step - accuracy: 0.8786 - loss: 0.4621 - val_accuracy: 0.8970 - val_loss: 0.4114\n", + "Epoch 5/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 4ms/step - accuracy: 0.8869 - loss: 0.4196 - val_accuracy: 0.8990 - val_loss: 0.3805\n", + "Epoch 6/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 6ms/step - accuracy: 0.8939 - loss: 0.3848 - val_accuracy: 0.9023 - val_loss: 0.3618\n", + "Epoch 7/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 5ms/step - accuracy: 0.8952 - loss: 0.3707 - val_accuracy: 0.9038 - val_loss: 0.3471\n", + "Epoch 8/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m8s\u001b[0m 5ms/step - accuracy: 0.9003 - loss: 0.3507 - val_accuracy: 0.9060 - val_loss: 0.3363\n", + "Epoch 9/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 6ms/step - accuracy: 0.9030 - loss: 0.3390 - val_accuracy: 0.9067 - val_loss: 0.3296\n", + "Epoch 10/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m8s\u001b[0m 5ms/step - accuracy: 0.9054 - loss: 0.3308 - val_accuracy: 0.9102 - val_loss: 0.3210\n", + "Epoch 11/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 5ms/step - accuracy: 0.9073 - loss: 0.3286 - val_accuracy: 0.9103 - val_loss: 0.3150\n", + "Epoch 12/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 5ms/step - accuracy: 0.9091 - loss: 0.3198 - val_accuracy: 0.9127 - val_loss: 0.3103\n", + "Epoch 13/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 4ms/step - accuracy: 0.9116 - loss: 0.3159 - val_accuracy: 0.9150 - val_loss: 0.3051\n", + "Epoch 14/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 6ms/step - accuracy: 0.9116 - loss: 0.3102 - val_accuracy: 0.9147 - val_loss: 0.3013\n", + "Epoch 15/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 5ms/step - accuracy: 0.9130 - loss: 0.3016 - val_accuracy: 0.9163 - val_loss: 0.2982\n", + "Epoch 16/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 4ms/step - accuracy: 0.9149 - loss: 0.2983 - val_accuracy: 0.9160 - val_loss: 0.2970\n", + "Epoch 17/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 6ms/step - accuracy: 0.9159 - loss: 0.2927 - val_accuracy: 0.9165 - val_loss: 0.2919\n", + "Epoch 18/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 4ms/step - accuracy: 0.9163 - loss: 0.2954 - val_accuracy: 0.9182 - val_loss: 0.2889\n", + "Epoch 19/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 5ms/step - accuracy: 0.9163 - loss: 0.2920 - val_accuracy: 0.9187 - val_loss: 0.2861\n", + "Epoch 20/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 5ms/step - accuracy: 0.9187 - loss: 0.2848 - val_accuracy: 0.9195 - val_loss: 0.2836\n", + "Epoch 21/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 5ms/step - accuracy: 0.9189 - loss: 0.2834 - val_accuracy: 0.9197 - val_loss: 0.2830\n", + "Epoch 22/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 5ms/step - accuracy: 0.9187 - loss: 0.2826 - val_accuracy: 0.9222 - val_loss: 0.2785\n", + "Epoch 23/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 5ms/step - accuracy: 0.9181 - loss: 0.2820 - val_accuracy: 0.9213 - val_loss: 0.2767\n", + "Epoch 24/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 5ms/step - accuracy: 0.9193 - loss: 0.2796 - val_accuracy: 0.9208 - val_loss: 0.2757\n", + "Epoch 25/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m12s\u001b[0m 7ms/step - accuracy: 0.9215 - loss: 0.2712 - val_accuracy: 0.9233 - val_loss: 0.2722\n", + "Epoch 26/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m18s\u001b[0m 5ms/step - accuracy: 0.9197 - loss: 0.2718 - val_accuracy: 0.9247 - val_loss: 0.2709\n", + "Epoch 27/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m8s\u001b[0m 5ms/step - accuracy: 0.9231 - loss: 0.2682 - val_accuracy: 0.9255 - val_loss: 0.2683\n", + "Epoch 28/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 5ms/step - accuracy: 0.9222 - loss: 0.2672 - val_accuracy: 0.9260 - val_loss: 0.2663\n", + "Epoch 29/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 5ms/step - accuracy: 0.9248 - loss: 0.2658 - val_accuracy: 0.9258 - val_loss: 0.2648\n", + "Epoch 30/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 5ms/step - accuracy: 0.9254 - loss: 0.2605 - val_accuracy: 0.9277 - val_loss: 0.2632\n", + "Epoch 31/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 4ms/step - accuracy: 0.9256 - loss: 0.2593 - val_accuracy: 0.9272 - val_loss: 0.2619\n", + "Epoch 32/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 6ms/step - accuracy: 0.9260 - loss: 0.2583 - val_accuracy: 0.9280 - val_loss: 0.2604\n", + "Epoch 33/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m8s\u001b[0m 5ms/step - accuracy: 0.9264 - loss: 0.2551 - val_accuracy: 0.9290 - val_loss: 0.2585\n", + "Epoch 34/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 4ms/step - accuracy: 0.9291 - loss: 0.2497 - val_accuracy: 0.9298 - val_loss: 0.2566\n", + "Epoch 35/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 5ms/step - accuracy: 0.9293 - loss: 0.2458 - val_accuracy: 0.9298 - val_loss: 0.2540\n", + "Epoch 36/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m8s\u001b[0m 5ms/step - accuracy: 0.9315 - loss: 0.2408 - val_accuracy: 0.9295 - val_loss: 0.2523\n", + "Epoch 37/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 5ms/step - accuracy: 0.9305 - loss: 0.2384 - val_accuracy: 0.9318 - val_loss: 0.2509\n", + "Epoch 38/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m8s\u001b[0m 5ms/step - accuracy: 0.9316 - loss: 0.2397 - val_accuracy: 0.9303 - val_loss: 0.2485\n", + "Epoch 39/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m8s\u001b[0m 5ms/step - accuracy: 0.9322 - loss: 0.2383 - val_accuracy: 0.9317 - val_loss: 0.2460\n", + "Epoch 40/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 5ms/step - accuracy: 0.9320 - loss: 0.2380 - val_accuracy: 0.9302 - val_loss: 0.2455\n", + "Epoch 41/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 4ms/step - accuracy: 0.9337 - loss: 0.2325 - val_accuracy: 0.9333 - val_loss: 0.2432\n", + "Epoch 42/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 5ms/step - accuracy: 0.9316 - loss: 0.2381 - val_accuracy: 0.9338 - val_loss: 0.2427\n", + "Epoch 43/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 4ms/step - accuracy: 0.9342 - loss: 0.2303 - val_accuracy: 0.9325 - val_loss: 0.2398\n", + "Epoch 44/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 4ms/step - accuracy: 0.9346 - loss: 0.2262 - val_accuracy: 0.9332 - val_loss: 0.2388\n", + "Epoch 45/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m12s\u001b[0m 5ms/step - accuracy: 0.9349 - loss: 0.2256 - val_accuracy: 0.9347 - val_loss: 0.2377\n", + "Epoch 46/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 5ms/step - accuracy: 0.9353 - loss: 0.2262 - val_accuracy: 0.9348 - val_loss: 0.2354\n", + "Epoch 47/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 4ms/step - accuracy: 0.9361 - loss: 0.2235 - val_accuracy: 0.9357 - val_loss: 0.2331\n", + "Epoch 48/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m12s\u001b[0m 5ms/step - accuracy: 0.9365 - loss: 0.2220 - val_accuracy: 0.9365 - val_loss: 0.2318\n", + "Epoch 49/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m8s\u001b[0m 4ms/step - accuracy: 0.9386 - loss: 0.2174 - val_accuracy: 0.9377 - val_loss: 0.2306\n", + "Epoch 50/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m8s\u001b[0m 5ms/step - accuracy: 0.9380 - loss: 0.2139 - val_accuracy: 0.9375 - val_loss: 0.2303\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "# вывод графика ошибки по эпохам\n", + "plt.plot(H.history['loss'])\n", + "plt.plot(H.history['val_loss'])\n", + "plt.grid()\n", + "plt.xlabel('Epochs')\n", + "plt.ylabel('loss')\n", + "plt.legend(['train_loss', 'val_loss'])\n", + "plt.title('Loss by epochs')\n", + "plt.show()" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 472 + }, + "id": "6mvOMGiLA9QE", + "outputId": "c54549d4-ebef-425c-af8c-c06f436eb806" + }, + "execution_count": 260, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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GFgN8Itf/IItW7bw9NNPk5GRweOPP063bt346KOPIlVMkQZP4UbkNNW8eXPcbjfr16+vdmzdunWYzWYyMzMD+5KTkxkzZgxvvPEGO3fu5KyzzmLKlClB17Vr147f//73LFiwgDVr1lBWVsbf/va3k5bF5/NVa33YsGEDAFlZWUFluOyyy3jttdfYvn07S5YsOWmrTWW5DMOgbdu2DB48uNr2s5/9LOj83bt3U1hYeMLytGnTho0bN+Lz+YLOW7duXeB45Xfv3r272kDoU9GiRQvuuOMO3n//fbZu3UqzZs146KGHQnZ/kcZO4UbkNGWxWBg6dCgffPBBUNfP3r17ef311zn//POJj48HCJqtAxAbG0v79u0pLS0FoKioiJKSkqBz2rVrR1xcXOCck3nmmWcC7w3D4JlnnsFmszFo0KCg82644QZ++ukn7r33XiwWC9ddd91J7/3zn/8ci8XC1KlTg1pBKr/r2J+vvLw8qDWnrKyM5557jubNm9OrVy8ALr30UnJycnjzzTeDrnv66aeJjY3loosuAvyzyAzDYOrUqdXKdWxZTsbr9XLkyJGgfampqWRkZNS6nkVOB9ZoF0BEwuvFF1+s9qwUgPHjx/PXv/6V7Oxszj//fO644w6sVivPPfccpaWlPPbYY4Fzu3btyoABA+jVqxfJycksX76ct99+OzAIeMOGDQwaNIhf/OIXdO3aFavVynvvvcfevXtrFT6cTifz589n9OjR9OnTh48++oi5c+fypz/9iebNmwede9lll9GsWTPeeusthg8fTmpq6knv365dO/76178yceJEtm3bxlVXXUVcXBxbt27lvffe49Zbb+Wee+4JnJ+RkcGjjz7Ktm3b6NixI2+++SarVq3i+eefx2azAXDrrbfy3HPPcdNNN7FixQqysrJ4++23WbJkCTNmzCAuLg6AgQMHcsMNN/DUU0+xceNGLrnkEnw+H1988QUDBw6s03pS+fn5tGrVimuuuYYePXoQGxvLJ598wrJly2rVQiZy2ojeRC0RCafKqeDH23bu3GkYhmGsXLnSGDZsmBEbG2u43W5j4MCBxldffRV0r7/+9a9G7969jcTERMPlchmdO3c2HnroocC06AMHDhhjx441OnfubMTExBgJCQlGnz59jH//+98nLefo0aONmJgYY/PmzcbQoUMNt9ttpKWlGZMnTza8Xm+N19xxxx0GYLz++ut1qpN33nnHOP/8842YmBgjJibG6Ny5szF27Fhj/fr1gXMuuugio1u3bsby5cuNvn37Gk6n02jTpo3xzDPPVLvf3r17jTFjxhgpKSmG3W43zjzzTOOll16qdl55ebnx+OOPG507dzbsdrvRvHlzY/jw4caKFSsC5wA1TvFu06aNMXr0aMMw/FPS7733XqNHjx5GXFycERMTY/To0cN49tln61QPIk2dyTDq2C4qIhJld999N//85z/JycnB7XaH9N4DBgzgwIEDrFmzJqT3FZHI0ZgbEWlUSkpKePXVVxk5cmTIg42INA0acyMijcK+ffv45JNPePvttzl48CDjx4+PdpFEpIFSuBGRRuGnn35i1KhRpKam8tRTT9GzZ89oF0lEGiiNuREREZEmRWNuREREpElRuBEREZEm5bQbc+Pz+di9ezdxcXEnXEVYREREGg7DMMjPzycjI6PagrXHOu3Cze7du4PWyxEREZHGY+fOnbRq1eqE55x24abykeg7d+4MrJsTKh6PhwULFjB06NDAI9olfFTfkaX6jizVd2SpviOrPvWdl5dHZmZm4N/xEzntwk1lV1R8fHxYwo3b7SY+Pl5/OSJA9R1Zqu/IUn1Hluo7sk6lvmszpEQDikVERKRJUbgRERGRJkXhRkRERJqU027MjYiINE1erxePx1Ovaz0eD1arlZKSErxeb4hLJsc6Xn3b7faTTvOuDYUbERFp1AzDICcnh9zc3FO6R3p6Ojt37tQz0CLgePVtNptp27Ytdrv9lO6vcCMiIo1aZbBJTU3F7XbXK5z4fD4KCgqIjY0NScuBnFhN9V35kN09e/bQunXrUwqZCjciItJoeb3eQLBp1qxZve/j8/koKyvD6XQq3ETA8eq7efPm7N69m/Ly8lOakq/foIiINFqVY2zcbneUSyKhUNkddarjnhRuRESk0dM4maYhVL/HqIabzz//nBEjRpCRkYHJZOL999+v9bVLlizBarXSs2fPsJVPREREGp+ohpvCwkJ69OjBzJkz63Rdbm4uN954I4MGDQpTyURERBqPrKwsZsyYEZJ7LVq0CJPJdEqzz6ItqgOKhw8fzvDhw+t83W233cb111+PxWKpU2uPiIhIQzFgwAB69uwZklCybNkyYmJiTr1QTUSjG3Pz0ksvsWXLFiZPnhztogQpK/ex50gJh0qjXRIREWkKDMOgvLy8Vuc2b95cg6qraFRTwTdu3Mh9993HF198gdVau6KXlpZSWno0ceTl5QH+Efb1fZJlTZZtO8Sofy4n1Wnh2stDd185vsrfXyh/j3J8qu/IUn3XjsfjwTAMfD4fPp+v3vcxDCPweir3qa0xY8awePFiFi9ezJNPPgnAP//5T26++WY+/PBDJk2axOrVq5k/fz6ZmZn8/ve/55tvvqGwsJAuXbrw0EMPMXjw4MD9zjjjDMaPH8/48eMBsFgsPPfcc8ybN48FCxbQsmVLHn/8ca644oqTlq3y569ap++88w5Tpkxh06ZNtGjRgnHjxjFhwoTANbNmzWLGjBns3LmThIQEzj//fN566y0A3n77bR588EE2bdqE2+3m7LPP5t133wWq17fP58MwDDweDxaLJahcdfm70GjCjdfr5frrr2fq1Kl07Nix1tdNmzaNqVOnVtu/YMGCkKbcnQUAVkp9kJ2dHbL7ysmpviNL9R1Zqu8Ts1qtpKenU1BQQFlZGeD/B7PEU7+AUnww95TK47SZazXj54EHHmDt2rV07dqViRMnArBu3ToA/vjHP/Lggw+SlZVFYmIi//vf/xg4cCD33XcfDoeDOXPmcOWVV/Ltt9+SmZkJ+ENBSUlJ4H/gAaZOncrUqVOZNGkSzz//PDfccAM//PADSUlJJyxbUVERAPn5+ZjNZlatWsV1113Hfffdx9VXX823337LPffcg9vt5vrrr+e7775j/PjxzJ49m969e5Obm8vSpUvJy8sjJyeHUaNGMXXqVC6//HLy8/MDx2JjY8nPzw/67rKyMoqLi/n888+rtVpVlqs2TEZlXI0yk8nEe++9x1VXXVXj8dzcXJKSkoKSXGXCs1gsLFiwgIsvvrjadTW13GRmZnLgwAHi4+NDVv4t+wsZ9tQSXBaDFX+++JQePiS14/F4yM7OZsiQIarvCFB9R5bqu3ZKSkrYuXMnWVlZOJ1OAIrKyuk+JTqhcM2UIbjttWs3uPjii+nRowd///vfAf9A3kGDBvHuu+9y5ZVXnvDas846i9/+9reMHTsWqLnl5s9//jMPPPAA4J/AEx8fz9y5c7nkkktOeO/Kchw8eJDExER+9atfsX//fj7++OPAOX/84x+ZN28eq1ev5t133+Xmm29mx44dxMXFBd1r5cqVnHfeeWzZsoU2bdoE9huGQX5+PnFxcUFhsKSkhG3btpGZmRn4fVbKy8sjJSWFI0eOnPTf70bTchMfH8/q1auD9j377LN8+umnvP3227Rt27bG6xwOBw6Ho9p+m80W0v9gJMT4fwmlPv//Seg/RpET6t+lnJjqO7JU3yfm9XoxmUyYzebAk26j+YThquWojcqyV14L0Lt376B7FBQUMGXKFObOncuePXsoLy+nuLiYnTt3Bp1X9V4APXr0CHyOi4sjPj6eAwcOnLR8VctjNptZt24dV155ZdB1559/Pk8++SSGYTBs2DDatGlD+/btueSSS7jkkku4+uqrA11QgwYNokePHgwbNoyhQ4dyzTXXkJCQUGOZzWZ/y1dNf+7r8vcgquGmoKCATZs2BT5v3bqVVatWkZycTOvWrZk4cSK7du3iX//6F2azme7duwddn5qaitPprLY/Glx2f4uSzzBR5jU4tSW/RESkvlw2Cz89MKxO1/h8PvLz8omLjzulcOSyWU5+0kkcO+vpnnvuITs7myeeeIL27dvjcrm45pprAt1wx3NsGDCZTGEZTxQXF8fKlStZtGgRCxYsYNKkSUyZMoVly5aRmJhIdnY2X331FQsWLODpp5/mz3/+M0uXLj2l5TJOJqrhZvny5QwcODDwuXJw0ujRo3n55ZfZs2cPO3bsiFbx6sRtP/oHurjMS6wrioURETmNmUymWncNVfL5fJTbLbjt1oi1/Njt9lotM7BkyRJuuukmrr76asDfMLBt27Ywl+6oLl26sGTJkmpl6tixY2CoiNVqZfDgwQwePJjJkyeTmJjIp59+ys9//nNMJhP9+/enf//+TJo0iTZt2vD+++9z8803h63MUQ03AwYM4ERDfl5++eUTXj9lyhSmTJkS2kLVk81ixmYx4fEaFJXVbuqeiIicvrKysvjmm2/Ytm0bsbGxx21V6dChA++++y4jRozAZDJx//33R2RGV6Xf//73nHfeeTz44INce+21LF26lGeeeYZnn30WgA8//JAtW7Zw4YUXkpSUxLx58/D5fHTq1IlvvvmGhQsXMnToUFJTU/nmm2/Yv38/nTt3DmuZG91zbhqymIr/UygqO7UFv0REpOm75557sFgsdO3alebNmx+3p2L69OkkJSXRr18/RowYwbBhwzjnnHMiVs5zzjmHf//738yZM4fu3bszadIkHnjgAW666SYAEhMTeffdd7n44ovp0qULs2fP5o033qBbt27Ex8fz+eefc+mll9KxY0f+8pe/8Le//a1eD/Cti0YzoLgxcNkt5BZ7FG5EROSkOnbsyNKlS4P2VQaGqrKysvj000+D9lXOkqp0bDdVTb0itV1OoaZelZEjRzJy5Mgazz///PNZtGhRjce6dOnC/Pnzq+0Pd8uTWm5CqHLcTbFH4UZERCRaFG5CKKYi3BSq5UZERBqo2267jdjY2Bq32267LdrFCwl1S4VQ5XTwolINKBYRkYbpgQce4J577qnxWCgfbhtNCjchpG4pERFp6FJTU0lNTY12McJK3VIh5Lb5s6K6pURERKJH4SaE3I6KlhuFGxERkahRuAmhysduayq4iIhI9CjchFDlbCmFGxERkehRuAkht8KNiIhI1CnchFBgKrjWlhIRkTDLyspixowZtTrXZDLx/vvvh7U8DYnCTQi5tbaUiIhI1CnchJC6pURERKJP4SaE9BA/ERGpjeeff56MjIxqC0heeeWV/PrXv2bz5s1ceeWVpKWlERsby3nnnccnn3wSsu9fvXo1F198MS6Xi2bNmnHrrbdSUFAQOL5o0SJ69+5NTEwMiYmJ9O/fn+3btwPw/fffM3DgQOLi4oiPj6dXr14sX748ZGULBYWbEKoMN4WlCjciIlFjGFBWWPfNU1S/66puNazGXZP/+7//4+DBg3z22WeBfYcOHWL+/PmMGjWKgoICLr30UhYuXMh3333HJZdcwogRI9ixY8cpV09hYSHDhg0jKSmJZcuW8dZbb/HJJ58wbtw4AMrLy7nqqqu46KKL+OGHH1i6dCm33norJpMJgFGjRtGqVSuWLVvGihUruO+++7DZbKdcrlDS8gshpJYbEZEGwFMED2fU6RIzkBiK7/7TbrDHnPS0pKQkhg8fzuuvv86gQYMAePvtt0lJSWHgwIGYzWZ69OgROP/BBx/kvffe4z//+U8ghNTX66+/TklJCf/617+IifGX9ZlnnmHEiBE8+uij2Gw2jhw5wuWXX067du0A6NKlS+D6HTt2cO+999K5c2cAOnTocErlCQe13ITQ0Yf4abaUiIic2KhRo3jnnXcoLS0F4LXXXuO6667DbDZTUFDAPffcQ5cuXUhMTCQ2Npa1a9eGpOVm7dq19OjRIxBsAPr374/P52P9+vUkJydz0003MWzYMEaMGMGTTz7Jnj17AudOmDCBW265hcGDB/PII4+wefPmUy5TqKnlJoRiHJotJSISdTa3vwWlDnw+H3n5+cTHxWE2n8L/99vctT51xIgRGIbB3LlzOe+88/jiiy/4+9//DsA999xDdnY2TzzxBO3bt8flcnHNNddQVlZW/7LVwUsvvcSdd97J/PnzefPNN/nLX/5CdnY2P/vZz5gyZQrXX389c+fO5aOPPmLy5MnMmTOHq6++OiJlqw2FmxCq7JbyeA3Kyn3YrWoYExGJOJOpVl1DQXw+sHn9151KuKkDp9PJz3/+c1577TU2bdpEp06dOOeccwBYsmQJN910UyAwFBQUsG3btpB8b5cuXXj55ZcpLCwMtN4sWbIEs9lMp06dAuedffbZnH322UycOJG+ffvy+uuv87Of/QyAjh070rFjR+6++25++ctf8tJLLzWocKN/fUOoslsKtHimiIic3KhRo5g7dy4vvvgio0aNCuzv0KED7777LqtWreL777/n+uuvrzaz6lS+0+l0Mnr0aNasWcNnn33G7373O2644QbS0tLYunUrEydOZOnSpWzfvp0FCxawceNGunTpQnFxMePGjWPRokVs376dJUuWsGzZsqAxOQ2BWm5CyG41YzEZeA0TRZ5yEmhYo8dFRKRhufjii0lOTmb9+vVcf/31gf3Tp0/n17/+Nf369SMlJYU//vGP5OXlheQ73W43H3/8MePHj+e8887D7XYzcuRIpk+fHji+bt06XnnlFQ4ePEiLFi0YO3Ysv/3tbykvL+fgwYPceOON7N27l5SUFH7+858zderUkJQtVBRuQsxuhmKvpoOLiMjJmc1mdu+uPj4oKyuLTz/9NGjf2LFjgz7XpZvKOGaK+plnnlnt/pXS0tJ47733ajxmt9t54403av290aJuqRBzVPRMqVtKREQkOhRuQsxeUaOFmg4uIiIR8NprrxEbG1vj1q1bt2gXLyrULRVilS03etaNiIhEwhVXXEGfPn1qPNbQnhwcKQo3IXY03KhbSkREwi8uLo64uLhoF6NBUbdUiNnN/kFbRRpQLCIiEhUKNyGmbikRkcgL1TNgJLqOndVVX+qWCrGjA4rVciMiEm52uz0wnbp58+bY7fbA6tV14fP5KCsro6Sk5NSWX5Baqam+DcNg//79mEymUx4rpHATYpoKLiISOWazmbZt27Jnz54anxdTW4Zh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xcVRLnnjc/vttxsJCQnGokWLjD179gS2oqKiwDm33Xab0bp1a+PTTz81li9fbvTt29fo27dvFEvdeN13333G4sWLja1btxo//PCDcd999xkmk8lYsGCBYRiq60ioOlvKMFTnofT73//eWLRokbF161ZjyZIlxuDBg42UlBRj3759hmGEt64VbkLk6aefNlq3bm3Y7Xajd+/extdffx3tIjUZn332mQFU20aPHm0Yhn86+P3332+kpaUZDofDGDRokLF+/froFrqRqqmeAeOll14KnFNcXGzccccdRlJSkuF2u42rr77a2LNnT/QK3Yj9+te/Ntq0aWPY7XajefPmxqBBgwLBxjBU15FwbLhRnYfOtddea7Ro0cKw2+1Gy5YtjWuvvdbYtGlT4Hg469pkGIZx6u0/IiIiIg2DxtyIiIhIk6JwIyIiIk2Kwo2IiIg0KQo3IiIi0qQo3IiIiEiTonAjIiIiTYrCjYiIiDQpCjcicloymUy8//770S6GiISBwo2IRNxNN92EyWSqtl1yySXRLpqINAHWaBdARE5Pl1xyCS+99FLQPofDEaXSiEhTopYbEYkKh8NBenp60JaUlAT4u4xmzZrF8OHDcblcnHHGGbz99ttB169evZqLL74Yl8tFs2bNuPXWWykoKAg658UXX6Rbt244HA5atGjBuHHjgo4fOHCAq6++GrfbTYcOHfjPf/4TOHb48GFGjRpF8+bNcblcdOjQoVoYE5GGSeFGRBqk+++/n5EjR/L9998zatQorrvuOtauXQtAYWEhw4YNIykpiWXLlvHWW2/xySefBIWXWbNmMXbsWG699VZWr17Nf/7zH9q3bx/0HVOnTuUXv/gFP/zwA5deeimjRo3i0KFDge//6aef+Oijj1i7di2zZs0iJSUlchUgIvUXkuU3RUTqYPTo0YbFYjFiYmKCtoceesgwDP/q5LfddlvQNX369DFuv/12wzAM4/nnnzeSkpKMgoKCwPG5c+caZrPZyMnJMQzDMDIyMow///nPxy0DYPzlL38JfC4oKDAA46OPPjIMwzBGjBhhjBkzJjQ/sIhElMbciEhUDBw4kFmzZgXtS05ODrzv27dv0LG+ffuyatUqANauXUuPHj2IiYkJHO/fvz8+n4/169djMpnYvXs3gwYNOmEZzjrrrMD7mJgY4uPj2bdvHwC33347I0eOZOXKlQwdOpSrrrqKfv361etnFZHIUrgRkaiIiYmp1k0UKi6Xq1bn2Wy2oM8mkwmfzwfA8OHD2b59O/PmzSM7O5tBgwYxduxYnnjiiZCXV0RCS2NuRKRB+vrrr6t97tKlCwBdunTh+++/p7CwMHB8yZIlmM1mOnXqRFxcHFlZWSxcuPCUytC8eXNGjx7Nq6++yowZM3j++edP6X4iEhlquRGRqCgtLSUnJydon9VqDQzafeuttzj33HM5//zzee211/j222/55z//CcCoUaOYPHkyo0ePZsqUKezfv5/f/e533HDDDaSlpQEwZcoUbrvtNlJTUxk+fDj5+fksWbKE3/3ud7Uq36RJk+jVqxfdunWjtLSUDz/8MBCuRKRhU7gRkaiYP38+LVq0CNrXqVMn1q1bB/hnMs2ZM4c77riDFi1a8MYbb9C1a1cA3G43H3/8MePHj+e8887D7XYzcuRIpk+fHrjX6NGjKSkp4e9//zv33HMPKSkpXHPNNbUun91uZ+LEiWzbtg2Xy8UFF1zAnDlzQvCTi0i4mQzDMKJdCBGRqkwmE++99x5XXXVVtIsiIo2QxtyIiIhIk6JwIyIiIk2KxtyISIOj3nIRORVquREREZEmReFGREREmhSFGxEREWlSFG5ERESkSVG4ERERkSZF4UZERESaFIUbERERaVIUbkRERKRJUbgRERGRJuX/AwBBPS7RJvxtAAAAAElFTkSuQmCC\n" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "code", + "source": [ + "# Оценка качества работы модели на тестовых данных\n", + "scores = model300.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": "WOJyUHP79Z86", + "outputId": "3ad7d759-b978-4143-f5e8-41305e27860d" + }, + "execution_count": 261, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "\u001b[1m313/313\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 3ms/step - accuracy: 0.9361 - loss: 0.2237\n", + "Loss on test data: 0.22660093009471893\n", + "Accuracy on test data: 0.9348000288009644\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "# сохранение модели на диск\n", + "model300.save('/content/drive/MyDrive/Colab Notebooks/models/model300in_1hide.keras')" + ], + "metadata": { + "id": "XsWc7S4aCyiE" + }, + "execution_count": 264, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "model500 = Sequential()\n", + "model500.add(Dense(units=500,input_dim=num_pixels, activation='sigmoid'))\n", + "model500.add(Dense(units=num_classes, activation='softmax'))\n", + "\n", + "model500.compile(loss='categorical_crossentropy', optimizer='sgd', metrics=['accuracy'])" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "QSL-6YbkJxm0", + "outputId": "8ccadbe4-37e5-4907-9cc5-90721a2cbd9c" + }, + "execution_count": 266, + "outputs": [ + { + "output_type": "stream", + "name": "stderr", + "text": [ + "/usr/local/lib/python3.12/dist-packages/keras/src/layers/core/dense.py:93: UserWarning: Do not pass an `input_shape`/`input_dim` argument to a layer. When using Sequential models, prefer using an `Input(shape)` object as the first layer in the model instead.\n", + " super().__init__(activity_regularizer=activity_regularizer, **kwargs)\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "# вывод информации об архитектуре модели\n", + "print(model500.summary())" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 211 + }, + "id": "Vs1x3ooKCybg", + "outputId": "1d28da44-402d-4b83-d28a-0d99647847a3" + }, + "execution_count": 267, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "\u001b[1mModel: \"sequential_16\"\u001b[0m\n" + ], + "text/html": [ + "
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_31 (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m500\u001b[0m) │ \u001b[38;5;34m392,500\u001b[0m │\n", + "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", + "│ dense_32 (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m10\u001b[0m) │ \u001b[38;5;34m5,010\u001b[0m │\n", + "└─────────────────────────────────┴────────────────────────┴───────────────┘\n" + ], + "text/html": [ + "
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓\n",
+              "┃ Layer (type)                     Output Shape                  Param # ┃\n",
+              "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩\n",
+              "│ dense_31 (Dense)                │ (None, 500)            │       392,500 │\n",
+              "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+              "│ dense_32 (Dense)                │ (None, 10)             │         5,010 │\n",
+              "└─────────────────────────────────┴────────────────────────┴───────────────┘\n",
+              "
\n" + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "\u001b[1m Total params: \u001b[0m\u001b[38;5;34m397,510\u001b[0m (1.52 MB)\n" + ], + "text/html": [ + "
 Total params: 397,510 (1.52 MB)\n",
+              "
\n" + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "\u001b[1m Trainable params: \u001b[0m\u001b[38;5;34m397,510\u001b[0m (1.52 MB)\n" + ], + "text/html": [ + "
 Trainable params: 397,510 (1.52 MB)\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": "stream", + "name": "stdout", + "text": [ + "None\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "# Обучаем модель\n", + "H = model500.fit(X_train, y_train, validation_split=0.1, epochs=50)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "x3kzDT5qCyYY", + "outputId": "bcd3fb48-d253-4f3e-c62e-b02a91c2ce7f" + }, + "execution_count": 268, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Epoch 1/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m12s\u001b[0m 7ms/step - accuracy: 0.5639 - loss: 1.7603 - val_accuracy: 0.8423 - val_loss: 0.8077\n", + "Epoch 2/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 6ms/step - accuracy: 0.8441 - loss: 0.7233 - val_accuracy: 0.8650 - val_loss: 0.5438\n", + "Epoch 3/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m15s\u001b[0m 9ms/step - accuracy: 0.8682 - loss: 0.5227 - val_accuracy: 0.8778 - val_loss: 0.4538\n", + "Epoch 4/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 7ms/step - accuracy: 0.8836 - loss: 0.4448 - val_accuracy: 0.8933 - val_loss: 0.4062\n", + "Epoch 5/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m12s\u001b[0m 7ms/step - accuracy: 0.8914 - loss: 0.4041 - val_accuracy: 0.8970 - val_loss: 0.3773\n", + "Epoch 6/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m19s\u001b[0m 6ms/step - accuracy: 0.8924 - loss: 0.3856 - val_accuracy: 0.9023 - val_loss: 0.3599\n", + "Epoch 7/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 6ms/step - accuracy: 0.8965 - loss: 0.3660 - val_accuracy: 0.9017 - val_loss: 0.3462\n", + "Epoch 8/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m23s\u001b[0m 8ms/step - accuracy: 0.8984 - loss: 0.3547 - val_accuracy: 0.9043 - val_loss: 0.3384\n", + "Epoch 9/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 6ms/step - accuracy: 0.9028 - loss: 0.3386 - val_accuracy: 0.9070 - val_loss: 0.3288\n", + "Epoch 10/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m22s\u001b[0m 7ms/step - accuracy: 0.9051 - loss: 0.3306 - val_accuracy: 0.9105 - val_loss: 0.3233\n", + "Epoch 11/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 7ms/step - accuracy: 0.9059 - loss: 0.3276 - val_accuracy: 0.9100 - val_loss: 0.3173\n", + "Epoch 12/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 6ms/step - accuracy: 0.9087 - loss: 0.3166 - val_accuracy: 0.9103 - val_loss: 0.3115\n", + "Epoch 13/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m22s\u001b[0m 7ms/step - accuracy: 0.9094 - loss: 0.3168 - val_accuracy: 0.9123 - val_loss: 0.3086\n", + "Epoch 14/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m19s\u001b[0m 7ms/step - accuracy: 0.9086 - loss: 0.3116 - val_accuracy: 0.9133 - val_loss: 0.3039\n", + "Epoch 15/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 6ms/step - accuracy: 0.9131 - loss: 0.3053 - val_accuracy: 0.9135 - val_loss: 0.3032\n", + "Epoch 16/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 6ms/step - accuracy: 0.9130 - loss: 0.3042 - val_accuracy: 0.9168 - val_loss: 0.2968\n", + "Epoch 17/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m21s\u001b[0m 7ms/step - accuracy: 0.9132 - loss: 0.3045 - val_accuracy: 0.9155 - val_loss: 0.2977\n", + "Epoch 18/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 5ms/step - accuracy: 0.9117 - loss: 0.3030 - val_accuracy: 0.9170 - val_loss: 0.2953\n", + "Epoch 19/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 7ms/step - accuracy: 0.9125 - loss: 0.3004 - val_accuracy: 0.9162 - val_loss: 0.2901\n", + "Epoch 20/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 6ms/step - accuracy: 0.9160 - loss: 0.2866 - val_accuracy: 0.9163 - val_loss: 0.2890\n", + "Epoch 21/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 6ms/step - accuracy: 0.9172 - loss: 0.2888 - val_accuracy: 0.9183 - val_loss: 0.2875\n", + "Epoch 22/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 6ms/step - accuracy: 0.9173 - loss: 0.2858 - val_accuracy: 0.9188 - val_loss: 0.2846\n", + "Epoch 23/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 6ms/step - accuracy: 0.9184 - loss: 0.2819 - val_accuracy: 0.9205 - val_loss: 0.2836\n", + "Epoch 24/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 7ms/step - accuracy: 0.9210 - loss: 0.2806 - val_accuracy: 0.9197 - val_loss: 0.2823\n", + "Epoch 25/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 5ms/step - accuracy: 0.9219 - loss: 0.2750 - val_accuracy: 0.9205 - val_loss: 0.2802\n", + "Epoch 26/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 6ms/step - accuracy: 0.9205 - loss: 0.2762 - val_accuracy: 0.9215 - val_loss: 0.2780\n", + "Epoch 27/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m12s\u001b[0m 7ms/step - accuracy: 0.9186 - loss: 0.2795 - val_accuracy: 0.9232 - val_loss: 0.2772\n", + "Epoch 28/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m12s\u001b[0m 7ms/step - accuracy: 0.9215 - loss: 0.2774 - val_accuracy: 0.9240 - val_loss: 0.2774\n", + "Epoch 29/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m20s\u001b[0m 6ms/step - accuracy: 0.9223 - loss: 0.2654 - val_accuracy: 0.9243 - val_loss: 0.2749\n", + "Epoch 30/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m21s\u001b[0m 7ms/step - accuracy: 0.9218 - loss: 0.2713 - val_accuracy: 0.9223 - val_loss: 0.2730\n", + "Epoch 31/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m20s\u001b[0m 7ms/step - accuracy: 0.9220 - loss: 0.2722 - val_accuracy: 0.9222 - val_loss: 0.2735\n", + "Epoch 32/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m21s\u001b[0m 7ms/step - accuracy: 0.9236 - loss: 0.2660 - val_accuracy: 0.9243 - val_loss: 0.2706\n", + "Epoch 33/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m19s\u001b[0m 6ms/step - accuracy: 0.9227 - loss: 0.2710 - val_accuracy: 0.9247 - val_loss: 0.2703\n", + "Epoch 34/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m12s\u001b[0m 7ms/step - accuracy: 0.9248 - loss: 0.2616 - val_accuracy: 0.9262 - val_loss: 0.2694\n", + "Epoch 35/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 7ms/step - accuracy: 0.9258 - loss: 0.2599 - val_accuracy: 0.9258 - val_loss: 0.2681\n", + "Epoch 36/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m20s\u001b[0m 6ms/step - accuracy: 0.9244 - loss: 0.2603 - val_accuracy: 0.9260 - val_loss: 0.2663\n", + "Epoch 37/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 7ms/step - accuracy: 0.9269 - loss: 0.2597 - val_accuracy: 0.9267 - val_loss: 0.2640\n", + "Epoch 38/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 7ms/step - accuracy: 0.9264 - loss: 0.2571 - val_accuracy: 0.9285 - val_loss: 0.2616\n", + "Epoch 39/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m21s\u001b[0m 7ms/step - accuracy: 0.9272 - loss: 0.2515 - val_accuracy: 0.9258 - val_loss: 0.2610\n", + "Epoch 40/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 7ms/step - accuracy: 0.9258 - loss: 0.2601 - val_accuracy: 0.9285 - val_loss: 0.2602\n", + "Epoch 41/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m12s\u001b[0m 7ms/step - accuracy: 0.9267 - loss: 0.2555 - val_accuracy: 0.9298 - val_loss: 0.2576\n", + "Epoch 42/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 5ms/step - accuracy: 0.9280 - loss: 0.2499 - val_accuracy: 0.9285 - val_loss: 0.2576\n", + "Epoch 43/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m13s\u001b[0m 7ms/step - accuracy: 0.9278 - loss: 0.2512 - val_accuracy: 0.9307 - val_loss: 0.2556\n", + "Epoch 44/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m20s\u001b[0m 7ms/step - accuracy: 0.9302 - loss: 0.2460 - val_accuracy: 0.9307 - val_loss: 0.2527\n", + "Epoch 45/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 6ms/step - accuracy: 0.9312 - loss: 0.2431 - val_accuracy: 0.9303 - val_loss: 0.2522\n", + "Epoch 46/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 6ms/step - accuracy: 0.9308 - loss: 0.2424 - val_accuracy: 0.9307 - val_loss: 0.2508\n", + "Epoch 47/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m20s\u001b[0m 6ms/step - accuracy: 0.9320 - loss: 0.2372 - val_accuracy: 0.9323 - val_loss: 0.2490\n", + "Epoch 48/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m20s\u001b[0m 6ms/step - accuracy: 0.9335 - loss: 0.2367 - val_accuracy: 0.9308 - val_loss: 0.2506\n", + "Epoch 49/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 7ms/step - accuracy: 0.9311 - loss: 0.2358 - val_accuracy: 0.9327 - val_loss: 0.2470\n", + "Epoch 50/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 7ms/step - accuracy: 0.9328 - loss: 0.2348 - val_accuracy: 0.9318 - val_loss: 0.2444\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "# вывод графика ошибки по эпохам\n", + "plt.plot(H.history['loss'])\n", + "plt.plot(H.history['val_loss'])\n", + "plt.grid()\n", + "plt.xlabel('Epochs')\n", + "plt.ylabel('loss')\n", + "plt.legend(['train_loss', 'val_loss'])\n", + "plt.title('Loss by epochs')\n", + "plt.show()" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 472 + }, + "id": "FwSLP5I8CyU0", + "outputId": "62698191-18b0-464e-cf53-c3131b6c627d" + }, + "execution_count": 269, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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Brj22mv5+eefee6552jRogVPPvkkXbt2Zd68eaEqpkiDp3AjcopKSkrC5XKxfv36asfWrVuH2WwmLS3Nvy8hIYFRo0bx9ttvs2PHDs4880wmTJhQ5bq2bdvyxz/+kQULFvDjjz9SVlbG008/fcKyeL3eaq0PGzZsACA9Pb1KGS699FLefPNNtm3bxuLFi0/YalNZLsMwaNOmDf3796+2/epXv6py/q5duygsLDxueVq3bs3GjRvxer1Vzlu3bp3/eOVn79q1q9pA6JPRvHlz7rjjDmbPns2WLVto1qwZjz76aMDuL9LYKdyInKIsFgsDBw7kww8/rNL1k5OTw1tvvcX5559PTEwMQJXZOgBRUVG0a9eO0tJSAIqKiigpKalyTtu2bYmOjvafcyLPP/+8/7VhGDz//PPYbDb69etX5bybbrqJn376ifvuuw+LxcL1119/wntfffXVWCwWJk6cWKUVpPKzjv5+5eXlVVpzysrK+Mc//kFSUhI9evQAYMiQIWRnZ/POO+9Uue65554jKiqKiy66CPDNIjMMg4kTJ1Yr19FlORGPx8OhQ4eq7EtOTqZFixa1rmeRU4E13AUQkeB69dVXq62VAnDXXXfxt7/9jaysLM4//3zuuOMOrFYr//jHPygtLWXy5Mn+c7t06UKfPn3o0aMHCQkJLFu2jPfee88/CHjDhg3069ePa6+9li5dumC1Wpk1axY5OTm1Ch8RERHMnz+fESNG0KtXL+bNm8ecOXP4y1/+QlJSUpVzL730Upo1a8a7777L4MGDSU5OPuH927Zty9/+9jfGjRvH1q1bufLKK4mOjmbLli3MmjWLW2+9lXvvvdd/fosWLXjiiSfYunUrHTp04J133mHVqlW89NJL2Gw2AG699Vb+8Y9/MHLkSJYvX056ejrvvfceixcvZurUqURHRwPQt29fbrrpJp599lk2btzIJZdcgtfr5csvv6Rv3751ep5Ufn4+LVu25JprriEjI4OoqCg++eQTvvvuu1q1kImcMsI3UUtEgqlyKvixth07dhiGYRgrVqwwBg0aZERFRRkul8vo27ev8fXXX1e519/+9jfj3HPPNeLi4gyn02l06tTJePTRR/3Tovft22eMHj3a6NSpkxEZGWnExsYavXr1Mv7zn/+csJwjRowwIiMjjc2bNxsDBw40XC6XkZKSYowfP97weDw1XnPHHXcYgPHWW2/VqU7ef/994/zzzzciIyONyMhIo1OnTsbo0aON9evX+8+56KKLjK5duxrLli0zMjMzjYiICKN169bG888/X+1+OTk5xqhRo4zExETDbrcbZ5xxhvHaa69VO6+8vNx48sknjU6dOhl2u91ISkoyBg8ebCxfvtx/DlDjFO/WrVsbI0aMMAzDNyX9vvvuMzIyMozo6GgjMjLSyMjIMF544YU61YNIU2cyjDq2i4qIhNk999zDP//5T7Kzs3G5XAG9d58+fdi3bx8//vhjQO8rIqGjMTci0qiUlJTwxhtvMGzYsIAHGxFpGjTmRkQahT179vDJJ5/w3nvvsX//fu66665wF0lEGiiFGxFpFH766SeGDx9OcnIyzz77LGeddVa4iyQiDZTG3IiIiEiTojE3IiIi0qQo3IiIiEiTcsqNufF6vezatYvo6OjjPkVYREREGg7DMMjPz6dFixbVHlhb08lh8/nnnxuXXXaZ0bx5cwMwZs2aVetrv/rqK8NisRgZGRl1+swdO3Ycd2Ezbdq0adOmTVvD3SoXID2esLbcFBYWkpGRwW9+8xuuvvrqWl+Xm5vLzTffTL9+/cjJyanTZ1Yuib5jxw7/c3MCxe12s2DBAgYOHOhfol2CR/UdWqrv0FJ9h5bqO7TqU995eXmkpaX5/x0/nrCGm8GDBzN48OA6X3fbbbdx4403YrFYmD17dp2ureyKiomJCUq4cblcxMTE6C9HCKi+Q0v1HVqq79BSfYfWydR3bYaUNLoxN6+99ho///wzb7zxBn/7299OeH5paWmVp+Xm5eUBvop1u90BLVvl/QJ9X6mZ6ju0VN+hpfoOLdV3aNWnvutybqMKNxs3buT+++/nyy+/xGqtXdEnTZrExIkTq+1fsGBB0JZuz8rKCsp9pWaq79BSfYeW6ju0VN+hVZf6LioqqvW5jSbceDwebrzxRiZOnEiHDh1qfd24ceMYO3as/31ln93AgQOD0i2VlZXFgAED1KwZAqrv0FJ9h5bqO7RU36FVn/qu7HmpjUYTbvLz81m2bBkrV65kzJgxgG9at2EYWK1WFixYwMUXX1ztOofDgcPhqLbfZrMF7Q9wMO8t1am+Q0v1HVqq79rzeDz17lbyeDxYrVY8Hs+JpxnLSTtWfdvt9mPWf13+HjSacBMTE8Pq1aur7HvhhRf49NNPee+992jTpk2YSiYiIuFkGAbZ2dnk5uae1D1SU1PZsWOH1kALgWPVt9lspk2bNtjt9pO6f1jDTUFBAZs2bfK/37JlC6tWrSIhIYFWrVoxbtw4du7cyb/+9S/MZjPdunWrcn1ycjIRERHV9ouIyKmjMtgkJyfjcrnqFU68Xi8FBQVERUWp5SYEaqrvykV2d+/eTatWrU4qZIY13Cxbtoy+ffv631eOjRkxYgQzZsxg9+7dbN++PVzFExGRBs7j8fiDTbNmzep9H6/XS1lZGREREQo3IXCs+k5KSmLXrl2Ul5efVHdsWMNNnz59MI7zUPIZM2Yc9/oJEyYwYcKEwBZKREQajcoxNsGa/SqhVdkd5fF4TircKJ6KiEijp3EyTUOgfo8KNyIiItKkKNyIiIg0cunp6UydOjUg91q0aBEmk+mkZp+FW6OZCi4iItKU9OnTh7POOisgoeS7774jMjLy5AvVRCjcBEhZuZfsQyUcKD3xuSIiIidiGIZ/sbsTSUpKCkGJGg91SwXIqh25XPjUF0z/yRLuooiISAM3cuRIPv/8c5555hlMJhMmk4kZM2ZgMpmYN28ePXr0wOFw8NVXX7F582auuOIKUlJSiIqKomfPnnzyySdV7nd0t5TJZOKVV17hqquuwuVy0b59ez766KN6l/f999+na9euOBwO0tPTefrpp6scf+GFF2jfvj0RERGkpKRwzTXX+I+99957nHHGGTidTpo1a0b//v0pLCysd1lqQy03AeKy+0JNqTfMBREROcUZhkGx21Ona7xeL8VlHqxl5Se1zo3TZqnVjJ9nnnmGDRs20K1bNx5++GEA1qxZA8D999/PU089xemnn058fDw7duxgyJAhPProozgcDv71r38xdOhQ1q9fT6tWrY75GRMnTmTy5Mk8+eSTPPfccwwfPpxt27aRkJBQp++0fPlyrr32WiZMmMB1113H119/zR133EGzZs0YOXIky5Yt48477+Tf//435513HgcOHODLL78EYPfu3dxwww1MnjyZq666ivz8fL788svjLgMTCAo3AeKsCDdldfv7JCIiAVbs9tDloY/D8tk/PTwIl/3E/7TGxsZit9txuVykpqYCsG7dOgAefvhhBgwY4D83ISGBjIwM//tHHnmEWbNm8dFHH/mftViTkSNHcsMNNwDw2GOP8eyzz/Ltt99yySWX1Ok7TZkyhX79+vHggw8C0KFDB3766SeefPJJRo4cyfbt24mMjOSyyy4jOjqa1q1b0717d8AXbsrLy7n66qtp3bo1AGeccQZer7dOD8KsK3VLBUhly02ZWm5EROQknHPOOVXeFxQUcO+999K5c2fi4uKIiopi7dq1J1zB/8wzz/S/joyMJCYmhj179tS5PGvXrqV3795V9vXu3ZuNGzfi8XgYMGAArVu35vTTT+emm27izTffpKioCICMjAz69evHGWecwa9//WtefvllDh48WOcy1JVabgLEZfNVpccw4fZ40UN8RUTCw2mz8NPDg+p0jdfrJT8vn+iY6JPuljpZR896uvfee8nKyuKpp56iXbt2OJ1OrrnmGsrKyo57n6NX+DWZTHi9gf8/8OjoaFasWMGiRYtYsGABDz30EBMmTOC7774jLi6OrKwsvv76axYsWMBzzz3HX//6V5YsWXJSj8s4EbXcBEhltxRAsfqmRETCxmQy4bJb67w57ZZ6XXfkVpcVdu12Ox7Pif+9WLx4MSNHjuSqq67ijDPOIDU1la1bt55EDdVN586dWbx4cbUydejQAYvF92+f1Wqlf//+TJ48mR9++IGtW7fy6aefAr7fR+/evZk4cSIrV67Ebrcze/bsoJZZLTcBYreasVlMuD0GhWUegpdHRUSkKUhPT2fp0qVs3bqVqKioY7aqtG/fng8++IChQ4diMpl48MEHg9ICcyx//OMf6dmzJ4888gjXXXcdS5Ys4fnnn+eFF14A4H//+x8///wzF154IfHx8cydOxev10vHjh1ZunQpCxcuZODAgSQnJ7N06VL27t1Lp06dglpmtdwEUGVzpFpuRETkRO69914sFgtdunQhKSnpmGNopkyZQnx8POeddx5Dhw5l0KBBnH322SEr59lnn81//vMfZs6cSbdu3XjooYd4+OGHGTlyJABxcXF88MEHXHzxxXTu3JkXX3yRt99+m65duxITE8MXX3zBkCFD6NChAw888ABPP/00gwcPDmqZ1XITQE67hbyS8jpPQRQRkVNPhw4dWLJkSZV9lYHhSOnp6f4unkqjR4+u8v7obqqaplrX9nEKffr0qXb9sGHDGDZsWI3nn3/++SxatKjGY507d2b+/PnV9ge75UktNwEUWTHupkgtNyIiImGjcBNATn+4KQ9zSURERGp22223ERUVVeN22223hbt4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zMzk448/Dk1ha8m/QrHCjYiISFiENdwUFhaSkZHBtGnTanX+F198wYABA5g7dy7Lly+nb9++DB06lJUrVwa5pLVn97fcqFtKREQkHMI6W2rw4MEMHjy41udPnTq1yvvHHnuMDz/8kP/+97907949wKWrH82WEhERCa9GPebG6/WSn59PQkJCuIvip9lSIiIi4dWo17l56qmnKCgo4Nprrz3mOaWlpZSWlvrf5+XlAb4FhNxud0DL43a7q8yWCvT9parK+lU9h4bqO7RU36Gl+g6t+tR3Xc5ttOHmrbfeYuLEiXz44YckJycf87xJkyYxceLEavsXLFiAy+UKeLkqZ0vlF5Uyd+7cgN9fqsvKygp3EU4pqu/QUn2Hluo7tOpS30VFRbU+t1GGm5kzZ3LLLbfw7rvv0r9//+OeO27cOMaOHet/n5eXR1paGgMHDiQmJiag5XK73bw/x/eLKjNMDB48WM8oCSK3201WVhYDBgzQiqIhoPoOLdV3aKm+Q6s+9V3Z81IbjS7cvP322/zmN79h5syZXHrppSc83+Fw4HA4qu0/mWW6j/t5FS03hgEeLDhtJ/+MDDm+YP0upWaq79BSfYeW6ju06lLfdfm9hDXcFBQUsGnTJv/7LVu2sGrVKhISEmjVqhXjxo1j586d/Otf/wJ8XVEjRozgmWeeoVevXmRnZwPgdDqJjY0Ny3c4mu2IIdpFZeU47Qo3IiIioRTW2VLLli2je/fu/mncY8eOpXv37jz00EMA7N69m+3bt/vPf+mllygvL2f06NE0b97cv911111hKX9NzCaIqEg4mjElIiISemFtuenTpw+GYRzz+IwZM6q8X7RoUXALFCBOm4USt5dit8KNiIhIqDXqdW4aKldFV5RabkREREJP4SYI/OGmVI9gEBERCTWFmyBwquVGREQkbBRugsBVMf27SGNuREREQk7hJggqW26K9WRwERGRkFO4CQKX3TcJrbBULTciIiKhpnATBJUDijUVXEREJPQUboKg8pELReqWEhERCTmFmyDQOjciIiLho3ATBJUtN8UKNyIiIiGncBMEropHgxcq3IiIiIScwk0QuGyaCi4iIhIuCjdBoBWKRUREwkfhJgj8KxQr3IiIiIScwk0QHG65UbeUiIhIqCncBIGmgouIiISPwk0Q+FcoVrgREREJOYWbINCAYhERkfBRuAkC/1Rwtwev1whzaURERE4tCjdBUPlUcNDDM0VEREJN4SYIImxmTCbfa3VNiYiIhJbCTRCYTCY9X0pERCRMFG6CxD8d3K21bkREREJJ4SZIKmdMFZaq5UZERCSUFG6CJLJiULG6pUREREJL4SZI9AgGERGR8FC4CRL/KsWaCi4iIhJSCjdB4rT5uqU0FVxERCS0FG6CJNJROaBY3VIiIiKhpHATJHp4poiISHgo3ASJv1tKY25ERERCSuEmSNRyIyIiEh4KN0FyeBE/jbkREREJJYWbIIn0P35BLTciIiKhpHATJC6tUCwiIhIWCjdBohWKRUREwkPhJkj8TwVXy42IiEhIKdwESWW3lMKNiIhIaCncBImmgouIiISHwk2QuDTmRkREJCwUboLEqTE3IiIiYaFwEySVY25Ky714vEaYSyMiInLqULgJkspuKVDXlIiISCgp3ASJw2rGbPK91qBiERGR0FG4CRKTyaTp4CIiImGgcBNE/odnqltKREQkZBRugihSa92IiIiEnMJNEDnVLSUiIhJyCjdBpOdLiYiIhF5Yw80XX3zB0KFDadGiBSaTidmzZ5/wmkWLFnH22WfjcDho164dM2bMCHo568v/CAa3xtyIiIiESljDTWFhIRkZGUybNq1W52/ZsoVLL72Uvn37smrVKu6++25uueUWPv744yCXtH6ctooBxaVquREREQkVazg/fPDgwQwePLjW57/44ou0adOGp59+GoDOnTvz1Vdf8fe//51BgwYFq5j1FunwVa8GFIuIiIROoxpzs2TJEvr3719l36BBg1iyZEmYSnR8er6UiIhI6IW15aausrOzSUlJqbIvJSWFvLw8iouLcTqd1a4pLS2ltLTU/z4vLw8At9uN2+0OaPkq71f5M8LiW6K4oKQs4J8l1etbgkv1HVqq79BSfYdWfeq7Luc2qnBTH5MmTWLixInV9i9YsACXyxWUz8zKygJg53YzYGbtxp+Z69kUlM+Sw/UtoaH6Di3Vd2ipvkOrLvVdVFRU63MbVbhJTU0lJyenyr6cnBxiYmJqbLUBGDduHGPHjvW/z8vLIy0tjYEDBxITExPQ8rndbrKyshgwYAA2m40dX2zh450bSWrRkiFDugX0s6R6fUtwqb5DS/UdWqrv0KpPfVf2vNRGowo3mZmZzJ07t8q+rKwsMjMzj3mNw+HA4XBU22+z2YL2B7jy3jEuOwCl5V79ZQmiYP4upTrVd2ipvkNL9R1adanvuvxewjqguKCggFWrVrFq1SrAN9V71apVbN++HfC1utx8883+82+77TZ+/vln/vSnP7Fu3TpeeOEF/vOf/3DPPfeEo/gnVDkVXAOKRUREQies4WbZsmV0796d7t27AzB27Fi6d+/OQw89BMDu3bv9QQegTZs2zJkzh6ysLDIyMnj66ad55ZVXGuQ0cEBPBRcREQmDsHZL9enTB8Mwjnm8ptWH+/Tpw8qVK4NYqsA5/PgFrVAsIiISKo1qnZvGRs+WEhERCT2FmyCq7JbSCsUiIiKho3ATRFqhWEREJPQUboJIY25ERERCT+EmiCrDjdtj4PZ4w1waERGRU4PCTRBVjrkBdU2JiIiEisJNENmtZqxm38MzNahYREQkNBRugsypcTciIiIhpXATZFrrRkREJLQUboIsUo9gEBERCSmFmyBTt5SIiEhoKdwEWWW3lAYUi4iIhIbCTZA5K7qlChVuREREQkLhJshctsqWG3VLiYiIhILCTZC5HJotJSIiEkoKN0GmqeAiIiKhpXATZJWPYCh2K9yIiIiEgsJNkDkrxtwUlmrMjYiISCgo3ARZpENTwUVEREJJ4SbInFqhWEREJKQUboKscip4kcbciIiIhITCTZD5Z0tpzI2IiEhIKNwEmVNTwUVEREJK4SbIIh2aCi4iIhJKCjdBVjkVXE8FFxERCQ2FmyDTCsUiIiKhpXATZK4jpoIbhhHm0oiIiDR9CjdBVvngTI/XoMzjDXNpREREmj6FmyCrXOcGtEqxiIhIKCjcBJnVYsZu8VWzxt2IiIgEn8JNCBxe60YzpkRERIJN4SYENGNKREQkdBRuQkDhRkREJHQUbkKgcjq4BhSLiIgEn8JNCOj5UiIiIqGjcBMCld1ShRpQLCIiEnQKNyEQqW4pERGRkFG4CQF1S4mIiISOwk0IVHZLFatbSkREJOgUbkLA6R9zo5YbERGRYFO4CQGX7fCTwUVERCS4FG5CINKhbikREZFQUbgJAQ0oFhERCR2FmxDQ4xdERERCR+EmBJz+MTfqlhIREQm2eoWb119/nTlz5vjf/+lPfyIuLo7zzjuPbdu2BaxwTYVabkREREKnXuHmsccew+l0ArBkyRKmTZvG5MmTSUxM5J577gloAZsC/4Bit8KNiIhIsFnrc9GOHTto164dALNnz2bYsGHceuut9O7dmz59+gSyfE2CU1PBRUREQqZeLTdRUVHs378fgAULFjBgwAAAIiIiKC4uDlzpmgh/t1SpxtyIiIgEW73CzYABA7jlllu45ZZb2LBhA0OGDAFgzZo1pKen1+le06ZNIz09nYiICHr16sW333573POnTp1Kx44dcTqdpKWlcc8991BSUlKfrxF4hoHFU70s/nDj9mAYRqhLJSIickqpV7iZNm0amZmZ7N27l/fff59mzZoBsHz5cm644YZa3+edd95h7NixjB8/nhUrVpCRkcGgQYPYs2dPjee/9dZb3H///YwfP561a9fyz3/+k3feeYe//OUv9fkagbXlS6xPtub8jX+rdsjl8HVLGQaUlntDXTIREZFTSr3G3MTFxfH8889X2z9x4sQ63WfKlCn87ne/Y9SoUQC8+OKLzJkzh1dffZX777+/2vlff/01vXv35sYbbwQgPT2dG264gaVLl9bjWwSYKwGTuwin90C1Q06bxf+6qMxDxBHvRUREJLDqFW7mz59PVFQU559/PuBryXn55Zfp0qUL06ZNIz4+/oT3KCsrY/ny5YwbN86/z2w2079/f5YsWVLjNeeddx5vvPEG3377Leeeey4///wzc+fO5aabbjrm55SWllJaWup/n5eXB4Db7cbtdtfq+9aKKxUb4PAUUFR4CCJjqxx2WM2Ulns5VFhCtN0UuM89hVX+/gL6e5RjUn2Hluo7tFTfoVWf+q7LufUKN/fddx9PPPEEAKtXr+aPf/wjY8eO5bPPPmPs2LG89tprJ7zHvn378Hg8pKSkVNmfkpLCunXrarzmxhtvZN++fZx//vkYhkF5eTm33XbbcbulJk2aVGOL0oIFC3C5XCcsZ10MMTuxeYtZ8vG7FES0qHLMioVSTHy88DOaB/ZjT3lZWVnhLsIpRfUdWqrv0FJ9h1Zd6ruoqKjW59Yr3GzZsoUuXboA8P7773PZZZfx2GOPsWLFCv/g4mBYtGgRjz32GC+88AK9evVi06ZN3HXXXTzyyCM8+OCDNV4zbtw4xo4d63+fl5dHWloaAwcOJCYmJqDls+xoDfvW0btbaywdBlQ59sRPX1B4qIRzftWbjJaxx7iD1IXb7SYrK4sBAwZgs9nCXZwmT/UdWqrv0FJ9h1Z96ruy56U26hVu7Ha7P0F98skn3HzzzQAkJCTU+sMTExOxWCzk5ORU2Z+Tk0NqamqN1zz44IPcdNNN3HLLLQCcccYZFBYWcuutt/LXv/4Vs7n6+GiHw4HD4ai232azBfwPsDe2Jexbh7UwG+tR946sGFRc5kV/cQIsGL9LOTbVd2ipvkNL9R1adanvuvxe6jVb6vzzz2fs2LE88sgjfPvtt1x66aUAbNiwgZYtW9bqHna7nR49erBw4UL/Pq/Xy8KFC8nMzKzxmqKiomoBxmLxDc5tCFOsjZjTADDl/VLtWOV08GIt5CciIhJU9Qo3zz//PFarlffee4/p06dz2mm+f9TnzZvHJZdcUuv7jB07lpdffpnXX3+dtWvXcvvtt1NYWOifPXXzzTdXGXA8dOhQpk+fzsyZM9myZQtZWVk8+OCDDB061B9ywirWF+xMebuqHXJWhJtChRsREZGgqle3VKtWrfjf//5Xbf/f//73Ot3nuuuuY+/evTz00ENkZ2dz1llnMX/+fP8g4+3bt1dpqXnggQcwmUw88MAD7Ny5k6SkJIYOHcqjjz5an68RcJUtN9TYcuOr6mI9GVxERCSo6hVuADweD7Nnz2bt2rUAdO3alcsvv7zOLShjxoxhzJgxNR5btGhRlfdWq5Xx48czfvz4epU56Cpbbg4du1tKz5cSEREJrnqFm02bNjFkyBB27txJx44dAd+U67S0NObMmUPbtm0DWsjGwoipGG+Utwu8Xjii1UnhRkREJDTqNebmzjvvpG3btuzYsYMVK1awYsUKtm/fTps2bbjzzjsDXcbGI7o5BiZMnlIo2lflUGW3VJG6pURERIKqXi03n3/+Od988w0JCQn+fc2aNePxxx+nd+/eAStco2OxUWKLw+k+CId2QFSy/5BTLTciIiIhUa+WG4fDQX5+frX9BQUF2O32ky5UY1Zsqwh8R427cdk0FVxERCQU6hVuLrvsMm699VaWLl2KYRgYhsE333zDbbfdxuWXXx7oMjYqxXbfE9I5tLPK/song6vlRkREJLjqFW6effZZ2rZtS2ZmJhEREURERHDeeefRrl07pk6dGuAiNi5F/nBzVMuNuqVERERCol5jbuLi4vjwww/ZtGmTfyp4586dadeuXUAL1xgdbrnZUWX/4XCjAcUiIiLBVOtwc+TDJ2vy2Wef+V9PmTKl/iVq5IptNbfcOG1quREREQmFWoeblStX1uo8k8lU78I0BcXH6JaqfHCmBhSLiIgEV63DzZEtM3Js/nBTuAfKS8HqeyK5fyq4W91SIiIiwVSvAcVybGWWKAyr0/cm7/CMKf+Ym1K13IiIiASTwk2gmUwQW/EAzSO6plw2TQUXEREJBYWbIPA/Y+qIcFPZLVXs9uD1GuEoloiIyClB4SYYYqq33EQ6Dj8tvaRcrTciIiLBonATBEZsZcvN4bVuIqyHw426pkRERIJH4SYIauqWMptNh9e60aBiERGRoFG4CYYauqXgiBlTmg4uIiISNAo3QWD4Z0vtBOPw4GGXQ6sUi4iIBJvCTTBEt/D9dBdC8UH/7srp4FqlWEREJHgUboLB5oTIJN/rGqaDF5aqW0pERCRYFG6CJbb6oGLXEWvdiIiISHAo3ATLccKNxtyIiIgEj8JNsMSm+X4esdaNy65HMIiIiASbwk2wVE4Hr+HhmcVlGnMjIiISLAo3wVJDt5R/QLFabkRERIJG4SZY/N1SNQwoVrgREREJGoWbYKlsucnfDR43cOSYG3VLiYiIBIvCTbBEJoHFDobXF3DQbCkREZFQULgJFrO52jOmFG5ERESCT+EmmI4aVOxUt5SIiEjQKdwE01HhxmXTgGIREZFgU7gJpqPDjZ4KLiIiEnQKN8F0dLjRCsUiIiJBp3ATTNXCTWXLjcbciIiIBIvCTTAdtZCf06ZuKRERkWBTuAmmyqngpYeg5JC/5aa03IvHa4SxYCIiIk2Xwk0wOaLAGe97fWgnkQ6r/1ChuqZERESCQuEm2GIqxt3k7cRhNZMYZQdg056CMBZKRESk6VK4CTb/oOIdmEwmup0WC8CPOw+FsVAiIiJNl8JNsB01Y+rMinCz+heFGxERkWBQuAm2o8JNZcvNarXciIiIBIXCTbAdFW7OaOkLNxv3FFDi1pRwERGRQFO4CTb/Wjc7AEiNiSAxyo7Ha/DT7rwwFkxERKRpUrgJtsqWm7zd4PVoULGIiEiQKdwEW3QqmCzgdUPBHkCDikVERIJJ4SbYzBaIaeF7rUHFIiIiQadwEwpHrHUDGlQsIiISTAo3oXDUjCkNKhYREQkehZtQOCrcaFCxiIhI8IQ93EybNo309HQiIiLo1asX33777XHPz83NZfTo0TRv3hyHw0GHDh2YO3duiEpbT0eFG9CgYhERkWCxnviU4HnnnXcYO3YsL774Ir169WLq1KkMGjSI9evXk5ycXO38srIyBgwYQHJyMu+99x6nnXYa27ZtIy4uLvSFr4vKtW7yDocbDSoWEREJjrCGmylTpvC73/2OUaNGAfDiiy8yZ84cXn31Ve6///5q57/66qscOHCAr7/+GpvNBkB6enooi1w/Maf5fh7RcnP0oOIImyUcJRMREWlywhZuysrKWL58OePGjfPvM5vN9O/fnyVLltR4zUcffURmZiajR4/mww8/JCkpiRtvvJE///nPWCw1h4PS0lJKS0v97/PyfAN43W43brc7gN8I//2q3TcyFRtA0X7cRYfA5qKZ00KzSDv7C8v4YccBuqfFBbQsp4Jj1rcEheo7tFTfoaX6Dq361Hddzg1buNm3bx8ej4eUlJQq+1NSUli3bl2N1/z88898+umnDB8+nLlz57Jp0ybuuOMO3G4348ePr/GaSZMmMXHixGr7FyxYgMvlOvkvUoOsrKyqOwyDIeYIbN4Svvjv2xRENAcg2WZmP2b+k7WE3alGUMpyKqhW3xJUqu/QUn2Hluo7tOpS30VFRbU+N6zdUnXl9XpJTk7mpZdewmKx0KNHD3bu3MmTTz55zHAzbtw4xo4d63+fl5dHWloaAwcOJCYmJqDlc7vdZGVlMWDAAH+3WSXrznTYu46LzmqLcXofADY4NrF20c8Y8WkMGdItoGU5FRyvviXwVN+hpfoOLdV3aNWnvit7XmojbOEmMTERi8VCTk5Olf05OTmkpqbWeE3z5s2x2WxVuqA6d+5MdnY2ZWVl2O32atc4HA4cDke1/TabLWh/gGu8d2wa7F2HtXA3VBzLSIsHYM2ufP1lOgnB/F1Kdarv0FJ9h5bqO7TqUt91+b2EbSq43W6nR48eLFy40L/P6/WycOFCMjMza7ymd+/ebNq0Ca/X69+3YcMGmjdvXmOwaVD808F3+ndppWIREZHAC+s6N2PHjuXll1/m9ddfZ+3atdx+++0UFhb6Z0/dfPPNVQYc33777Rw4cIC77rqLDRs2MGfOHB577DFGjx4drq9QezWsdaOVikVERAIvrGNurrvuOvbu3ctDDz1EdnY2Z511FvPnz/cPMt6+fTtm8+H8lZaWxscff8w999zDmWeeyWmnncZdd93Fn//853B9hdo76vlScHil4kXr9/LjzkOc3So+TIUTERFpOsI+oHjMmDGMGTOmxmOLFi2qti8zM5NvvvkmyKUKghpabsC3UvGi9Xu1UrGIiEiAhP3xC6eMI8ONcXjat1YqFhERCSyFm1CJbgGYwFMKhfv8uzWoWEREJLAUbkLFaofoiinuR4y70aBiERGRwFK4CaXKrqm8w9PBTSYTZ1R0Tf2orikREZGTpnATSscYVFwZbjSoWERE5OQp3IRSDU8HBw0qFhERCSSFm1CKTfP9PGLMDWhQsYiISCAp3ITSMbqlNKhYREQkcBRuQukY4UaDikVERAJH4SaUKrulCnLAXVzlkAYVi4iIBIbCTSi5EioW8wM2f1blkAYVi4iIBIbCTSiZTND1Kt/rH9+vckiDikVERAJD4SbUul3t+7l+HpQV+XdrULGIiEhgKNyE2mk9IK4VuAth48f+3RpULCIiEhgKN6FmMkG3Yb7XR3dNaVCxiIjISVO4CYeuFV1TG7Og5HAXlAYVi4iInDyFm3BIPQOatYfyEt/YmwoaVCwiInLyFG7CwWQ6PLB4zQf+3RpULCIicvIUbsKlsmtq00IoPghoULGIiEggKNyES3InSO4KXjes/Z9/twYVi4iInByFm3Cq7Jo6YtaUBhWLiIicHIWbcKoMN1u+gIK9gAYVi4iInCyFm3BKOB1adAfDA2s/BKoOKl6x/WCYCygiItL4KNyEW+XA4h9nAb5BxRd3Sgbg1a+2hKtUIiIijZbCTbhVPkhz22LI2wXA7y9qi8kEn6zdw1pNCRcREakThZtwi0uDtF6AAWtmA9A2KYpLz2gOwLTPNoWvbCIiIo2Qwk1DUPmsqSMW9Bvdtx0Ac1bvZvPegnCUSkREpFFSuGkIulwJJjP88h0c3AZA5+Yx9O+cjGHA9EWbw1s+ERGRRkThpiGIToHWvX2v18zy765svZm1cic7DhSFo2QiIiKNjsJNQ1HZNXXEgn7dW8VzfrtEPF6Df3yh1hsREZHaULhpKDpfDiYLZP8A+w4PIq5svfnPsl/IySsJV+lEREQaDYWbhiKyGbTt63t9xMDiX52ewDmt4ykr9/LyFz+HqXAiIiKNh8JNQ+Jf0O9wuDGZTIy+2Nd68+bS7RwoLAtHyURERBoNhZuGpNOlYLHD3rWQ85N/d58OSXQ7LYZit4fXFmvVYhERkeNRuGlInHHQrr/v9ZqqrTdjKsbezPh6K3kl7jAUTkREpHFQuGlojpw1ZRj+3QO7pNI+OYr8knL+vWRbmAonIiLS8CncNDQdLgGrEw78DFu/8u82m03+mVP//GoLRWXl4SqhiIhIg6Zw09A4oiDjOt/rOWPBfXj692VnNqdVgosDhWW8tXR7mAooIiLSsCncNET9J0BUCuzbAF8+5d9ttZi5vU9bAF7+8mdK3J4wFVBERKThUrhpiJzxMORJ3+uv/g7ZP/oPXX32aTSPjSAnr5T3lv8SpgKKiIg0XAo3DVWXK6DTZeAth4/GgMc3xsZhtXDrhacD8OLnm3F7vOEspYiISIOjcNOQXfo0OGJh10pYOt2/+/qerWgWaeeXg8W8/vXW8JVPRESkAVK4aciiU2HQ33yvP33UN4MKcNot3NmvPQCPzV3LJz/lhKuEIiIiDY7CTUPX/SZocyGUF8NHd/rXvrk5szXX90zDa8Af3l7JD7/khrecIiIiDYTCTUNnMsHQZ31r32z9Elb8q2K3iUeu7MaFHZIodnv4zYxl7DhQFObCioiIhJ/CTWOQ0AYu/qvv9YIHIW83ADaLmWk3dqdTajT7CkoZNeM7DhXp0QwiInJqU7hpLHrdDi3OhtJDMPdef/dUdISN10b1JDUmgk17Crj138soLdf6NyIicupSuGksLFa4/DkwW2Hd/+CnD/2Hmsc6eW1UT6IcVpZuOcCf3/sB44jnUomIiJxKFG4ak9RucP49vtdz74OiA/5DnZvH8MLws7GaTcxetYunF2wIUyFFRETCq0GEm2nTppGenk5ERAS9evXi22+/rdV1M2fOxGQyceWVVwa3gA3JhfdBYgco3OMbf3PkoQ5JPHb1GQA8/9kmZn6r50+JiMipJ+zh5p133mHs2LGMHz+eFStWkJGRwaBBg9izZ89xr9u6dSv33nsvF1xwQYhK2kBYHXD584AJVr0Ba2ZVOXztOWncebHv6eF/nf0jn2/YG4ZCioiIhE/Yw82UKVP43e9+x6hRo+jSpQsvvvgiLpeLV1999ZjXeDwehg8fzsSJEzn99NNDWNoGolUv6HWb7/V7v4VVb1c5fM+ADlzd/TQ8XoM73ljO6l8OhaGQIiIi4WEN54eXlZWxfPlyxo0b599nNpvp378/S5YsOeZ1Dz/8MMnJyfz2t7/lyy+/PO5nlJaWUlpa6n+fl5cHgNvtxu0O7LTpyvsF+r41ung8luJczD+8DbNvw1OUi7fnLf7Dj1zemV25RXyz5SDXvPg1fxnckRt6tsRkMgW/bCES0voW1XeIqb5DS/UdWvWp77qcG9Zws2/fPjweDykpKVX2p6SksG7duhqv+eqrr/jnP//JqlWravUZkyZNYuLEidX2L1iwAJfLVecy10ZWVlZQ7luNeRDdkvbTdu8CLAvuZ8PqZWxIGepb+A+4MhEOHTSzNhfG/3ctHyxew/VtvbjC+lsPvJDVtwCq71BTfYeW6ju06lLfRUW1X6i2Uf0zl5+fz0033cTLL79MYmJira4ZN24cY8eO9b/Py8sjLS2NgQMHEhMTE9Dyud1usrKyGDBgADabLaD3PibjUjxfTsby5ZN03v0eHVqn4L14gj/gXOU1mLFkG09lbeT7A2b2eV38/ddn0r1VXGjKF0Rhqe9TmOo7tFTfoaX6Dq361Hdlz0tthDXcJCYmYrFYyMmp+uDHnJwcUlNTq52/efNmtm7dytChQ/37vF4vAFarlfXr19O2bdsq1zgcDhwOR7V72Wy2oP0BDua9a9TvAXDFw8d/wfLNNCxl+XDZVDBbAPh9n/ZktkviD2+vZNv+Im7453eMHdCB2y9qi9nc+LupQl7fpzjVd2ipvkNL9R1adanvuvxewjqg2G6306NHDxYuXOjf5/V6WbhwIZmZmdXO79SpE6tXr2bVqlX+7fLLL6dv376sWrWKtLS0UBa/Yckc7ZtFZTL7nj/1/i1QXuY/fGbLOP73h/O54qwWeLwGT368nptf/ZY9+SVhLLSIiEjghb1bauzYsYwYMYJzzjmHc889l6lTp1JYWMioUaMAuPnmmznttNOYNGkSERERdOvWrcr1cXFxANX2n5LOvgkcUfD+72DNB1BWAL9+Hey+sUXRETamXncW57dL5KEP1/DVpn0MeeZLnr72LC7qkBTmwouIiARG2MPNddddx969e3nooYfIzs7mrLPOYv78+f5Bxtu3b8dsDvuM9caj61Vgj4Z3/g82LoA3r4Eb3oaIWMD3NPFfn5NG91bxjHlrBeuy8xnx6rfcnNmaO/u1JzGqeheeiIhIY9IgUsOYMWPYtm0bpaWlLF26lF69evmPLVq0iBkzZhzz2hkzZjB79uzgF7Ixad8fbpoFjhjYthie7wkr/g3eww/UbJccxezRvbk5szUA/1qyjQsnf8aUBevJK9FUSBERabwaRLiRIGidCSP+C/FtoCAHPhoDL10EW77wnxJhs/DwFd1485ZeZLSMpajMw7OfbuLCyZ/x0hebKXHr6eIiItL4KNw0ZS3OgtFLYeDfwBEL2avh9aHw9g2wb5P/tN7tEpk9ujcv/t/ZtEuOIrfIzWNz19HnyUW8tXQ7bo83fN9BRESkjhRumjqrA877A9y5Es69FUwWWD8XXugF8+73P1ncZDJxSbfmfHz3hTx5zZmcFuckO6+Ev8xazYApn/PR97vweo0wfxkREZETU7g5VUQ2gyFPwh1LoP0g8JbD0unwbHf4Zrp/2rjF7Btw/Om9FzF+aBeaRdrZur+IO99eySXPfMHrX2/lULHG5IiISMOlcHOqSeoIw//jG3Cc3BVKcmH+/fDc2fD1c1Die8imw2phVO82fPGnvvxxQAeiHVY25BQw/qM19HrsE/74n+9Zvu0AhqHWHBERaVgUbk5VbS+G276Eoc9AZDIc2gELHoApXWH+XyB3OwCRDit/6Neer+6/mImXd6VTajQlbi/vr/iFYdOXMGjqF7y2eAu5RWUn+EAREZHQULg5lZkt0GMk3L0ahj4LiR2hLB++mQbPZMC7I+GXZQDEOm2MOC+deXddwAd3nMe157TEabOwIaeAif/9iXMfW8g976zim5/349HYHBERCaOwL+InDYAtAnqMgO43weaFsOR5+HkRrJnl29J+5Xu8Q6dLMZktnN0qnrNbxfPAZV34cNUu3lq6nbW785i1ciezVu4kIdJO347JDOiSzAXtk4h06I+ZiIiEjv7VkcPMZmg/wLdl/whLpsHqd2HHN74tKgXaXAjp50P6BcQknM5Nv2rN//VqxQ+/HOLtb7czd/VuDhSW8f6KX3h/xS/YLWYy2zajf5cU+ndOpnmsM9zfUkREmjiFG6lZaje4ajr0Hw/fvgzL/ulbDHD1u74NIOY0SD8fU/r5ZKRfQMbVZ/DIld1YtvUgC9fmkLU2h237i/h8w14+37CXB2dD1xYx9OucwoXtE8lIi8NmUc+oiIgElsKNHF90KvR7EC68D375FrZ8CVu/gl++g7yd8MM7vg0gNg1bmwvJ7DiYzIEX89dLO7N5bwFZP+1h4doclm8/yJpdeazZlcezCzcSabdwbpsEerdL5Ly2iXRKjcZsNoX3+4qISKOncCO1Y4vwdUm1udD3vqzIF3a2fuULPDuX+2ZcrXrTt1kjMLW9mHYdh9Cu52Bu79OWfQWlfLZuD4vW7+Xrzfs4WOTms/V7+Wz9XgCaRdr5Vdtm9G6bSO92zWiV4MJkUtgREZG6UbiR+rG74PQ+vg2grBB2LIVNC2Hd/+DgVt9KyOvngskMab8isdOl/LrTEH59ztl4vQZrs/P4etN+Fm/ex7dbDrC/sIw5P+xmzg+7AUiKdnBWWhxnpcXRPS2OM9PiiNLgZBEROQH9SyGBYY/0rZ3T9mLfs6z2/ATr5viCzu7vYfvXvm3BXyGpM+bTetA1pStdW3bhdz26UeY4h+9/yWXxpn0s3rSPldtz2ZtfStZPOWT9lAOAyQTtk6MqAk883ZpH4dGscxEROYrCjQSeyQQpXX3bRX+C3B2wfp4v6Gz9Cvau9W1HsEel0DOlKz2Tu3D3r7pRcmln1pSlsnJXESt35LJqey47c4vZkFPAhpwC/rPsFwCsJguv7fiGri1i6dIihi7NY+jUPEYtPCIipzD9CyDBF5cGvW71bUUHYNtiyFkDOT/6fh7Y4puJVZADmz8FIALoYbbRI6ULNM+AfhkciO3CypLTWLG7mFU7clm1I5fCUg+rd+axemdelY9Mb+byh52OqTG0S44iLd6JVbOzRESaPIUbCS1XAnQe6tsqlRbA3nUVgadyW+17ztXu730bkAD0M1nol9QJmmdQ3qkr8zYUYek2lJ8Omvlpdx4/7cojO6+ErfuL2Lq/iLmrs/0fY7eYaZMYSbvkKNomR/l+JkXSNimKCJslxBUhIiLBonAj4eeIgpbn+LZKhuF7vtXuVYcDzq5VULQP9qyBPWuwAkMBtj/KkPh0SD0Dep9JXlwn1hvprDzkYs3ufDbkFPDz3gJKy72sz8lnfU5+lY83meC0OCetm7lolRBJ62YuWie4aNXMRetmkeriEhFpZPRfbWmYTCaIb+3bulzh22cYkL/bF3J2f4935wpKti3D5T7gm511cCus/S8xQE+gZ0ScL/C07YA3I4VccwK/lMewqTiKn/KcfH/Qxoa9xRwqdvPLwWJ+OVjMYvZXK0qzSLsv6CS4aNUsklYJroog5CI52qHp6iIiDYzCjTQeJhPEtPBtnYbgcbvJmjuXIX1+hW3/Oshe7RvHk73a181Vkgtbv4StX2LG162VAJwJXO27IUZkEp7EJAocKeyxtWSbqTnr3KmsKEzk+9wIDhS52V9Yxv7CMlZuz61WpAibmbR4X9hJS/AFoBZxTprHOkmNjaBZpF0LE4qIhJjCjTR+rgSIvQhOv+jwvvJSX8DJXu1r0SnIgfwcKMj2/SzcA4YXU+EerIV7iGMNcUAHYEDlPezReNJPJz+yDXscaWw3UthdZCa7wMvOgnKyC7yUllso22tl+14rP2Oh1LCRTQIefGN4bBYTKTERNI+NIDXW6fvpfx9B81gnSdEOLApAIiIBo3AjTZPV4Ztl1Tyj5uNeDxTth/xsX/A5tAP2bYL9G2H/Jl8gKsvHkv09cXzvDz5V2Gq+dQkO1plOZ5m7Dd97T+f73LZ8dzAZqDnAWMwmkqMdR4Qg38+UmAiSoh0kR0eQHOMg2mFVF5iISC0o3MipyWyBqGTfVpPyMji4BfZt9AWefZsgd5uvRchTBh53xc+K196K9+5iIjylnGWs5Szr4bV8yuyx5ER1ZaujAz/Slu0lTgoKCikqKsRqlOHId+MocOPY5caMm1zc7MPMQaI5aERzwIimyBqDNSoRZ3QzkmKdJEf7wk9ilJ1mkQ6aRdlJjHKQGOXAadfsLxE5dSnciNTEaoekjr6tLrxeXxjauRx2roBdKyB7NfayQ6Qd+Jo0vuaCI88/RuvPMRWDp8hEbk4UB41o9hpxbDROY5HRkvXeNDYYLTlEFC67hWYVoScxyk5StIOkKIfvZ+UWFUFitB2XXf8ZEJGmRf9VEwkks/lwKDrrRt++8lLf2j27VlQEnlXgLgJrhK/7rMpP++H3Hrdv0cPiA3gL90PRfsxl+VhMBs3Ip5kpn3bsIpOfqhQhx4jzBZ28lqw/lMZmbwu246QEOyWGnRJslGKnFBtgItJuISnaQbMoB/EuO80i7SRE2Ulw2Uk44nWMw0ypBwxDz7wQkYZN4UYk2KwOOO1s39azfrfwr6tcXgbFB3yhp2g/5O2EPWsPb4e2k2LKJcWSy4WsPu49vYaJUmy+0FNgpyjfQQFOiowICoigiAgKjQg24qQIBwWGk1yimL9iDaURSbgjkjBFNiMm0kmc00Z8pJ1Yp414l504l404l+915XstlCgioaJwI9KYWO0QnerbalKSB3vX+57dtWet7wGm+zf7ntpeXgrlxWB4ATCbDJyU4aTMd21dxiqXAwXgyTdxgBj2GnHsNWLZSxy5RiQHsVFi+FqHKluJvBY7NrsLq8OJw+HEHhmDMzIaZ1QM0dFxxMTEEBsTS7OoCBIi7cS57JpFJiL1onAj0pRExEBaT99WE8PwdXeVF4O7pOrPskLfVppf8brgiPcFeEvyyNm2gWYOD6bCvVhL9mHBSxKHSDIdql35yiu2QuBAzacUGQ6KcPALERSaIikyR1NsiabMFoPbFoPHEYsREY/JFYfFGY8tqhkRsc1wxSURHR1PXEULkk3PERM5ZSnciJxKTKaKcT12iIit06Uet5tv585lyJAh2Gy2w9PpKx96WrDH97M4t6KVqATKSzHKSygvK6a8tBhPWQledzGGuxiTuwhLeSFWTwkOb7H/c1ymUlyUkkjFw1C9FZv7xGV0GxZyiWSrEU2+KYoiSwwl1hg8VhcmmwOL1YHF5sBid2C1R2CzO7A7nNgdEUTY7TjtZpxWE06bGZvZ5AuDGId/mq3gTIDIRHA1862xFBHnq1cRaTAUbkSkfqpMpz/jmKeZ8E0KO+7EMMMAd0XrkbsQd0kBBXm5lOTtp7TgAO6CA3iKDmIU5UJpLtaSXKzuPBzuQ0R48ony5GHHjc3kIYk8kkxHBKOyii1IvCYrnog4vM5mmCITsUY2w+yKA0eML/hExPiCpKPiZ0SM77XJDN5yXzeht9wXFg1PxWsvJncJMcXboXAvxKT46ltEakXhRkTCz2QCu8u3kYQNiG9ex3uUFUHxQTxFByjK3UvRoX2U5u/Dnb+f8tJCystKKHeX4nWX4i0vxXCXYnjKfIO0PWUY3nLcXnB7fVnLwFSx+V6DCSvlxJsKSCCPeFMB0aZizEY55uJ9ULwPDqwPWJVYgb4A6x7wBaHIJIhMPhwoo5J97yNifcHHZKn4aT7qfcXPyhl5FnvVmXmWI2boKUBJE6FwIyJNQ0U4ssSeRnRziK7nbbxeg/zScvKK3RwqdpNX4iav2E1ecTmHKvblFpeRW+SmqKgQb+F+TMUHsJbsJ8KdSzz5xFBEtKmIaIqIMRURU/Ez+oifAB7MeLDgwUw5ZryYffsMC16TiShKiDflYza8h7v/cgJXZdVY7GBzVWxOX51Wvq7c74g+qjUqrnrrlDPOd6666yRMFG5ERI5gNpuIddqIddpIq+O1Hq9Bfomb/JJy8krcFJSUk19Szv5SN1srXvs2NwWlvtcFledWvi8tx+M9vJaQBQ8J5JFsOkSi6RBJplwSKwZxJ5oOEUUxFryY8WLBi8V0+LXdbGAzGdjMXiJM5dgpx04ZNsONzSjD4i3DjPeIL1Cx6nZJ7slXpMXhG5PkjPeNU3JV/HTG+/a7mh21JYAj1rdWlMhJUrgREQkQi9lEnMs3jb2+DMOg2O3hQH4xcxZ8Svdzz6Ow3KhoPXKTV+JrVdpY7GZ5ia8lqTI05VW0NLk9tV9o0YIHB24clBGBG6epFCe+LdriJt7uId7qJsbqJs7qJtZcQry5mBhTEVEUEuktJMJbSER5PrbyfKxleZgMD3hKIX+3b6stk6UiEFWEH2ccWGy+FiWzDSzWY7y2+brVLPaqm/WI1844X9eeK7Gi+1OaMoUbEZEGxGQy4bJbscVEkOqC7q3ifLPTaskwDErLvf6gk1dSfkQA8nWvVXa1VbYwVYamgpJy9pT6Wo+Aw1P368QgkhLiTQXEm/Jpbi8h1VZEirWIREshCaZC4k35xBr5RBl5RJYfwlmei6280DegunCvbwsmWyRENjscdiKTMDvj6bB7J+Yv1xwee1SlW63itcV2uOstIraiWy7W1yLliPGFLgk7/RZERJoQk8lEhM1ChM1CckxEve7h9RoUlh3uJjv8s2o4OnRES1KV8UklFn4pd/KLkcTqEqDkxJ9px00cBSSY8ok35ZNAPrGmQqLtBlFWiLJ5ibQYuKwGLosHp8WL02LgNJXjsHixm8px4MFucmM1yrFRjsVwY/K4fUsTFB/0hSZPKbgLIbcQcrf7P98CdAbIrleVHfFFon3BJyoZolJ8ASoq5fD7yteRSRWDuK0amxQECjciIlKF2WwiOsJGdERdn+x6WInbc7i16IhWo8oxSZVh6FDx4aB0qDiO/SXl/Fzspqy8YixQ8fE/53hMJohyWImJsBHjtBGdZCHJUU4LWz4plgISTXk04xCxRh5R5Qc4tGcnLZunYreZsVvM2CxmLGZTxZy5CuWlUHLItxXnVrzO9S16CVCW79sO7ah9Qc3Wis3mazWy2A6/9w/sjqwYNB95+LXNBfYocERVtCIdueTAEcsOVLZEGYZv/anSAijN8y3QeeTmdUN0c4hNg9jTfJ/VSCnciIhIwFW2HiVFO+p1fYnbU9Gd5ubQEa1FR447yjtizFHl/soQVebxYhj4xyPtzD06JUVVbC2q7j6qR8xm8QW9KIeV6IjKoGQlNtpGTJJv4Hmsy0as3USCtYR4cxGx5BHlPoirbD/2kn2YCvdUXeiyYI/v4bmVvOW+rTZNXPVhj/Z1l5XmV3xOLTkTILZlRdhp6Qs8MacdbpGKTPJ1xzXAQeAKNyIi0uBUhqOUenatlbg9FYHIF4wqA9CR44yOfH2o2M3uvQfB7qSgpJyCsnLf2pIegwOFZRworOtKkDYgFbMplciK1qMoh5WoCCvRzS0k2MuJc0BchJk4h4lYB8TYTMTYIbpii7J6cZndWMqLKx6HUuQLRUe/Ls33PVeu5JCvRabkkO99eUWgK8uvXjx7tG9av3+L8g3oztsFh37xXVN8wLdl/3Dsr2my+AZ/Ryb5Vu6uDD2J7aHnb+tYZ4GjcCMiIk2Of9xRLRc8crvdzJ07lyFDLsRms9Uw7ujIFqNyfyvSkd1rh45YD6lySr/3iNaj+jCZINphJdYVT5wz5XBLUcVyBXGxFV1uEdaKrkQrMZWvbV6cnkJMpXm+Z8pFxPi6sexRJ25tKTnkCzmHfvF1sflf7zw86Lskt2IQ+B7fdqSWPRVuREREGpKTHXdkGAYlbq9vjNERaxoVlFZ2n1UfiH1kODpU7KbY7cEw8IWpknJ21GMAksVsqgg+VmKde/2hKNbpC0UxEbYq+6L84chBVFxHXMldMB1rwHN5me/5cpVhp3Df4dfRdV1iPLAUbkRERALMZDLhtFtw2i0k1/MeZeVef9A5VFzmWx276HArUeXrw4O2Dw/Yzi9x4zV8C0vmFvnOrW84inJYjxpzZCOuovUozmkj1hVDrLMZcS47sQm+ffEuO3V7NG9gKdyIiIg0QHarmaRoR70GZRuGQVFZ1Rlrh2el1bxVjkOq7IarDEeVx+uia4sY5tx5QZ3LHSgKNyIiIk2MyWQi0mEl0mElNbbug7IrV8qu2hpU7p/Gn1vRknSoyF1Di1IZca76LyMQCAo3IiIiUkXlStkuu7VeM9a83to/AiQYGt7kdBEREWnUzObwrrqscCMiIiJNisKNiIiINCkNItxMmzaN9PR0IiIi6NWrF99+++0xz3355Ze54IILiI+PJz4+nv79+x/3fBERETm1hD3cvPPOO4wdO5bx48ezYsUKMjIyGDRoEHv27Knx/EWLFnHDDTfw2WefsWTJEtLS0hg4cCA7d+4McclFRESkIQp7uJkyZQq/+93vGDVqFF26dOHFF1/E5XLx6quv1nj+m2++yR133MFZZ51Fp06deOWVV/B6vSxcuDDEJRcREZGGKKzhpqysjOXLl9O/f3//PrPZTP/+/VmyZEmt7lFUVITb7SYhISFYxRQREZFGJKzr3Ozbtw+Px0NKSkqV/SkpKaxbt65W9/jzn/9MixYtqgSkI5WWllJaWup/n5eXB/gekuZ2123FxROpvF+g7ys1U32Hluo7tFTfoaX6Dq361Hddzm3Ui/g9/vjjzJw5k0WLFhERUfMiQ5MmTWLixInV9i9YsACXyxWUcmVlZQXlvlIz1Xdoqb5DS/UdWqrv0KpLfRcVFdX63LCGm8TERCwWCzk5OVX25+TkkJqaetxrn3rqKR5//HE++eQTzjzzzGOeN27cOMaOHet/n5eX5x+EHBMTc3Jf4Chut5usrCwGDBiAzRbepadPBarv0FJ9h5bqO7RU36FVn/qu7HmpjbCGG7vdTo8ePVi4cCFXXnklgH9w8JgxY4553eTJk3n00Uf5+OOPOeecc477GQ6HA4ej+kPHbDZb0P4AB/PeUp3qO7RU36Gl+g4t1Xdo1aW+6/J7CXu31NixYxkxYgTnnHMO5557LlOnTqWwsJBRo0YBcPPNN3PaaacxadIkAJ544gkeeugh3nrrLdLT08nOzgYgKiqKqKiosH0PERERaRjCHm6uu+469u7dy0MPPUR2djZnnXUW8+fP9w8y3r59O2bz4Uld06dPp6ysjGuuuabKfcaPH8+ECRNCWXQRERFpgMIebgDGjBlzzG6oRYsWVXm/devW4BdIREREGq0GEW5CyTB8j2Gvy8Ck2nK73RQVFZGXl6c+2xBQfYeW6ju0VN+hpfoOrfrUd+W/25X/jh/PKRdu8vPzAUhLSwtzSURERKSu8vPziY2NPe45JqM2EagJ8Xq97Nq1i+joaEwmU0DvXTnNfMeOHQGfZi7Vqb5DS/UdWqrv0FJ9h1Z96tswDPLz82nRokWVsbg1OeVabsxmMy1btgzqZ8TExOgvRwipvkNL9R1aqu/QUn2HVl3r+0QtNpXC/uBMERERkUBSuBEREZEmReEmgBwOB+PHj69xRWQJPNV3aKm+Q0v1HVqq79AKdn2fcgOKRUREpGlTy42IiIg0KQo3IiIi0qQo3IiIiEiTonAjIiIiTYrCTYBMmzaN9PR0IiIi6NWrF99++224i9RkfPHFFwwdOpQWLVpgMpmYPXt2leOGYfDQQw/RvHlznE4n/fv3Z+PGjeEpbCM3adIkevbsSXR0NMnJyVx55ZWsX7++yjklJSWMHj2aZs2aERUVxbBhw8jJyQlTiRu36dOnc+aZZ/oXMsvMzGTevHn+46rr4Hr88ccxmUzcfffd/n2q88CZMGECJpOpytapUyf/8WDWtcJNALzzzjuMHTuW8ePHs2LFCjIyMhg0aBB79uwJd9GahMLCQjIyMpg2bVqNxydPnsyzzz7Liy++yNKlS4mMjGTQoEGUlJSEuKSN3+eff87o0aP55ptvyMrKwu12M3DgQAoLC/3n3HPPPfz3v//l3Xff5fPPP2fXrl1cffXVYSx149WyZUsef/xxli9fzrJly7j44ou54oorWLNmDaC6DqbvvvuOf/zjH5x55plV9qvOA6tr167s3r3bv3311Vf+Y0Gta0NO2rnnnmuMHj3a/97j8RgtWrQwJk2aFMZSNU2AMWvWLP97r9drpKamGk8++aR/X25uruFwOIy33347DCVsWvbs2WMAxueff24Yhq9ubTab8e677/rPWbt2rQEYS5YsCVcxm5T4+HjjlVdeUV0HUX5+vtG+fXsjKyvLuOiii4y77rrLMAz9+Q608ePHGxkZGTUeC3Zdq+XmJJWVlbF8+XL69+/v32c2m+nfvz9LliwJY8lODVu2bCE7O7tK/cfGxtKrVy/VfwAcOnQIgISEBACWL1+O2+2uUt+dOnWiVatWqu+T5PF4mDlzJoWFhWRmZqqug2j06NFceumlVeoW9Oc7GDZu3EiLFi04/fTTGT58ONu3bweCX9en3IMzA23fvn14PB5SUlKq7E9JSWHdunVhKtWpIzs7G6DG+q88JvXj9Xq5++676d27N926dQN89W2324mLi6tyruq7/lavXk1mZiYlJSVERUUxa9YsunTpwqpVq1TXQTBz5kxWrFjBd999V+2Y/nwHVq9evZgxYwYdO3Zk9+7dTJw4kQsuuIAff/wx6HWtcCMiNRo9ejQ//vhjlT5yCbyOHTuyatUqDh06xHvvvceIESP4/PPPw12sJmnHjh3cddddZGVlEREREe7iNHmDBw/2vz7zzDPp1asXrVu35j//+Q9OpzOon61uqZOUmJiIxWKpNsI7JyeH1NTUMJXq1FFZx6r/wBozZgz/+9//+Oyzz2jZsqV/f2pqKmVlZeTm5lY5X/Vdf3a7nXbt2tGjRw8mTZpERkYGzzzzjOo6CJYvX86ePXs4++yzsVqtWK1WPv/8c5599lmsVispKSmq8yCKi4ujQ4cObNq0Keh/vhVuTpLdbqdHjx4sXLjQv8/r9bJw4UIyMzPDWLJTQ5s2bUhNTa1S/3l5eSxdulT1Xw+GYTBmzBhmzZrFp59+Sps2baoc79GjBzabrUp9r1+/nu3bt6u+A8Tr9VJaWqq6DoJ+/fqxevVqVq1a5d/OOecchg8f7n+tOg+egoICNm/eTPPmzYP/5/ukhySLMXPmTMPhcBgzZswwfvrpJ+PWW2814uLijOzs7HAXrUnIz883Vq5caaxcudIAjClTphgrV640tm3bZhiGYTz++ONGXFyc8eGHHxo//PCDccUVVxht2rQxiouLw1zyxuf22283YmNjjUWLFhm7d+/2b0VFRf5zbrvtNqNVq1bGp59+aixbtszIzMw0MjMzw1jqxuv+++83Pv/8c2PLli3GDz/8YNx///2GyWQyFixYYBiG6joUjpwtZRiq80D64x//aCxatMjYsmWLsXjxYqN///5GYmKisWfPHsMwglvXCjcB8txzzxmtWrUy7Ha7ce655xrffPNNuIvUZHz22WcGUG0bMWKEYRi+6eAPPvigkZKSYjgcDqNfv37G+vXrw1voRqqmegaM1157zX9OcXGxcccddxjx8fGGy+UyrrrqKmP37t3hK3Qj9pvf/MZo3bq1YbfbjaSkJKNfv37+YGMYqutQODrcqM4D57rrrjOaN29u2O1247TTTjOuu+46Y9OmTf7jwaxrk2EYxsm3/4iIiIg0DBpzIyIiIk2Kwo2IiIg0KQo3IiIi0qQo3IiIiEiTonAjIiIiTYrCjYiIiDQpCjciIiLSpCjciMgpyWQyMXv27HAXQ0SCQOFGREJu5MiRmEymatsll1wS7qKJSBNgDXcBROTUdMkll/Daa69V2edwOMJUGhFpStRyIyJh4XA4SE1NrbLFx8cDvi6j6dOnM3jwYJxOJ6effjrvvfdeletXr17NxRdfjNPppFmzZtx6660UFBRUOefVV1+la9euOBwOmjdvzpgxY6oc37dvH1dddRUul4v27dvz0Ucf+Y8dPHiQ4cOHk5SUhNPppH379tXCmIg0TAo3ItIgPfjggwwbNozvv/+e4cOHc/3117N27VoACgsLGTRoEPHx8Xz33Xe8++67fPLJJ1XCy/Tp0xk9ejS33norq1ev5qOPPqJdu3ZVPmPixIlce+21/PDDDwwZMoThw4dz4MAB/+f/9NNPzJs3j7Vr1zJ9+nQSExNDVwEiUn8BefymiEgdjBgxwrBYLEZkZGSV7dFHHzUMw/d08ttuu63KNb169TJuv/12wzAM46WXXjLi4+ONgoIC//E5c+YYZrPZyM7ONgzDMFq0aGH89a9/PWYZAOOBBx7wvy8oKDAAY968eYZhGMbQoUONUaNGBeYLi0hIacyNiIRF3759mT59epV9CQkJ/teZmZlVjmVmZrJq1SoA1q5dS0ZGBpGRkf7jvXv3xuv1sn79ekwmE7t27aJfv37HLcOZZ57pfx0ZGUlMTAx79uwB4Pbbb2fYsGGsWLGCgQMHcuWVV3LeeefV67uKSGgp3IhIWERGRlbrJgoUp9NZq/NsNluV9yaTCa/XC8DgwYPZtm0bc+fOJSsri379+jF69GieeuqpgJdXRAJLY25EpEH65ptvqr3v3LkzAJ07d+b777+nsLDQf3zx4sWYzWY6duxIdHQ06enpLFy48KTKkJSUxIgRI3jjjTeYOnUqL7300kndT0RCQy03IhIWpaWlZGdnV9lntVr9g3bfffddzjnnHM4//3zefPNNvv32W/75z38CMHz4cMaPH8+IESOYMGECe/fu5Q9/+AM33XQTKSkpAEyYMIHbbruN5ORkBg8eTH5+PosXL+YPf/hDrcr30EMP0aNHD7p27UppaSn/+9///OFKRBo2hRsRCYv58+fTvHnzKvs6duzIunXrAN9MppkzZ3LHHXfQvHlz3n77bbp06QKAy+Xi448/5q677qJnz564XC6GDRvGlClT/PcaMWIEJSUl/P3vf+fee+8lMTGRa665ptbls9vtjBs3jq1bt+J0OrnggguYOXNmAL65iASbyTAMI9yFEBE5kslkYtasWVx55ZXhLoqINEIacyMiIiJNisKNiIiINCkacyMiDY56y0XkZKjlRkRERJoUhRsRERFpUhRuREREpElRuBEREZEmReFGREREmhSFGxEREWlSFG5ERESkSVG4ERERkSZF4UZERESalP8HLjhVO212zN8AAAAASUVORK5CYII=\n" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "code", + "source": [ + "# Оценка качества работы модели на тестовых данных\n", + "scores = model500.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": "5mDveUNPCyRH", + "outputId": "e39b24d2-b763-4024-d2a9-e293686c81d7" + }, + "execution_count": 270, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "\u001b[1m313/313\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 4ms/step - accuracy: 0.9306 - loss: 0.2398\n", + "Loss on test data: 0.24357788264751434\n", + "Accuracy on test data: 0.9304999709129333\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "# сохранение модели на диск\n", + "model500.save('/content/drive/MyDrive/Colab Notebooks/models/model500in_1hide.keras')" + ], + "metadata": { + "id": "4IEeNu1rCyNj" + }, + "execution_count": 271, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "model10050 = Sequential()\n", + "model10050.add(Dense(units=100,input_dim=num_pixels, activation='sigmoid'))\n", + "model10050.add(Dense(units=50,activation='sigmoid'))\n", + "model10050.add(Dense(units=num_classes, activation='softmax'))\n", + "\n", + "model10050.compile(loss='categorical_crossentropy', optimizer='sgd', metrics=['accuracy'])" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "Ld4hMck_CyKT", + "outputId": "6aea1752-474c-4d4b-cde0-1040b40d1ec5" + }, + "execution_count": 272, + "outputs": [ + { + "output_type": "stream", + "name": "stderr", + "text": [ + "/usr/local/lib/python3.12/dist-packages/keras/src/layers/core/dense.py:93: UserWarning: Do not pass an `input_shape`/`input_dim` argument to a layer. When using Sequential models, prefer using an `Input(shape)` object as the first layer in the model instead.\n", + " super().__init__(activity_regularizer=activity_regularizer, **kwargs)\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "# вывод информации об архитектуре модели\n", + "print(model10050.summary())" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 244 + }, + "id": "GVZLuKvqNZEK", + "outputId": "6307358e-8026-494b-ad55-a48c1e969aed" + }, + "execution_count": 274, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "\u001b[1mModel: \"sequential_17\"\u001b[0m\n" + ], + "text/html": [ + "
Model: \"sequential_17\"\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_33 (\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_34 (\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_35 (\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_33 (Dense)                │ (None, 100)            │        78,500 │\n",
+              "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+              "│ dense_34 (Dense)                │ (None, 50)             │         5,050 │\n",
+              "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+              "│ dense_35 (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,060\u001b[0m (328.36 KB)\n" + ], + "text/html": [ + "
 Total params: 84,060 (328.36 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": "stream", + "name": "stdout", + "text": [ + "None\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "# Обучаем модель\n", + "H = model10050.fit(X_train, y_train, validation_split=0.1, epochs=50)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "UP0suqUbNY9R", + "outputId": "3850977d-6f8d-402b-a3d8-908201cd94ac" + }, + "execution_count": 275, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Epoch 1/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 5ms/step - accuracy: 0.2384 - loss: 2.2959 - val_accuracy: 0.5560 - val_loss: 2.0638\n", + "Epoch 2/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 4ms/step - accuracy: 0.5748 - loss: 1.9401 - val_accuracy: 0.7018 - val_loss: 1.4982\n", + "Epoch 3/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m8s\u001b[0m 5ms/step - accuracy: 0.7110 - loss: 1.3739 - val_accuracy: 0.7747 - val_loss: 1.0420\n", + "Epoch 4/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 5ms/step - accuracy: 0.7843 - loss: 0.9732 - val_accuracy: 0.8223 - val_loss: 0.7836\n", + "Epoch 5/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m8s\u001b[0m 4ms/step - accuracy: 0.8227 - loss: 0.7602 - val_accuracy: 0.8523 - val_loss: 0.6359\n", + "Epoch 6/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 4ms/step - accuracy: 0.8473 - loss: 0.6283 - val_accuracy: 0.8685 - val_loss: 0.5466\n", + "Epoch 7/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m12s\u001b[0m 4ms/step - accuracy: 0.8634 - loss: 0.5465 - val_accuracy: 0.8808 - val_loss: 0.4867\n", + "Epoch 8/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 4ms/step - accuracy: 0.8749 - loss: 0.4876 - val_accuracy: 0.8883 - val_loss: 0.4441\n", + "Epoch 9/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 4ms/step - accuracy: 0.8827 - loss: 0.4497 - val_accuracy: 0.8933 - val_loss: 0.4141\n", + "Epoch 10/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 4ms/step - accuracy: 0.8875 - loss: 0.4238 - val_accuracy: 0.8992 - val_loss: 0.3910\n", + "Epoch 11/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m12s\u001b[0m 5ms/step - accuracy: 0.8899 - loss: 0.4074 - val_accuracy: 0.9008 - val_loss: 0.3727\n", + "Epoch 12/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 5ms/step - accuracy: 0.8979 - loss: 0.3808 - val_accuracy: 0.9042 - val_loss: 0.3597\n", + "Epoch 13/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 6ms/step - accuracy: 0.8993 - loss: 0.3650 - val_accuracy: 0.9060 - val_loss: 0.3473\n", + "Epoch 14/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 5ms/step - accuracy: 0.9003 - loss: 0.3595 - val_accuracy: 0.9080 - val_loss: 0.3374\n", + "Epoch 15/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 6ms/step - accuracy: 0.9049 - loss: 0.3406 - val_accuracy: 0.9102 - val_loss: 0.3283\n", + "Epoch 16/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 5ms/step - accuracy: 0.9066 - loss: 0.3332 - val_accuracy: 0.9107 - val_loss: 0.3209\n", + "Epoch 17/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 6ms/step - accuracy: 0.9080 - loss: 0.3256 - val_accuracy: 0.9122 - val_loss: 0.3136\n", + "Epoch 18/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 3ms/step - accuracy: 0.9093 - loss: 0.3184 - val_accuracy: 0.9148 - val_loss: 0.3081\n", + "Epoch 19/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 3ms/step - accuracy: 0.9105 - loss: 0.3125 - val_accuracy: 0.9155 - val_loss: 0.3027\n", + "Epoch 20/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 6ms/step - accuracy: 0.9121 - loss: 0.3116 - val_accuracy: 0.9173 - val_loss: 0.2965\n", + "Epoch 21/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m17s\u001b[0m 4ms/step - accuracy: 0.9131 - loss: 0.3009 - val_accuracy: 0.9192 - val_loss: 0.2915\n", + "Epoch 22/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 5ms/step - accuracy: 0.9155 - loss: 0.2948 - val_accuracy: 0.9217 - val_loss: 0.2863\n", + "Epoch 23/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 4ms/step - accuracy: 0.9193 - loss: 0.2840 - val_accuracy: 0.9212 - val_loss: 0.2833\n", + "Epoch 24/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m8s\u001b[0m 4ms/step - accuracy: 0.9180 - loss: 0.2790 - val_accuracy: 0.9222 - val_loss: 0.2775\n", + "Epoch 25/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 4ms/step - accuracy: 0.9188 - loss: 0.2795 - val_accuracy: 0.9228 - val_loss: 0.2740\n", + "Epoch 26/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 3ms/step - accuracy: 0.9223 - loss: 0.2713 - val_accuracy: 0.9248 - val_loss: 0.2698\n", + "Epoch 27/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 4ms/step - accuracy: 0.9237 - loss: 0.2628 - val_accuracy: 0.9245 - val_loss: 0.2655\n", + "Epoch 28/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m12s\u001b[0m 5ms/step - accuracy: 0.9240 - loss: 0.2619 - val_accuracy: 0.9247 - val_loss: 0.2622\n", + "Epoch 29/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 4ms/step - accuracy: 0.9276 - loss: 0.2541 - val_accuracy: 0.9268 - val_loss: 0.2589\n", + "Epoch 30/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 3ms/step - accuracy: 0.9242 - loss: 0.2610 - val_accuracy: 0.9275 - val_loss: 0.2554\n", + "Epoch 31/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m8s\u001b[0m 5ms/step - accuracy: 0.9271 - loss: 0.2498 - val_accuracy: 0.9270 - val_loss: 0.2531\n", + "Epoch 32/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 4ms/step - accuracy: 0.9278 - loss: 0.2482 - val_accuracy: 0.9287 - val_loss: 0.2493\n", + "Epoch 33/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 4ms/step - accuracy: 0.9251 - loss: 0.2526 - val_accuracy: 0.9310 - val_loss: 0.2450\n", + "Epoch 34/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m8s\u001b[0m 5ms/step - accuracy: 0.9313 - loss: 0.2341 - val_accuracy: 0.9323 - val_loss: 0.2416\n", + "Epoch 35/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 4ms/step - accuracy: 0.9307 - loss: 0.2386 - val_accuracy: 0.9337 - val_loss: 0.2391\n", + "Epoch 36/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 5ms/step - accuracy: 0.9329 - loss: 0.2309 - val_accuracy: 0.9337 - val_loss: 0.2361\n", + "Epoch 37/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 4ms/step - accuracy: 0.9337 - loss: 0.2277 - val_accuracy: 0.9347 - val_loss: 0.2334\n", + "Epoch 38/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m8s\u001b[0m 5ms/step - accuracy: 0.9324 - loss: 0.2281 - val_accuracy: 0.9357 - val_loss: 0.2303\n", + "Epoch 39/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 4ms/step - accuracy: 0.9348 - loss: 0.2268 - val_accuracy: 0.9368 - val_loss: 0.2280\n", + "Epoch 40/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m8s\u001b[0m 5ms/step - accuracy: 0.9383 - loss: 0.2162 - val_accuracy: 0.9370 - val_loss: 0.2251\n", + "Epoch 41/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m8s\u001b[0m 5ms/step - accuracy: 0.9353 - loss: 0.2242 - val_accuracy: 0.9362 - val_loss: 0.2226\n", + "Epoch 42/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 4ms/step - accuracy: 0.9369 - loss: 0.2170 - val_accuracy: 0.9373 - val_loss: 0.2200\n", + "Epoch 43/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m8s\u001b[0m 5ms/step - accuracy: 0.9386 - loss: 0.2110 - val_accuracy: 0.9382 - val_loss: 0.2172\n", + "Epoch 44/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 4ms/step - accuracy: 0.9395 - loss: 0.2069 - val_accuracy: 0.9378 - val_loss: 0.2147\n", + "Epoch 45/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 4ms/step - accuracy: 0.9405 - loss: 0.2047 - val_accuracy: 0.9403 - val_loss: 0.2125\n", + "Epoch 46/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m12s\u001b[0m 5ms/step - accuracy: 0.9417 - loss: 0.2008 - val_accuracy: 0.9395 - val_loss: 0.2098\n", + "Epoch 47/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 4ms/step - accuracy: 0.9425 - loss: 0.1975 - val_accuracy: 0.9413 - val_loss: 0.2077\n", + "Epoch 48/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 4ms/step - accuracy: 0.9433 - loss: 0.1969 - val_accuracy: 0.9422 - val_loss: 0.2062\n", + "Epoch 49/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 4ms/step - accuracy: 0.9426 - loss: 0.1931 - val_accuracy: 0.9427 - val_loss: 0.2029\n", + "Epoch 50/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 4ms/step - accuracy: 0.9451 - loss: 0.1892 - val_accuracy: 0.9420 - val_loss: 0.2025\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "# вывод графика ошибки по эпохам\n", + "plt.plot(H.history['loss'])\n", + "plt.plot(H.history['val_loss'])\n", + "plt.grid()\n", + "plt.xlabel('Epochs')\n", + "plt.ylabel('loss')\n", + "plt.legend(['train_loss', 'val_loss'])\n", + "plt.title('Loss by epochs')\n", + "plt.show()" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 472 + }, + "id": "k-DhnF0SNY3K", + "outputId": "b6e1a567-f30b-4a12-d065-c13e2aa897de" + }, + "execution_count": 276, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkAAAAHHCAYAAABXx+fLAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAcylJREFUeJzt3Xd4VFXixvHvzGQyk0kvpEHoHaWIygZcBem4rNgLK2VdXRVUllVX/O1SLIuiYsW2FnRXxLWArgoS0KAiojQFBKTXFFp6Mplk7u+PSUZCEgghmQnJ+3me+8zMvWfunDmJ5PWcc881GYZhICIiItKEmP1dARERERFfUwASERGRJkcBSERERJocBSARERFpchSAREREpMlRABIREZEmRwFIREREmhwFIBEREWlyFIBERESkyVEAEpEGb9y4cYSEhPi7Gn5nMpmYOHGiv6sh0igoAIk0YXPnzsVkMrF69Wp/V0VExKcUgERERKTJUQASERGRJkcBSEROad26dQwfPpywsDBCQkIYOHAg3333XYUyLpeLGTNm0KFDB+x2O9HR0Vx00UWkpKR4y6SnpzN+/HhatGiBzWYjISGByy+/nN27d9eoHjt37mTo0KEEBweTmJjIgw8+iGEYABiGQevWrbn88ssrva+oqIjw8HD+/Oc/n/Iz/vOf/9C7d2+CgoKIiori+uuvZ9++fRXK9O/fn3POOYc1a9bQt29fgoKCaNOmDS+99FKl82VmZnLzzTcTFxeH3W6nR48evPnmm5XKud1unnnmGc4991zsdjvNmjVj2LBhVQ5PLly4kHPOOQebzUa3bt1YvHhxheO5ublMmjSJ1q1bY7PZiI2NZfDgwaxdu/aU31+kqVAAEpGT2rRpE7/97W/58ccfue+++/jHP/7Brl276N+/P6tWrfKWmz59OjNmzGDAgAE8//zz/N///R8tW7as8Ef3qquuYsGCBYwfP54XXniBu+66i9zcXPbu3XvKepSWljJs2DDi4uKYNWsWvXv3Ztq0aUybNg3wTBD+wx/+wKJFizh69GiF9/7vf/8jJyeHP/zhDyf9jEceeYQxY8bQoUMHZs+ezaRJk1i2bBkXX3wxWVlZFcoeO3aMESNG0Lt3b2bNmkWLFi24/fbbef31171lCgsL6d+/P//+978ZPXo0jz/+OOHh4YwbN45nnnmmwvluvvlmJk2aRFJSEo899hj3338/dru9UtD85ptvuOOOO7j++uuZNWsWRUVFXHXVVRw5csRb5rbbbuPFF1/kqquu4oUXXuCee+4hKCiIzZs3n7KdRZoMQ0SarDfeeMMAjB9++KHaMqNGjTICAwONHTt2ePcdPHjQCA0NNS6++GLvvh49ehiXXXZZtec5duyYARiPP/74addz7NixBmDceeed3n1ut9u47LLLjMDAQOPQoUOGYRjG1q1bDcB48cUXK7z/97//vdG6dWvD7XZX+xm7d+82LBaL8cgjj1TYv2HDBiMgIKDC/ksuucQAjCeffNK7z+l0Gj179jRiY2ON4uJiwzAM4+mnnzYA4z//+Y+3XHFxsZGcnGyEhIQYOTk5hmEYxhdffGEAxl133VWpXsfXGTACAwON7du3e/f9+OOPBmA899xz3n3h4eHGhAkTqv2uImIY6gESkWqVlpayZMkSRo0aRdu2bb37ExISuPHGG/nmm2/IyckBICIigk2bNrFt27YqzxUUFERgYCCpqakcO3asVvU5/hLw8kvCi4uLWbp0KQAdO3akT58+vP32295yR48eZdGiRYwePRqTyVTtuT/88EPcbjfXXnsthw8f9m7x8fF06NCBL7/8skL5gICACkNqgYGB/PnPfyYzM5M1a9YA8NlnnxEfH88NN9zgLWe1WrnrrrvIy8tj+fLlAHzwwQeYTCZvb9bxTqzzoEGDaNeunfd19+7dCQsLY+fOnd59ERERrFq1ioMHD1b7fUWaOgUgEanWoUOHKCgooFOnTpWOdenSBbfb7Z0f8+CDD5KVlUXHjh0599xzuffee/npp5+85W02G4899hiLFi0iLi6Oiy++mFmzZpGenl6jupjN5gohDDyBB6gwh2jMmDGsWLGCPXv2APDee+/hcrm46aabTnr+bdu2YRgGHTp0oFmzZhW2zZs3k5mZWaF8YmIiwcHBJ63Pnj176NChA2ZzxX9qu3Tp4j0OsGPHDhITE4mKijpVM9CyZctK+yIjIyuEylmzZrFx40aSkpK48MILmT59eoWAJCIKQCJSRy6++GJ27NjB66+/zjnnnMOrr77Keeedx6uvvuotM2nSJH755RdmzpyJ3W7nH//4B126dGHdunV1Vo/rr78eq9Xq7QX6z3/+w/nnn19liDue2+3GZDKxePFiUlJSKm0vv/xyndXxTFgslir3G2WTwQGuvfZadu7cyXPPPUdiYiKPP/443bp1Y9GiRb6qpkiDpwAkItVq1qwZDoeDrVu3Vjq2ZcsWzGYzSUlJ3n1RUVGMHz+ed955h3379tG9e3emT59e4X3t2rXjr3/9K0uWLGHjxo0UFxfz5JNPnrIubre7Ui/GL7/8AkDr1q0r1OGyyy7j7bffZs+ePaxYseKUvT/l9TIMgzZt2jBo0KBK229+85sK5Q8ePEh+fv5J69OqVSu2bduG2+2uUG7Lli3e4+WfffDgwUqTt89EQkICd9xxBwsXLmTXrl1ER0fzyCOP1Nn5Rc52CkAiUi2LxcKQIUP46KOPKgwzZWRkMG/ePC666CLCwsIAKlyFBBASEkL79u1xOp0AFBQUUFRUVKFMu3btCA0N9ZY5leeff9773DAMnn/+eaxWKwMHDqxQ7qabbuLnn3/m3nvvxWKxcP3115/y3FdeeSUWi4UZM2ZU6E0p/6wTv19JSUmFXqHi4mJefvllmjVrRu/evQEYMWIE6enpvPvuuxXe99xzzxESEsIll1wCeK6OMwyDGTNmVKrXiXU5ldLSUrKzsyvsi42NJTExscbtLNIUBPi7AiLif6+//nqltWQA7r77bh5++GFSUlK46KKLuOOOOwgICODll1/G6XQya9Ysb9muXbvSv39/evfuTVRUFKtXr+b999/3Tlz+5ZdfGDhwINdeey1du3YlICCABQsWkJGRUaOAYrfbWbx4MWPHjqVPnz4sWrSITz/9lAceeIBmzZpVKHvZZZcRHR3Ne++9x/Dhw4mNjT3l+du1a8fDDz/MlClT2L17N6NGjSI0NJRdu3axYMECbr31Vu655x5v+cTERB577DF2795Nx44deffdd1m/fj2vvPIKVqsVgFtvvZWXX36ZcePGsWbNGlq3bs3777/PihUrePrppwkNDQVgwIAB3HTTTTz77LNs27aNYcOG4Xa7+frrrxkwYMBp3f8rNzeXFi1acPXVV9OjRw9CQkJYunQpP/zwQ4162kSaDP9dgCYi/lZ+GXx12759+wzDMIy1a9caQ4cONUJCQgyHw2EMGDDA+Pbbbyuc6+GHHzYuvPBCIyIiwggKCjI6d+5sPPLII95Lwg8fPmxMmDDB6Ny5sxEcHGyEh4cbffr0Mf773/+esp5jx441goODjR07dhhDhgwxHA6HERcXZ0ybNs0oLS2t8j133HGHARjz5s07rTb54IMPjIsuusgIDg42goODjc6dOxsTJkwwtm7d6i1zySWXGN26dTNWr15tJCcnG3a73WjVqpXx/PPPVzpfRkaGMX78eCMmJsYIDAw0zj33XOONN96oVK6kpMR4/PHHjc6dOxuBgYFGs2bNjOHDhxtr1qzxlgGqvLy9VatWxtixYw3D8FyOf++99xo9evQwQkNDjeDgYKNHjx7GCy+8cFrtINLYmQzjNPtXRUTOAn/5y1947bXXSE9Px+Fw1Om5+/fvz+HDh9m4cWOdnldEfEdzgESk0SkqKuI///kPV111VZ2HHxFpHDQHSEQajczMTJYuXcr777/PkSNHuPvuu/1dJRFpoBSARKTR+Pnnnxk9ejSxsbE8++yz9OzZ099VEpEGSnOAREREpMnRHCARERFpchSAREREpMnRHKAquN1uDh48SGho6EnvHi0iIiINh2EY5ObmkpiYWOkmxCdSAKrCwYMHK9zfSERERM4e+/bto0WLFictowBUhfLl6fft2+e9z1FdcblcLFmyhCFDhniXy5f6o/b2LbW3b6m9fUvt7Vu1ae+cnBySkpK8f8dPRgGoCuXDXmFhYfUSgBwOB2FhYfoPyAfU3r6l9vYttbdvqb1960zauybTVzQJWkRERJocBSARERFpchSAREREpMnx6xygmTNn8uGHH7JlyxaCgoLo27cvjz32GJ06dar2Pf/617946623vHdh7t27N//85z+58MILvWXGjRvHm2++WeF9Q4cOZfHixfXzRURE5KxQWlqKy+Wq1XtdLhcBAQEUFRVRWlpaxzWTE1XV3larFYvFUifn92sAWr58ORMmTOCCCy6gpKSEBx54gCFDhvDzzz8THBxc5XtSU1O54YYb6Nu3L3a7nccee4whQ4awadMmmjdv7i03bNgw3njjDe9rm81W799HREQaJsMwSE9PJysr64zOER8fz759+7RGnA9U194RERHEx8ef8c/ArwHoxB6ZuXPnEhsby5o1a7j44ourfM/bb79d4fWrr77KBx98wLJlyxgzZox3v81mIz4+vu4rLSIiZ53y8BMbG4vD4ajVH0+3201eXh4hISGnXGRPztyJ7W0YBgUFBWRmZgKQkJBwRudvUJfBZ2dnAxAVFVXj9xQUFOByuSq9JzU1ldjYWCIjI7n00kt5+OGHiY6OrtP6iohIw1daWuoNP2fyd8DtdlNcXIzdblcA8oGq2jsoKAiAzMxMYmNjz2g4rMEEILfbzaRJk+jXrx/nnHNOjd/3t7/9jcTERAYNGuTdN2zYMK688kratGnDjh07eOCBBxg+fDgrV66ssrGcTidOp9P7OicnB/CMP9Z2rLg65eer6/NK1dTevqX29i21d804nU4Mw8But+N2u2t9HsMwvI9nch6pmera2263YxgGhYWFlaa3nM5/Cyaj/BP87Pbbb2fRokV88803p1y+utyjjz7KrFmzSE1NpXv37tWW27lzJ+3atWPp0qUMHDiw0vHp06czY8aMSvvnzZuHw+Go+ZcQEZEGJyAggPj4eJKSkggMDPR3deQMFRcXs2/fPtLT0ykpKalwrKCggBtvvJHs7OxTLmTcIALQxIkT+eijj/jqq69o06ZNjd7zxBNP8PDDD7N06VLOP//8U5Zv1qwZDz/8MH/+858rHauqBygpKYnDhw/Xy0rQKSkpDB48WCuJ+oDa27fU3r6l9q6ZoqIi9u3bR+vWrbHb7bU+T/mNNnWjbN+orr2LiorYvXs3SUlJlX6eOTk5xMTE1CgA+XUIzDAM7rzzThYsWEBqamqNw8+sWbN45JFH+Pzzz2sUfvbv38+RI0eqnTBls9mqvErMarXW2z8q9XluqUzt7Vtqb99Se59caWkpJpMJs9l8RnN3yodhys91tmndujWTJk1i0qRJZ3yu1NRUBgwYwLFjx4iIiDjj81WluvY2m82YTKYqf+9P578DvwagCRMmMG/ePD766CNCQ0NJT08HIDw83DvRacyYMTRv3pyZM2cC8NhjjzF16lTmzZtH69atve8JCQkhJCSEvLw8ZsyYwVVXXUV8fDw7duzgvvvuo3379gwdOtQ/X1RERKQW+vfvT8+ePXn66afP+Fw//PBDtUvMNEV+jbAvvvgi2dnZ9O/fn4SEBO/27rvvesvs3buXtLS0Cu8pLi7m6quvrvCeJ554AgCLxcJPP/3E73//ezp27MjNN99M7969+frrr/2+FlCp2+BAViFZzlOXFRERORXDMCrNg6lOs2bNNK/1OH4NQIZhVLmNGzfOWyY1NZW5c+d6X+/evbvK90yfPh3wXCL3+eefk5mZSXFxMbt37+aVV14hLi7Ot1+uCrM+30L/J79m2cGzr+tURER8a9y4cSxfvpxnnnkGk8mEyWRi7ty5mEwmFi1aRO/evbHZbHzzzTfs2LGDyy+/nLi4OEJCQrjgggtYunRphfO1bt26Qk+SyWTi1Vdf5YorrsDhcNChQwc+/vjjWtf3gw8+oFu3bthsNlq3bs2TTz5Z4fgLL7xAhw4dsNvtxMXFcfXVV3uPvf/++5x77rkEBQURHR3NoEGDyM/Pr3VdaqLBXAbfFLSM8iTvI+oBEhHxK8MwKHSd3u0s3G43hcWlBBSX1HoOUJDVUuMJ1M888wy//PIL55xzDg8++CAAmzZtAuD+++/niSeeoG3btkRGRrJv3z5GjBjBI488gs1m46233mLkyJFs3bqVli1bVvsZM2bMYNasWTz++OM899xzjB49mj179pzWenwAa9as4dprr2X69Olcd911fPvtt9xxxx1ER0czbtw4Vq9ezV133cW///1v+vbty9GjR/n6668BSEtL44YbbmDWrFlcccUV5Obm8vXXX1Pf12gpAPlQeQA6XKSrB0RE/KnQVUrXqZ/7/HN/fnAojsCa/ekNDw8nMDAQh8PhvbPBli1bAHjwwQcZPHiwt2xUVBQ9evTwvn7ooYdYsGABH3/8MRMnTqz2M8aNG8cNN9wAwD//+U+effZZvv/+e4YNG3Za32v27NkMHDiQf/zjHwB07NiRn3/+mccff5xx48axd+9egoOD+d3vfkdoaCitWrWiV69egCcAlZSUcOWVV9KqVSsAzj33XNxut3ddvvqgsRgfKg9AR4vA7fb76gMiInKWOvEK6Ly8PO655x66dOlCREQEISEhbN68mb179570PMevoRccHExYWJj3VhOnY/PmzfTr16/Cvn79+rFt2zZKS0sZPHgwrVq1om3bttx00028/fbbFBQUANCjRw8GDhzIueeeyzXXXMO//vUvjh07dtp1OF3qAfKhxIggLGYTLjccynPSwqYFuURE/CHIauHnB0/vymC3201uTi6hYaFnNARWF068muuee+4hJSWFJ554gvbt2xMUFMTVV19NcXHxSc9z4mXjJpOpXla5Dg0NZe3ataSmprJkyRKmTp3K9OnT+eGHH4iIiCAlJYVvv/2WJUuW8Nxzz/F///d/rFy5sl5vYaUeIB+yWswkhHsWbdp3rNDPtRERabpMJhOOwIDT3oICLbV6X/l2ugsoBgYGUlp66rlKK1asYNy4cVxxxRWce+65xMfHs3v37lq2zunr0qULK1asqFSnjh07em9BFRAQwKBBg5g1axY//fQTu3fv5osvvgA8P49+/foxY8YM1q1bR2BgIAsXLqzXOqsHyMdaRgax/1gh+44WkuzvyoiISIPWunVrVq1axe7duwkJCam2d6ZDhw58+OGHjBw5EpPJxD/+8Q+f3q/sr3/9KxdccAEPPfQQ1113HStXruT555/nhRdeAOCTTz5h586dXHzxxURGRvLZZ5/hdrvp1KkTq1atYtmyZQwZMoTY2FhWrVrFoUOH6Ny5c73WWT1APpYU5Vngce/RAj/XREREGrp77rkHi8VC165dadasWbVzembPnk1kZCR9+/Zl5MiRDB06lPPOO89n9TzvvPP473//y/z58znnnHOYOnUqDz74oHdZm4iICD788EMuvfRSunTpwksvvcQ777xDt27dCAsL46uvvmLEiBF07NiRv//97zz55JMMHz68XuusHiAfS4r0TITWEJiIiJxKx44dWblyZYV9x6+VV65169be4aRyEyZMqPD6xCGxqi4zz8rKqlG9+vfvX+n9V111FVdddVWV5S+66CJSU1OrPNalSxcWL15caX9992CpB8jHWpb1ACkAiYiI+I8CkI95e4A0BCYiIg3Ubbfd5r3H5onbbbfd5u/q1QkNgflY+RygQ3nFFBSX1HhBLBEREV958MEHueeee6o8FhYW5uPa1A/99fWx8CArQRaDwlIT+44W0ik+1N9VEhERqSA2NpbY2Fh/V6NeaQjMD6I9SwHpSjARERE/UQDygxi7Z+a8ApCIiIh/KAD5QbTN86iJ0CIiIv6hAOQH5T1Ae47k+7kmIiIiTZMCkB+U9wBpCExERMQ/FID8oLwHaN+xQtzuyitxioiI1IXWrVvz9NNP16isyWSq9xuQNiQKQH4QYQOL2URxiZvMXKe/qyMiItLkKAD5gcUEieGea+E1DCYiIuJ7CkB+Ur4itCZCi4hIVV555RUSExMr3RT08ssv549//CM7duzg8ssvJy4ujpCQEC644AKWLl1aZ5+/YcMGLr30UoKCgoiOjubWW28lLy/Pezw1NZULL7yQ4OBgIiIi6NevH3v27AHgxx9/ZMCAAYSGhhIWFkbv3r1ZvXp1ndWtLigA+YnuCSYi4keGAcX5p7+5Cmr3vvKtijuwV+eaa67hyJEjfPnll959R48eZfHixYwePZq8vDxGjBjB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7Mj27durLWOz2bDZbJX2W63WevslP61zh8WCNRhc+VjzMyCmPR3iQ2FjOrsOF+o/xBqoz5+lVKb29i21t2+pvX3rdNr7dH4utboKbM6cOSQnJ3Po0CE++OADoqOjAVizZg033HBDbU5ZY++88w7jx4/nnXfe8U7CPpm8vDx27NhBQkJCvdarXplMlW6J0T42BIDth/L8VSsREZGzVq16gCIiInj++ecr7a9qHs3J5OXlVeiZ2bVrF+vXrycqKoqWLVsyZcoUDhw4wFtvvQV4hr3Gjh3LM888Q58+fUhPTwcgKCiI8PBwAO655x5GjhxJq1atOHjwINOmTcNisdR7MKt34UlwaIv3SjBvAMrMwzAMTCZdCSYiIlJTteoBWrx4cYW1debMmUPPnj258cYbOXbsWI3Ps3r1anr16uW9hH3y5Mn06tWLqVOnApCWlsbevb/eBPSVV16hpKSECRMmkJCQ4N3uvvtub5n9+/dzww030KlTJ6699lqio6P57rvvaNasWW2+asMRUXE16DYxwZhNkFtUwiEtiCgiInJaatUDdO+99/LYY48BsGHDBv76178yefJkvvzySyZPnswbb7xRo/P079+fk12ENnfu3AqvU1NTT3nO+fPn1+izzzrhFdcCsgVYaBnlYPeRArZn5nnvEC8iIiKnVqseoF27dtG1a1cAPvjgA373u9/xz3/+kzlz5rBo0aI6raCU8d4O49cesfJhsB2aByQiInJaahWAAgMDKSgoAGDp0qUMGTIEgKioqNO6BE1Owwk3RAVo1+zXeUAiIiJSc7UaArvooouYPHky/fr14/vvv+fdd98F4JdffqFFixZ1WkEpUz4HKOcglJaAJYB2uhJMRESkVmrVA/T8888TEBDA+++/z4svvkjz5s0BzyrMw4YNq9MKSpmQeDBbwSiF3INAxSvBREREpOZq1QPUsmVLPvnkk0r7n3rqqTOukFTDbIbw5nBst2cidERLbwDKyHGSU+QizK6FuURERGqiVgEIoLS0lIULF7J582YAunXrxu9//3ssFkudVU5OENHSE4DK5gGF2a3EhtrIzHWyIzOPXi0j/Vs/ERGRs0StAtD27dsZMWIEBw4coFOnTgDMnDmTpKQkPv30U9q1a1enlZQy4eVXgv06Ebp9bAiZuU62KwCJiIjUWK3mAN111120a9eOffv2sXbtWtau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GjSIbdu2+aeyjcDMmTO54IILCA0NJTY2llGjRrF169YKZYqKipgwYQLR0dGEhIRw1VVXkZGR4acan91efPFFunfv7l0MLjk5mUWLFnmPq63r16OPPorJZGLSpEnefWrzujN9+nRMJlOFrXPnzt7j9dnWCkA+8u677zJ58mSmTZvG2rVr6dGjB0OHDiUzM9PfVTvr5efn06NHD+bMmVPl8VmzZvHss8/y0ksvsWrVKoKDgxk6dChFRUU+rmnjsHz5ciZMmMB3331HSkoKLpeLIUOGkJ+f7y3zl7/8hf/973+89957LF++nIMHD3LllVf6sdZnrxYtWvDoo4+yZs0aVq9ezaWXXsrll1/Opk2bALV1ffrhhx94+eWX6d69e4X9avO61a1bN9LS0rzbN9984z1Wr21tiE9ceOGFxoQJE7yvS0tLjcTERGPmzJl+rFXjAxgLFizwvna73UZ8fLzx+OOPe/dlZWUZNpvNeOedd/xQw8YnMzPTAIzly5cbhuFpX6vVarz33nveMps3bzYAY+XKlf6qZqMSGRlpvPrqq2rrepSbm2t06NDBSElJMS655BLj7rvvNgxDv991bdq0aUaPHj2qPFbfba0eIB8oLi5mzZo1DBo0yLvPbDYzaNAgVq5c6ceaNX67du0iPT29QtuHh4fTp08ftX0dyc7OBiAqKgqANWvW4HK5KrR5586dadmypdr8DJWWljJ//nzy8/NJTk5WW9ejCRMmcNlll1VoW9Dvd33Ytm0biYmJtG3bltGjR7N3716g/ttaN0P1gcOHD1NaWkpcXFyF/XFxcWzZssVPtWoa0tPTAaps+/JjUntut5tJkybRr18/zjnnHMDT5oGBgURERFQoqzavvQ0bNpCcnExRUREhISEsWLCArl27sn79erV1PZg/fz5r167lhx9+qHRMv991q0+fPsydO5dOnTqRlpbGjBkz+O1vf8vGjRvrva0VgESk1iZMmMDGjRsrjNlL3evUqRPr168nOzub999/n7Fjx7J8+XJ/V6tR2rdvH3fffTcpKSnY7XZ/V6fRGz58uPd59+7d6dOnD61ateK///0vQUFB9frZGgLzgZiYGCwWS6WZ6xkZGcTHx/upVk1Defuq7evexIkT+eSTT/jyyy9p0aKFd398fDzFxcVkZWVVKK82r73AwEDat29P7969mTlzJj169OCZZ55RW9eDNWvWkJmZyXnnnUdAQAABAQEsX76cZ599loCAAOLi4tTm9SgiIoKOHTuyffv2ev/9VgDygcDAQHr37s2yZcu8+9xuN8uWLSM5OdmPNWv82rRpQ3x8fIW2z8nJYdWqVWr7WjIMg4kTJ7JgwQK++OIL2rRpU+F47969sVqtFdp869at7N27V21eR9xuN06nU21dDwYOHMiGDRtYv369dzv//PMZPXq097navP7k5eWxY8cOEhIS6v/3+4ynUUuNzJ8/37DZbMbcuXONn3/+2bj11luNiIgIIz093d9VO+vl5uYa69atM9atW2cAxuzZs41169YZe/bsMQzDMB599FEjIiLC+Oijj4yffvrJuPzyy402bdoYhYWFfq752en22283wsPDjdTUVCMtLc27FRQUeMvcdtttRsuWLY0vvvjCWL16tZGcnGwkJyf7sdZnr/vvv99Yvny5sWvXLuOnn34y7r//fsNkMhlLliwxDENt7QvHXwVmGGrzuvTXv/7VSE1NNXbt2mWsWLHCGDRokBETE2NkZmYahlG/ba0A5EPPPfec0bJlSyMwMNC48MILje+++87fVWoUvvzySwOotI0dO9YwDM+l8P/4xz+MuLg4w2azGQMHDjS2bt3q30qfxapqa8B44403vGUKCwuNO+64w4iMjDQcDodxxRVXGGlpaf6r9Fnsj3/8o9GqVSsjMDDQaNasmTFw4EBv+DEMtbUvnBiA1OZ157rrrjMSEhKMwMBAo3nz5sZ1111nbN++3Xu8PtvaZBiGceb9SCIiIiJnD80BEhERkSZHAUhERESaHAUgERERaXIUgERERKTJUQASERGRJkcBSERERJocBSARERFpchSARESqYTKZWLhwob+rISL1QAFIRBqkcePGYTKZKm3Dhg3zd9VEpBEI8HcFRESqM2zYMN54440K+2w2m59qIyKNiXqARKTBstlsxMfHV9giIyMBz/DUiy++yPDhwwkKCqJt27a8//77Fd6/YcMGLr30UoKCgoiOjubWW28lLy+vQpnXX3+dbt26YbPZSEhIYOLEiRWOHz58mCuuuAKHw0GHDh34+OOPvceOHTvG6NGjadasGUFBQXTo0KFSYBORhkkBSETOWv/4xz+46qqr+PHHHxk9ejTXX389mzdvBiA/P5+hQ4cSGRnJDz/8wHvvvcfSpUsrBJwXX3yRCRMmcOutt7JhwwY+/vhj2rdvX+EzZsyYwbXXXstPP/3EiBEjGD16NEePHvV+/s8//8yiRYvYvHkzL774IjExMb5rABGpvTq5paqISB0bO3asYbFYjODg4ArbI488YhiG5670t912W4X39OnTx7j99tsNwzCMV155xYiMjDTy8vK8xz/99FPDbDYb6enphmEYRmJiovF///d/1dYBMP7+9797X+fl5RmAsWjRIsMwDGPkyJHG+PHj6+YLi4hPaQ6QiDRYAwYM4MUXX6ywLyoqyvs8OTm5wrHk5GTWr18PwObNm+nRowfBwcHe4/369cPtdrN161ZMJhMHDx5k4MCBJ61D9+7dvc+Dg4MJCwsjMzMTgNtvv52rrrqKtWvXMmTIEEaNGkXfvn1r9V1FxLcUgESkwQoODq40JFVXgoKCalTOarVWeG0ymXC73QAMHz6cPXv28Nlnn5GSksLAgQOZMGECTzzxRJ3XV0TqluYAichZ67vvvqv0ukuXLgB06dKFH3/8kfz8fO/xFStWYDab6dSpE6GhobRu3Zply5adUR2aNWvG2LFj+c9//sPTTz/NK6+8ckbnExHfUA+QiDRYTqeT9PT0CvsCAgK8E43fe+89zj//fC666CLefvttvv/+e1577TUARo8ezbRp0xg7dizTp0/n0KFD3Hnnndx0003ExcUBMH36dG677TZiY2MZPnw4ubm5rFixgjvvvLNG9Zs6dSq9e/emW7duOJ1OPvnkE28AE5GGTQFIRBqsxYsXk5CQUGFfp06d2LJlC+C5Qmv+/PnccccdJCQk8M4779C1a1cAHA4Hn3/+OXfffTcXXHABDoeDq666itmzZ3vPNXbsWIqKinjqqae45557iImJ4eqrr65x/QIDA5kyZQq7d+8mKCiI3/72t8yfP78OvrmI1DeTYRiGvyshInK6TCYTCxYsYNSoUf6uioichTQHSERERJocBSARERFpcjQHSETOShq9F5EzoR4gERERaXIUgERERKTJUQASERGRJkcBSERERJocBSARERFpchSAREREpMlRABIREZEmRwFIREREmhwFIBEREWly/h+Rloy8SQRWAAAAAABJRU5ErkJggg==\n" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "code", + "source": [ + "# Оценка качества работы модели на тестовых данных\n", + "scores = model10050.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": "-7E0BUrMNYx9", + "outputId": "0870dfee-5fc8-43f0-8e78-333300e022ce" + }, + "execution_count": 277, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "\u001b[1m313/313\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 4ms/step - accuracy: 0.9439 - loss: 0.1962\n", + "Loss on test data: 0.1993969976902008\n", + "Accuracy on test data: 0.9438999891281128\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "# сохранение модели на диск\n", + "model10050.save('/content/drive/MyDrive/Colab Notebooks/models/model100in_1hide_50in_2hide.keras')" + ], + "metadata": { + "id": "yu11cXisCyCh" + }, + "execution_count": 278, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "model100100 = Sequential()\n", + "model100100.add(Dense(units=100,input_dim=num_pixels, activation='sigmoid'))\n", + "model100100.add(Dense(units=100,activation='sigmoid'))\n", + "model100100.add(Dense(units=num_classes, activation='softmax'))\n", + "\n", + "model100100.compile(loss='categorical_crossentropy', optimizer='sgd', metrics=['accuracy'])" + ], + "metadata": { + "id": "pTTia0gmRFaV" + }, + "execution_count": 279, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "# вывод информации об архитектуре модели\n", + "print(model100100.summary())" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 244 + }, + "id": "XQHhKm8YRFW6", + "outputId": "97e6ed14-614c-449e-dc38-3bb9bdc5e2bc" + }, + "execution_count": 280, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "\u001b[1mModel: \"sequential_18\"\u001b[0m\n" + ], + "text/html": [ + "
Model: \"sequential_18\"\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_36 (\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_37 (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m100\u001b[0m) │ \u001b[38;5;34m10,100\u001b[0m │\n", + "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", + "│ dense_38 (\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_36 (Dense)                │ (None, 100)            │        78,500 │\n",
+              "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+              "│ dense_37 (Dense)                │ (None, 100)            │        10,100 │\n",
+              "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+              "│ dense_38 (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;34m89,610\u001b[0m (350.04 KB)\n" + ], + "text/html": [ + "
 Total params: 89,610 (350.04 KB)\n",
+              "
\n" + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "\u001b[1m Trainable params: \u001b[0m\u001b[38;5;34m89,610\u001b[0m (350.04 KB)\n" + ], + "text/html": [ + "
 Trainable params: 89,610 (350.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": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "None\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "# Обучаем модель\n", + "H = model100100.fit(X_train, y_train, validation_split=0.1, epochs=50)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "oCgqwCmPRFTT", + "outputId": "eb3eccd7-b6d8-4ee1-8da6-293098057667" + }, + "execution_count": 281, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Epoch 1/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m61s\u001b[0m 36ms/step - accuracy: 0.2265 - loss: 2.2721 - val_accuracy: 0.5038 - val_loss: 2.0316\n", + "Epoch 2/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 4ms/step - accuracy: 0.5702 - loss: 1.8881 - val_accuracy: 0.7055 - val_loss: 1.4044\n", + "Epoch 3/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 4ms/step - accuracy: 0.7132 - loss: 1.2722 - val_accuracy: 0.7908 - val_loss: 0.9573\n", + "Epoch 4/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 4ms/step - accuracy: 0.7810 - loss: 0.8966 - val_accuracy: 0.8230 - val_loss: 0.7282\n", + "Epoch 5/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 4ms/step - accuracy: 0.8185 - loss: 0.7008 - val_accuracy: 0.8457 - val_loss: 0.6018\n", + "Epoch 6/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m12s\u001b[0m 5ms/step - accuracy: 0.8417 - loss: 0.5912 - val_accuracy: 0.8690 - val_loss: 0.5242\n", + "Epoch 7/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 4ms/step - accuracy: 0.8609 - loss: 0.5206 - val_accuracy: 0.8808 - val_loss: 0.4689\n", + "Epoch 8/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m20s\u001b[0m 10ms/step - accuracy: 0.8725 - loss: 0.4728 - val_accuracy: 0.8883 - val_loss: 0.4307\n", + "Epoch 9/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m15s\u001b[0m 6ms/step - accuracy: 0.8833 - loss: 0.4282 - val_accuracy: 0.8952 - val_loss: 0.4030\n", + "Epoch 10/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 4ms/step - accuracy: 0.8890 - loss: 0.4111 - val_accuracy: 0.8995 - val_loss: 0.3807\n", + "Epoch 11/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 6ms/step - accuracy: 0.8932 - loss: 0.3885 - val_accuracy: 0.9048 - val_loss: 0.3633\n", + "Epoch 12/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m8s\u001b[0m 5ms/step - accuracy: 0.8954 - loss: 0.3716 - val_accuracy: 0.9070 - val_loss: 0.3493\n", + "Epoch 13/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 6ms/step - accuracy: 0.9004 - loss: 0.3586 - val_accuracy: 0.9077 - val_loss: 0.3375\n", + "Epoch 14/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 5ms/step - accuracy: 0.9028 - loss: 0.3483 - val_accuracy: 0.9107 - val_loss: 0.3282\n", + "Epoch 15/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 4ms/step - accuracy: 0.9058 - loss: 0.3355 - val_accuracy: 0.9127 - val_loss: 0.3204\n", + "Epoch 16/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m8s\u001b[0m 5ms/step - accuracy: 0.9064 - loss: 0.3275 - val_accuracy: 0.9130 - val_loss: 0.3122\n", + "Epoch 17/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 4ms/step - accuracy: 0.9096 - loss: 0.3203 - val_accuracy: 0.9150 - val_loss: 0.3055\n", + "Epoch 18/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 4ms/step - accuracy: 0.9125 - loss: 0.3090 - val_accuracy: 0.9178 - val_loss: 0.3005\n", + "Epoch 19/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m13s\u001b[0m 6ms/step - accuracy: 0.9111 - loss: 0.3053 - val_accuracy: 0.9175 - val_loss: 0.2948\n", + "Epoch 20/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 4ms/step - accuracy: 0.9142 - loss: 0.2993 - val_accuracy: 0.9210 - val_loss: 0.2893\n", + "Epoch 21/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 4ms/step - accuracy: 0.9172 - loss: 0.2910 - val_accuracy: 0.9213 - val_loss: 0.2852\n", + "Epoch 22/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m12s\u001b[0m 5ms/step - accuracy: 0.9163 - loss: 0.2892 - val_accuracy: 0.9222 - val_loss: 0.2792\n", + "Epoch 23/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 5ms/step - accuracy: 0.9172 - loss: 0.2833 - val_accuracy: 0.9235 - val_loss: 0.2761\n", + "Epoch 24/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m8s\u001b[0m 4ms/step - accuracy: 0.9202 - loss: 0.2745 - val_accuracy: 0.9233 - val_loss: 0.2720\n", + "Epoch 25/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m8s\u001b[0m 5ms/step - accuracy: 0.9227 - loss: 0.2709 - val_accuracy: 0.9258 - val_loss: 0.2680\n", + "Epoch 26/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 4ms/step - accuracy: 0.9221 - loss: 0.2680 - val_accuracy: 0.9255 - val_loss: 0.2637\n", + "Epoch 27/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 5ms/step - accuracy: 0.9239 - loss: 0.2610 - val_accuracy: 0.9257 - val_loss: 0.2604\n", + "Epoch 28/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 4ms/step - accuracy: 0.9234 - loss: 0.2638 - val_accuracy: 0.9277 - val_loss: 0.2568\n", + "Epoch 29/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 4ms/step - accuracy: 0.9267 - loss: 0.2547 - val_accuracy: 0.9297 - val_loss: 0.2521\n", + "Epoch 30/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 6ms/step - accuracy: 0.9273 - loss: 0.2470 - val_accuracy: 0.9307 - val_loss: 0.2495\n", + "Epoch 31/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 6ms/step - accuracy: 0.9307 - loss: 0.2395 - val_accuracy: 0.9310 - val_loss: 0.2467\n", + "Epoch 32/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 4ms/step - accuracy: 0.9312 - loss: 0.2422 - val_accuracy: 0.9322 - val_loss: 0.2433\n", + "Epoch 33/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m8s\u001b[0m 5ms/step - accuracy: 0.9312 - loss: 0.2376 - val_accuracy: 0.9327 - val_loss: 0.2404\n", + "Epoch 34/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 4ms/step - accuracy: 0.9324 - loss: 0.2346 - val_accuracy: 0.9335 - val_loss: 0.2374\n", + "Epoch 35/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 4ms/step - accuracy: 0.9319 - loss: 0.2321 - val_accuracy: 0.9330 - val_loss: 0.2352\n", + "Epoch 36/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m12s\u001b[0m 5ms/step - accuracy: 0.9352 - loss: 0.2239 - val_accuracy: 0.9360 - val_loss: 0.2315\n", + "Epoch 37/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 4ms/step - accuracy: 0.9347 - loss: 0.2260 - val_accuracy: 0.9370 - val_loss: 0.2288\n", + "Epoch 38/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m8s\u001b[0m 5ms/step - accuracy: 0.9377 - loss: 0.2149 - val_accuracy: 0.9368 - val_loss: 0.2258\n", + "Epoch 39/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m8s\u001b[0m 5ms/step - accuracy: 0.9375 - loss: 0.2166 - val_accuracy: 0.9375 - val_loss: 0.2236\n", + "Epoch 40/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 4ms/step - accuracy: 0.9403 - loss: 0.2101 - val_accuracy: 0.9392 - val_loss: 0.2216\n", + "Epoch 41/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m8s\u001b[0m 5ms/step - accuracy: 0.9379 - loss: 0.2118 - val_accuracy: 0.9393 - val_loss: 0.2185\n", + "Epoch 42/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 4ms/step - accuracy: 0.9396 - loss: 0.2089 - val_accuracy: 0.9403 - val_loss: 0.2157\n", + "Epoch 43/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 4ms/step - accuracy: 0.9407 - loss: 0.2072 - val_accuracy: 0.9410 - val_loss: 0.2138\n", + "Epoch 44/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 4ms/step - accuracy: 0.9428 - loss: 0.1994 - val_accuracy: 0.9408 - val_loss: 0.2127\n", + "Epoch 45/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 4ms/step - accuracy: 0.9433 - loss: 0.1981 - val_accuracy: 0.9420 - val_loss: 0.2092\n", + "Epoch 46/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 4ms/step - accuracy: 0.9454 - loss: 0.1925 - val_accuracy: 0.9425 - val_loss: 0.2081\n", + "Epoch 47/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m8s\u001b[0m 4ms/step - accuracy: 0.9440 - loss: 0.1946 - val_accuracy: 0.9438 - val_loss: 0.2046\n", + "Epoch 48/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 4ms/step - accuracy: 0.9461 - loss: 0.1875 - val_accuracy: 0.9437 - val_loss: 0.2023\n", + "Epoch 49/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 5ms/step - accuracy: 0.9455 - loss: 0.1900 - val_accuracy: 0.9442 - val_loss: 0.2009\n", + "Epoch 50/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 4ms/step - accuracy: 0.9462 - loss: 0.1862 - val_accuracy: 0.9458 - val_loss: 0.1979\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "ke" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 472 + }, + "id": "YDdSpQO5RFPn", + "outputId": "d9b47cf2-a1b0-4e77-ac8d-9d0f1fe9565f" + }, + "execution_count": 282, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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YHCAG264gV9//ZUXXniBlJQUnnrqKbp168bChQsDVU2RBk8BSESOKz4+HqfTyebNm6u8tmnTJsxmMy1btvSfi42NZcyYMbzzzjvs3r2bHj16MHny5Erva9++PX/5y19YvHgx69evp6SkhGeeeeakdfF6vVV6MX755RcA2rRpU6kOl19+OW+//TY7d+7km2++OWnvT0W9DMOgbdu2DBgwoMrxm9/8plL5ffv24XK5Tlif1q1bs2XLFrxeb6VymzZt8r9e8dn79u2rMnj7dCQnJ3PPPfewYMECtm/fTrNmzXj88cfr7PoijZ0CkIgcl8ViYdCgQXz00UeVbjNlZWUxd+5cLr74YiIjIwEqzUICCA8Pp0OHDrjdbgAKCwspLi6uVKZ9+/ZERET4y5zMiy++6H9sGAYvvvgiNpuN/v37Vyp366238vPPP/Pggw9isVi46aabTnrta665BovFwpQpUyr1plR81rHfr7S0tFKvUElJCf/617+Ij4+nZ8+eAAwbNozMzEzefffdSu974YUXCA8P59JLLwV8s+MMw2DKlClV6nVsXU6mrKyM3NzcSucSEhJISUk55XYWaQqswa6AiATf7Nmzq6wlA3Dffffx2GOPkZaWxsUXX8w999yD1WrlX//6F263m2nTpvnLnnXWWfTt25eePXsSGxvLqlWreP/99/0Dl3/55Rf69+/PDTfcwFlnnYXVamX+/PlkZWWdUkAJCQlh0aJFjBo1il69erFw4UI++eQT/vrXvxIfH1+p7OWXX06zZs147733GDp0KAkJCSe9fvv27XnssceYMGECO3bsYMSIEURERLB9+3bmz5/PnXfeyQMPPOAvn5KSwpNPPsmOHTvo1KkT7777LmvXruXll1/GZrMBcOedd/Kvf/2L0aNHs3r1atq0acP777/PN998w3PPPUdERAQA/fr149Zbb+X5559ny5YtDBkyBK/Xy9dff02/fv1qtP9Xfn4+LVq04LrrriM1NZXw8HA+//xzvv/++1PqaRNpMoI3AU1Egq1iGvzxjt27dxuGYRhr1qwxBg8ebISHhxtOp9Po16+f8e2331a61mOPPWZceOGFRnR0tBEaGmp06dLFePzxx/1Twg8cOGCMHTvW6NKlixEWFmZERUUZvXr1Mv7zn/+ctJ6jRo0ywsLCjG3bthmDBg0ynE6nkZiYaEyaNMkoKyur9j333HOPARhz586tUZt88MEHxsUXX2yEhYUZYWFhRpcuXYyxY8camzdv9pe59NJLjW7duhmrVq0yevfubYSEhBitW7c2XnzxxSrXy8rKMsaMGWPExcUZdrvd6N69u/H6669XKVdaWmo89dRTRpcuXQy73W7Ex8cbQ4cONVavXu0vA1Q7vb1169bGqFGjDMPwTcd/8MEHjdTUVCMiIsIICwszUlNTjX/+8581ageRM53JMGrYvyoi0gj8+c9/5rXXXiMzMxOn01mn1+7bty8HDhxg/fr1dXpdEQkcjQESkTNOcXExb731Ftdee22dhx8ROTNoDJCInDGys7P5/PPPef/99zl48CD33XdfsKskIg2UApCInDF+/vlnRo4cSUJCAs8//zznnHNOsKskIg2UxgCJiIhIk6MxQCIiItLkKACJiIhIk6MxQNXwer3s27ePiIiIE+4eLSIiIg2HYRjk5+eTkpJSZRPiYykAVWPfvn2V9jcSERGRxmP37t20aNHihGUUgKpRsTz97t27/fsc1RWPx8PixYsZNGiQf7l8qT9q78BSeweW2juw1N6BVZv2zsvLo2XLlv7/jp+IAlA1Km57RUZG1ksAcjqdREZG6i9QAKi9A0vtHVhq78BSewfW6bT3qQxfCeog6KlTp3LBBRcQERFBQkICI0aMYPPmzSd8zyuvvMJvf/tbYmJiiImJYcCAAXz33XeVyowePRqTyVTpGDJkSH1+FREREWlEghqAli5dytixY1mxYgVpaWl4PB4GDRqEy+U67nvS09O5+eab+fLLL1m+fDktW7Zk0KBB7N27t1K5IUOGkJGR4T/eeeed+v46IiIi0kgE9RbYokWLKj2fM2cOCQkJrF69mksuuaTa97z99tuVnr/66qt88MEHLFmyhNtuu81/3uFwkJSUVPeVFhERkUavQY0Bys3NBSA2NvaU31NYWIjH46nynvT0dBISEoiJieGyyy7jscceo1mzZtVew+1243a7/c/z8vIA3/1Hj8dT069xQhXXq+vrSvXU3oGl9g4stXfNlZWVUVpaSm02QSgtLcVqtVJQUIDV2qD+83lGOra9TSYTVqsVi8Vy3PfU5O9Cg9kKw+v1cuWVV5KTk8OyZctO+X333HMPn332GRs2bCAkJASAefPm4XQ6adu2Ldu2beOvf/0r4eHhLF++vNqGmzx5MlOmTKlyfu7cudpJWkTkDBEREUFERMRJ14eRhsvr9ZKfn09+fn61rxcWFnLLLbeQm5t70klMDSYA3X333SxcuJBly5addO5+hSeeeIJp06aRnp5Ojx49jlvu119/pX379nz++ef079+/yuvV9QC1bNmSAwcO1MsssLS0NAYOHKhZBAGg9g4stXdgqb1PXVZWFnl5ecTHx+N0Omu1yK1hGLhcLsLCwrRIbgAc296GYVBYWMj+/fuJjIwkMTGxynvy8vKIi4s7pQDUIPrwxo0bx8cff8xXX311yuHn6aef5oknnuDzzz8/YfgBaNeuHXFxcWzdurXaAORwOHA4HFXO22y2evtHpT6vLVWpvQNL7R1Yau8TKysrIz8/n8TExOMOhTgVXq8Xj8dDaGioepECoLr2DgsLw2w2k52dTXJycpW7OjX5exDUAGQYBn/605+YP38+6enptG3b9pTeN23aNB5//HE+++wzzj///JOW37NnDwcPHiQ5Ofl0qywiIo1MxbgQDWk4M1T8Hj0ezwnHA51MUCPs2LFjeeutt5g7dy4RERFkZmaSmZlJUVGRv8xtt93GhAkT/M+ffPJJHnnkEWbPnk2bNm387ykoKACgoKCABx98kBUrVrBjxw6WLFnCVVddRYcOHRg8eHDAv6OIiDQMum11Zqir32NQA9CsWbPIzc2lb9++JCcn+493333XX2bXrl1kZGRUek9JSQnXXXddpfc8/fTTAFgsFn766SeuvPJKOnXqxO23307Pnj35+uuvq73NJSIiIk1P0G+BnUx6enql5zt27Dhh+dDQUD777LPTqJWIiMiZp02bNtx///3cf//9p32t9PR0+vXrx+HDh4mOjj7t6wVDgxgELSIiIlX17duXc845h+eee+60r/X9998TFhZ2+pU6QygABVBpmZe9OUXkuE9eVkRE5GQMw6CsrOyUFmaMj48PQI0aD83jC6CnF/9C32e+Zsk+NbuIiJzY6NGjWbp0KTNmzPBv7D1nzhxMJhMLFy6kZ8+eOBwOli1bxrZt27jqqqtITEwkPDycCy64gM8//7zS9dq0aVOpJ8lkMvHqq69y9dVX43Q66dixI//9739rXd8PPviAbt264XA4aNOmDc8880yl1//5z3/SsWNHQkJCSExM5LrrrvO/9v7779O9e3dCQ0Np1qwZAwYMOOG+oHVBPUAB1DwmFIDD6gESEQkqwzAo8pTV6D1er5eikjKsJaW1Xgco1GY55VlMM2bM4JdffuHss8/m0UcfBWDDhg0APPzwwzz99NO0a9eOmJgYdu/ezbBhw3j88cdxOBy8+eabDB8+nM2bN9OqVavjfsaUKVOYNm0aTz31FC+88AIjR45k586dNdqSCmD16tXccMMNTJ48mRtvvJFvv/2We+65h2bNmjF69GhWrVrFvffey7///W8uuugiDh06xNdffw1ARkYGN998M9OmTePqq68mPz+fr7/+ulbbldSEAlAANY/2bdVxyK2pmCIiwVTkKeOsiYGfMPPzo4Nx2k/tP71RUVHY7XacTqd/c+9NmzYB8OijjzJw4EB/2djYWFJTU/3P//73vzN//nz++9//Mm7cuON+xujRo7n55psB+Mc//sHzzz/Pd999x5AhQ2r0vaZPn07//v155JFHAOjUqRM///wzTz31FKNHj2bXrl2EhYVxxRVXEBERQevWrTn33HMBXwAqLS3lmmuuoXXr1gB0794dr9fr35uzPuheTAClRJf3AJUEuSIiItKoHbsIcEFBAQ888ABdu3YlOjqa8PBwNm7cyK5du054naN3UggLCyMyMpLs7Owa12fjxo306dOn0rk+ffqwZcsWysrKGDhwIK1bt6Zdu3bceuutvP322xQWFgKQmppK//796d69O9dffz2vvPIKhw8frnEdako9QAHUvDwAFZaacLlLidbS9SIiQRFqs/DzozVbHNfr9ZKfl09EZO03VA211X7l4qMdO5vrgQceIC0tjaeffpoOHToQGhrKddddR0nJif+P+9itI0wmE16vt07qeLSIiAjWrFlDeno6ixcvZuLEiUyePJnvv/+e6Oho0tLS+Pbbb1m8eDEvvPAC//d//8fy5ctPa+uSk1EPUABFhNiICPFlzn25xUGujYhI02UymXDarTU+Qu2WWr2v4qjpKsZ2u52yspOPVfrmm28YPXo0V199Nd27dycpKemk6+bVpa5du/LNN99UqVOnTp3821VYrVYGDBjAtGnT+Omnn9ixYwdffPEF4Pt99OnThylTpvDDDz9gt9tZsGBBvdZZPUAB1jwqhE3FBWTkFnNW82DXRkREGrI2bdqwcuVKduzYQXh4+HF7Zzp27MiHH37I8OHDMZlMPPLII/XSk3M8f/nLX7jgggv4+9//zo033sjy5ct58cUX+ec//wnAxx9/zK+//soll1xCTEwMn376KV6vl86dO7Ny5UqWLFnCoEGDSEhIYOXKlezfv58uXbrUa53VAxRgyeUDoffmFJ2kpIiINHUPPPAAFouFs846i/j4+OOO6Zk+fToxMTFcdNFFDB8+nMGDB3PeeecFrJ7nnXce//nPf5g3bx5nn302EydO5NFHH2X06NEAREdH8+GHH3LZZZfRtWtXXnrpJd555x26detGZGQkX331FcOGDaNTp0787W9/45lnnmHo0KH1Wmf1AAVYSpRvHFBGjm6BiYjIiXXq1Inly5dXOlcRKo7Wpk0b/+2kCmPHjq30/NhbYtVNM8/JyTmlevXt27fK+6+99lquvfbaastffPHFVba2qtC1a1cWLVpU5Xx992CpByjAUvw9QApAIiIiwaIAFGApUb4AtC9Xt8BERKRhuuuuuwgPD6/2uOuuu4JdvTqhW2ABVjEVfp96gEREpIF69NFHeeCBB6p9LTIyMsC1qR8KQAFWMQg6K99NaZkXq0WdcCIi0rAkJCSQkJAQ7GrUK/3XN8Diwx2YTQZlXoPsfG0KJiIiEgwKQAFmMZuIsfseayq8iIhIcCgABUGMw/dznwKQiIhIUCgABUGMw7d2wp7DCkAiIiLBoAAUBBW3wNQDJCIiEhwKQEFQ0QOkACQiIvWpTZs2PPfcc6dU1mQy1fsGpA2JAlAQxJaPAdIgaBERkeBQAAqCih6gvYeLqt2LRUREROqXAlAQVIwBcpWUkVdUGtzKiIhIg/Tyyy+TkpJSZVPQq666it///vds27aNq666isTERMLDw7ngggv4/PPP6+zz161bx2WXXUZoaCjNmjXjzjvvpKCgwP96eno6F154IWFhYURHR9OnTx927twJwI8//ki/fv2IiIggMjKSnj17smrVqjqrW11QAAoCuwVinDZAt8FERILCMKDEVfPDU1i791UcNej1v/766zl48CBffvml/9yhQ4dYtGgRI0eOpKCggGHDhrFkyRJ++OEHhgwZwvDhw9m1a9dpN4/L5WLw4MHExMTw/fff89577/H5558zbtw4AEpLSxkxYgSXXnopP/30E8uXL+fOO+/EZDIBMHLkSFq0aMH333/P6tWrefjhh7HZbKddr7qkrTCCJCU6hMOFHvblFHFWypmxr4qISKPhKYR/pNToLWYg+nQ/96/7wB52SkVjYmIYOnQoc+fOpX///gC8//77xMXF0a9fP8xmM6mpqf7yf//735k/fz7//e9//UGltubOnUtxcTFvvvkmYWG++r744osMHz6cJ598EpvNRm5uLldccQXt27cHoGvXrv7379q1iwcffJAuXboA0LFjx9OqT31QD1CQpET5NkVVD5CIiBzPyJEj+eCDD3C7fVsnvf3229x0002YzWYKCgp44IEH6Nq1K9HR0YSHh7Nx48Y66QHauHEjqamp/vAD0KdPH7xeL5s3byY2NpbRo0czePBghg8fzowZM8jIyPCXHT9+PH/4wx8YMGAATzzxBNu2bTvtOtU19QAFSUr5pqiaCi8iEgQ2p683pga8Xi95+flERkRgNtey/8DmrFHx4cOHYxgGn3zyCRdccAFff/01zz77LAAPPPAAaWlpPP3003To0IHQ0FCuu+46SkpKale3Gnr99de59957WbRoEe+++y5/+9vfSEtL4ze/+Q2TJ0/mlltu4ZNPPmHhwoVMmjSJefPmcfXVVwekbqdCASjQPEVYy4po3szXA7RHAUhEJPBMplO+FeXn9YKtzPe+2gagGgoJCeGaa67h7bffZuvWrXTu3JnzzjsPgG+++YbRo0f7Q0VBQQE7duyok8/t2rUrc+bMweVy+XuBvvnmG8xmM507d/aXO/fcczn33HOZMGECvXv3Zu7cufzmN78BoFOnTnTq1Ik///nP3Hzzzbz++usNKgDpFlggfTkV27SWdN33HslR6gESEZGTGzlyJJ988gmzZ89m5MiR/vMdO3bkww8/ZO3atfz444/ccsstVWaMnc5nhoSEMGrUKNavX8+XX37Jn/70J2699VYSExPZvn07EyZMYPny5ezcuZPFixezZcsWunbtSlFREePGjSM9PZ2dO3fyzTff8P3331caI9QQqAcokEJjAHCU5pGiACQiIqfgsssuIzY2ls2bN3PLLbf4z0+fPp3f//73XHTRRcTFxfH//t//Iy8vr04+0+l08tlnn3HfffdxwQUX4HQ6ufbaa5k+fbr/9U2bNvHGG29w8OBBkpOTGTt2LH/84x8pLS3l4MGD3HbbbWRlZREXF8c111zDlClT6qRudSWoAWjq1Kl8+OGHbNq0idDQUC666CKefPLJSt1r1Xnvvfd45JFH2LFjBx07duTJJ59k2LBh/tcNw2DSpEm88sor5OTk0KdP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yWRiwYIFlV43DIOJEyeSnJxMaGgoAwYMYMuWLcGp7Blg6tSpXHDBBURERJCQkMCIESPYvHlzpTLFxcWMHTuWZs2aER4ezrXXXktWVlaQaty4zZo1ix49evgXg+vduzcLFy70v662rl9PPPEEJpOJ+++/339ObV53Jk+ejMlkqnR06dLF/3p9trUCUIC8++67jB8/nkmTJrFmzRpSU1MZPHgw2dnZwa5ao+dyuUhNTWXmzJnVvj5t2jSef/55XnrpJVauXElYWBiDBw+muLg4wDU9MyxdupSxY8eyYsUK0tLS8Hg8DBo0CJfL5S/z5z//mf/973+89957LF26lH379nHNNdcEsdaNV4sWLXjiiSdYvXo1q1at4rLLLuOqq65iw4YNgNq6Pn3//ff861//okePHpXOq83rVrdu3cjIyPAfy5Yt879Wr21tSEBceOGFxtixY/3Py8rKjJSUFGPq1KlBrNWZBzDmz5/vf+71eo2kpCTjqaee8p/LyckxHA6H8c477wShhmee7OxsAzCWLl1qGIavfW02m/Hee+/5y2zcuNEAjOXLlwermmeUmJgY49VXX1Vb16P8/HyjY8eORlpamnHppZca9913n2EY+vNd1yZNmmSkpqZW+1p9t7V6gAKgpKSE1atXM2DAAP85s9nMgAEDWL58eRBrdubbvn07mZmZldo+KiqKXr16qe3rSG5uLgCxsbEArF69Go/HU6nNu3TpQqtWrdTmp6msrIx58+bhcrno3bu32roejR07lssvv7xS24L+fNeHLVu2kJKSQrt27Rg5ciS7du0C6r+ttRlqABw4cICysjISExMrnU9MTGTTpk1BqlXTkJmZCVBt21e8JrXn9Xq5//776dOnD2effTbga3O73U50dHSlsmrz2lu3bh29e/emuLiY8PBw5s+fz1lnncXatWvV1vVg3rx5rFmzhu+//77Ka/rzXbd69erFnDlz6Ny5MxkZGUyZMoXf/va3rF+/vt7bWgFIRGpt7NixrF+/vtI9e6l7nTt3Zu3ateTm5vL+++8zatQoli5dGuxqnZF2797NfffdR1paGiEhIcGuzhlv6NCh/sc9evSgV69etG7dmv/85z+EhobW62frFlgAxMXFYbFYqoxcz8rKIikpKUi1ahoq2ldtX/fGjRvHxx9/zJdffkmLFi3855OSkigpKSEnJ6dSebV57dntdjp06EDPnj2ZOnUqqampzJgxQ21dD1avXk12djbnnXceVqsVq9XK0qVLef7557FarSQmJqrN61F0dDSdOnVi69at9f7nWwEoAOx2Oz179mTJkiX+c16vlyVLltC7d+8g1uzM17ZtW5KSkiq1fV5eHitXrlTb15JhGIwbN4758+fzxRdf0LZt20qv9+zZE5vNVqnNN2/ezK5du9TmdcTr9eJ2u9XW9aB///6sW7eOtWvX+o/zzz+fkSNH+h+rzetPQUEB27ZtIzk5uf7/fJ/2MGo5JfPmzTMcDocxZ84c4+effzbuvPNOIzo62sjMzAx21Rq9/Px844cffjB++OEHAzCmT59u/PDDD8bOnTsNwzCMJ554woiOjjY++ugj46effjKuuuoqo23btkZRUVGQa9443X333UZUVJSRnp5uZGRk+I/CwkJ/mbvuusto1aqV8cUXXxirVq0yevfubfTu3TuItW68Hn74YWPp0qXG9u3bjZ9++sl4+OGHDZPJZCxevNgwDLV1IBw9C8ww1OZ16S9/+YuRnp5ubN++3fjmm2+MAQMGGHFxcUZ2drZhGPXb1gpAAfTCCy8YrVq1Mux2u3HhhRcaK1asCHaVzghffvmlAVQ5Ro0aZRiGbyr8I488YiQmJhoOh8Po37+/sXnz5uBWuhGrrq0B4/XXX/eXKSoqMu655x4jJibGcDqdxtVXX21kZGQEr9KN2O9//3ujdevWht1uN+Lj443+/fv7w49hqK0D4dgApDavOzfeeKORnJxs2O12o3nz5saNN95obN261f96fba1yTAM4/T7kUREREQaD40BEhERkSZHAUhERESaHAUgERERaXIUgERERKTJUQASERGRJkcBSERERJocBSARERFpchSARESOw2QysWDBgmBXQ0TqgQKQiDRIo0ePxmQyVTmGDBkS7KqJyBnAGuwKiIgcz5AhQ3j99dcrnXM4HEGqjYicSdQDJCINlsPhICkpqdIRExMD+G5PzZo1i6FDhxIaGkq7du14//33K71/3bp1XHbZZYSGhtKsWTPuvPNOCgoKKpWZPXs23bp1w+FwkJyczLhx4yq9fuDAAa6++mqcTicdO3bkv//9r/+1w4cPM3LkSOLj4wkNDaVjx45VApuINEwKQCLSaD3yyCNce+21/Pjjj4wcOZKbbrqJjRs3AuByuRg8eDAxMTF8//33vPfee3z++eeVAs6sWbMYO3Ysd955J+vWreO///0vHTp0qPQZU6ZM4YYbbuCnn35i2LBhjBw5kkOHDvk//+eff2bhwoVs3LiRWbNmERcXF7gGEJHaq5MtVUVE6tioUaMMi8VihIWFVToef/xxwzB8u9Lfddddld7Tq1cv4+677zYMwzBefvllIyYmxigoKPC//sknnxhms9nIzMw0DMMwUlJSjP/7v/87bh0A429/+5v/eUFBgQEYCxcuNAzDMIYPH26MGTOmbr6wiASUxgCJSIPVr18/Zs2aVelcbGys/3Hv3r0rvda7d2/Wrl0LwMaNG0lNTSUsLMz/ep8+ffB6vWzevBmTycS+ffvo37//CevQo0cP/+OwsDAiIyPJzs4G4O677+baa69lzZo1DBo0iBEjRnDRRRfV6ruKSGApAIlIgxUWFlblllRdCQ0NPaVyNput0nOTyYTX6wVg6NCh7Ny5k08//ZS0tDT69+/P2LFjefrpp+u8viJStzQGSEQarRUrVlR53rVrVwC6du3Kjz/+iMvl8r/+zTffYDab6dy5MxEREbRp04YlS5acVh3i4+MZNWoUb731Fs899xwvv/zyaV1PRAJDPUAi0mC53W4yMzMrnbNarf6Bxu+99x7nn38+F198MW+//Tbfffcdr732GgAjR45k0qRJjBo1ismTJ7N//37+9Kc/ceutt5KYmAjA5MmTueuuu0hISGDo0KHk5+fzzTff8Kc//emU6jdx4kR69uxJt27dcLvdfPzxx/4AJiINmwKQiDRYixYtIjk5udK5zp07s2nTJsA3Q2vevHncc889JCcn884773DWWWcB4HQ6+eyzz7jvvvu44IILcDqdXHvttUyfPt1/rVGjRlFcXMyzzz7LAw88QFxcHNddd90p189utzNhwgR27NhBaGgov/3tb5k3b14dfHMRqW8mwzCMYFdCRKSmTCYT8+fPZ8SIEcGuiog0QhoDJCIiIk2OApCIiIg0ORoDJCKNku7ei8jpUA+QiIiINDkKQCIiItLkKACJiIhIk6MAJCIiIk2OApCIiIg0OQpAIiIi0uQoAImIiEiTowAkIiIiTY4CkIiIiDQ5/x/ZcmX35L0OYgAAAABJRU5ErkJggg==\n" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "code", + "source": [ + "# Оценка качества работы модели на тестовых данных\n", + "scores = model100100.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": "D_WHUHCwRFMS", + "outputId": "10e9ab97-5007-47fc-e520-7550ef542d93" + }, + "execution_count": 283, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "\u001b[1m313/313\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 3ms/step - accuracy: 0.9449 - loss: 0.1931\n", + "Loss on test data: 0.19571688771247864\n", + "Accuracy on test data: 0.9435999989509583\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "# сохранение модели на диск\n", + "model100100.save('/content/drive/MyDrive/Colab Notebooks/models/model100in_1hide_100in_2hide.keras')" + ], + "metadata": { + "id": "fkBAnNf2RFDL" + }, + "execution_count": 284, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "# сохранение лучшей модели в папку best_model\n", + "model100.save('/content/drive/MyDrive/Colab Notebooks/best_model/model100.keras')" + ], + "metadata": { + "id": "mXGyPCNdS91i" + }, + "execution_count": 285, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "# Загрузка модели с диска\n", + "from keras.models import load_model\n", + "model = load_model('/content/drive/MyDrive/Colab Notebooks/best_model/model100.keras')" + ], + "metadata": { + "id": "ILyFn-CJp1k8" + }, + "execution_count": 286, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "# вывод тестового изображения и результата распознавания\n", + "n = 111\n", + "result = model.predict(X_test[n:n+1])\n", + "print('NN output:', result)\n", + "plt.imshow(X_test[n].reshape(28,28), cmap=plt.get_cmap('gray'))\n", + "plt.show()\n", + "print('Real mark: ', str(np.argmax(y_test[n])))\n", + "print('NN answer: ', str(np.argmax(result)))" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 517 + }, + "id": "cCk7Do1mp-xb", + "outputId": "6fd13943-88cd-4c61-af54-0cb9f1c818a8" + }, + "execution_count": 287, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 116ms/step\n", + "NN output: [[1.1728607e-03 5.4896927e-06 3.3185919e-05 2.6362878e-04 4.8558863e-06\n", + " 9.9795568e-01 1.9454242e-07 1.6833146e-05 4.9621973e-04 5.1067746e-05]]\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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\n" + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Real mark: 5\n", + "NN answer: 5\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "# вывод тестового изображения и результата распознавания\n", + "n = 222\n", + "result = model.predict(X_test[n:n+1])\n", + "print('NN output:', result)\n", + "plt.imshow(X_test[n].reshape(28,28), cmap=plt.get_cmap('gray'))\n", + "plt.show()\n", + "print('Real mark: ', str(np.argmax(y_test[n])))\n", + "print('NN answer: ', str(np.argmax(result)))" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 534 + }, + "id": "HrL0sv-1YosF", + "outputId": "c6714324-119d-490a-8490-356aa76230d1" + }, + "execution_count": 288, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 72ms/step\n", + "NN output: [[1.02687673e-05 2.02151591e-06 2.86183599e-03 8.74871985e-05\n", + " 1.51387369e-02 6.32769879e-05 3.97122385e-05 4.11829986e-02\n", + " 1.06158564e-04 9.40507472e-01]]\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAaAAAAGdCAYAAABU0qcqAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAGvtJREFUeJzt3X9sVfX9x/HXLdILantZKe3tHS0WVHACXcakdipT6UprwkDIAmgyWAhOVtyAiYZFxR9bOtmmRNPh/jAwE0FlEYhsI8Niy9xaCL8kzK2hrA4YtEwS7i0FCqGf7x/E++VKK57LvX23l+cjOQm993x63h4vPDm9l3t9zjknAAB6WJr1AACAaxMBAgCYIEAAABMECABgggABAEwQIACACQIEADBBgAAAJq6zHuDzOjs7dfToUWVkZMjn81mPAwDwyDmntrY2hUIhpaV1f53T6wJ09OhR5efnW48BALhKhw8f1tChQ7u9v9f9CC4jI8N6BABAAlzpz/OkBai6ulo33XSTBgwYoOLiYu3YseNLrePHbgCQGq7053lSAvT2229r8eLFWrZsmXbv3q2ioiJNmjRJx48fT8bhAAB9kUuC8ePHu8rKyujXFy5ccKFQyFVVVV1xbTgcdpLY2NjY2Pr4Fg6Hv/DP+4RfAZ07d067du1SaWlp9La0tDSVlpaqvr7+sv07OjoUiURiNgBA6kt4gD799FNduHBBubm5Mbfn5uaqpaXlsv2rqqoUCASiG6+AA4Brg/mr4JYuXapwOBzdDh8+bD0SAKAHJPzfAWVnZ6tfv35qbW2Nub21tVXBYPCy/f1+v/x+f6LHAAD0cgm/AkpPT9e4ceNUU1MTva2zs1M1NTUqKSlJ9OEAAH1UUt4JYfHixZo9e7a++c1vavz48VqxYoXa29v1gx/8IBmHAwD0QUkJ0IwZM/S///1PzzzzjFpaWvT1r39dmzdvvuyFCQCAa5fPOeesh7hUJBJRIBCwHgMAcJXC4bAyMzO7vd/8VXAAgGsTAQIAmCBAAAATBAgAYIIAAQBMECAAgAkCBAAwQYAAACYIEADABAECAJggQAAAEwQIAGCCAAEATBAgAIAJAgQAMEGAAAAmCBAAwAQBAgCYIEAAABMECABgggABAEwQIACACQIEADBBgAAAJggQAMAEAQIAmCBAAAATBAgAYIIAAQBMECAAgAkCBAAwQYAAACYIEADABAECAJggQAAAEwQIAGCCAAEATBAgAIAJAgQAMEGAAAAmCBAAwAQBAgCYIEAAABMECABgggABAEwQIACACQIEADBBgAAAJggQAMAEAQIAmCBAAAATBAgAYIIAAQBMECAAgAkCBAAwkfAAPfvss/L5fDHbqFGjEn0YAEAfd10yvuntt9+u999///8Pcl1SDgMA6MOSUobrrrtOwWAwGd8aAJAikvIc0IEDBxQKhTR8+HA9/PDDOnToULf7dnR0KBKJxGwAgNSX8AAVFxdr9erV2rx5s1auXKnm5mbdc889amtr63L/qqoqBQKB6Jafn5/okQAAvZDPOeeSeYCTJ09q2LBheumllzR37tzL7u/o6FBHR0f060gkQoQAIAWEw2FlZmZ2e3/SXx0waNAg3XrrrWpqauryfr/fL7/fn+wxAAC9TNL/HdCpU6d08OBB5eXlJftQAIA+JOEBevzxx1VXV6dPPvlEf//73/Xggw+qX79+mjVrVqIPBQDowxL+I7gjR45o1qxZOnHihIYMGaK7775bDQ0NGjJkSKIPBQDow5L+IgSvIpGIAoGA9RgAgKt0pRch8F5wAAATBAgAYIIAAQBMECAAgAkCBAAwQYAAACYIEADABAECAJggQAAAEwQIAGCCAAEATBAgAICJpH8gHXCp8vJyz2u+//3ve15TWFjoeY108SPlvfL5fJ7XHD161POaP/zhD57XvPrqq57XSOr2AySBROIKCABgggABAEwQIACACQIEADBBgAAAJggQAMAEAQIAmCBAAAATBAgAYIIAAQBMECAAgAkCBAAwQYAAACZ8zjlnPcSlIpGIAoGA9RjXlIyMjLjWxfPuzPfff7/nNWlpvfvvSfG8G3ZP/bb7+OOP41o3ZcoUz2v+/e9/x3UspK5wOKzMzMxu7+/dv7MBACmLAAEATBAgAIAJAgQAMEGAAAAmCBAAwAQBAgCYIEAAABMECABgggABAEwQIACACQIEADBxnfUAsPeLX/wirnWlpaWe1xw5csTzmr/85S+e1+zevdvzmniFQiHPayZPnux5zZgxYzyv+drXvuZ5jST99a9/9bzmgQce8Lzmo48+8rwGqYMrIACACQIEADBBgAAAJggQAMAEAQIAmCBAAAATBAgAYIIAAQBMECAAgAkCBAAwQYAAACYIEADAhM8556yHuFQkElEg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pps0YMAAFRcXa8eOHdYj9bhnn31WPp8vZhs1apT1WEm3bds2TZ48WaFQSD6fTxs2bIi53zmnZ555Rnl5eRo4cKBKS0t14MABm2GT6ErnYc6cOZc9PsrLy22GTZKqqirdcccdysjIUE5OjqZOnarGxsaYfc6ePavKykoNHjxYN954o6ZPn67W1lajiZPjy5yHe++997LHw6OPPmo0cdf6RIDefvttLV68WMuWLdPu3btVVFSkSZMm6fjx49aj9bjbb79dx44di24ffvih9UhJ197erqKiIlVXV3d5//Lly/XKK6/otdde0/bt23XDDTdo0qRJOnv2bA9PmlxXOg+SVF5eHvP4WLt2bQ9OmHx1dXWqrKxUQ0ODtmzZovPnz6usrEzt7e3RfRYtWqT33ntP69atU11dnY4ePapp06YZTp14X+Y8SNK8efNiHg/Lly83mrgbrg8YP368q6ysjH594cIFFwqFXFVVleFUPW/ZsmWuqKjIegxTktz69eujX3d2drpgMOh+9atfRW87efKk8/v9bu3atQYT9ozPnwfnnJs9e7abMmWKyTxWjh8/7iS5uro659zF//f9+/d369ati+7zz3/+00ly9fX1VmMm3efPg3POffvb33Y/+clP7Ib6Enr9FdC5c+e0a9culZaWRm9LS0tTaWmp6uvrDSezceDAAYVCIQ0fPlwPP/ywDh06ZD2SqebmZrW0tMQ8PgKBgIqLi6/Jx0dtba1ycnI0cuRIzZ8/XydOnLAeKanC4bAkKSsrS5K0a9cunT9/PubxMGrUKBUUFKT04+Hz5+Ezb775prKzszV69GgtXbpUp0+fthivW73uzUg/79NPP9WFCxeUm5sbc3tubq7+9a9/GU1lo7i4WKtXr9bIkSN17NgxPffcc7rnnnu0f/9+ZWRkWI9noqWlRZK6fHx8dt+1ory8XNOmTVNhYaEOHjyon/3sZ6qoqFB9fb369etnPV7CdXZ2auHChbrrrrs0evRoSRcfD+np6Ro0aFDMvqn8eOjqPEjSQw89pGHDhikUCmnfvn168skn1djYqHfffddw2li9PkD4fxUVFdFfjx07VsXFxRo2bJjeeecdzZ0713Ay9AYzZ86M/nrMmDEaO3asRowYodraWk2cONFwsuSorKzU/v37r4nnQb9Id+fhkUceif56zJgxysvL08SJE3Xw4EGNGDGip8fsUq//EVx2drb69et32atYWltbFQwGjabqHQYNGqRbb71VTU1N1qOY+ewxwOPjcsOHD1d2dnZKPj4WLFigTZs26YMPPoj5+JZgMKhz587p5MmTMfun6uOhu/PQleLiYknqVY+HXh+g9PR0jRs3TjU1NdHbOjs7VVNTo5KSEsPJ7J06dUoHDx5UXl6e9ShmCgsLFQwGYx4fkUhE27dvv+YfH0eOHNGJEydS6vHhnNOCBQu0fv16bd26VYWFhTH3jxs3Tv379495PDQ2NurQoUMp9Xi40nnoyt69eyWpdz0erF8F8WW89dZbzu/3u9WrV7uPP/7YPfLII27QoEGupaXFerQe9dOf/tTV1ta65uZm97e//c2Vlpa67Oxsd/z4cevRkqqtrc3t2bPH7dmzx0lyL730ktuzZ4/7z3/+45xz7pe//KUbNGiQ27hxo9u3b5+bMmWKKywsdGfOnDGePLG+6Dy0tbW5xx9/3NXX17vm5mb3/vvvu2984xvulltucWfPnrUePWHmz5/vAoGAq62tdceOHYtup0+fju7z6KOPuoKCArd161a3c+dOV1JS4kpKSgynTrwrnYempib3/PPPu507d7rm5ma3ceNGN3z4cDdhwgTjyWP1iQA559yrr77qCgoKXHp6uhs/frxraGiwHqnHzZgxw+Xl5bn09HT31a9+1c2YMcM1NTVZj5V0H3zwgZN02TZ79mzn3MWXYj/99NMuNzfX+f1+N3HiRNfY2Gg7dBJ80Xk4ffq0Kysrc0OGDHH9+/d3w4YNc/PmzUu5v6R19d8vya1atSq6z5kzZ9yPfvQj95WvfMVdf/317sEHH3THjh2zGzoJrnQeDh065CZMmOCysrKc3+93N998s1uyZIkLh8O2g38OH8cAADDR658DAgCkJgIEADBBgAAAJggQAMAEAQIAmCBAAAATBAgAYIIAAQBMECAAgAkCBAAwQYAAACYIEADAxP8BUXGTNDnuE/AAAAAASUVORK5CYII=\n" + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Real mark: 9\n", + "NN answer: 9\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "# загрузка собственного изображения\n", + "from PIL import Image\n", + "file_data = Image.open('test.png')\n", + "file_data = file_data.convert('L') # перевод в градации серого\n", + "test_img = np.array(file_data)" + ], + "metadata": { + "id": "tfARmJMip_D8" + }, + "execution_count": 289, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "# вывод собственного изображения\n", + "plt.imshow(test_img, cmap=plt.get_cmap('gray'))\n", + "plt.show()\n", + "# предобработка\n", + "test_img = test_img / 255\n", + "test_img = test_img.reshape(1, num_pixels)\n", + "# распознавание\n", + "result = model.predict(test_img)\n", + "print('I think it\\'s ', np.argmax(result))" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 465 + }, + "id": "60zdtlMduHhT", + "outputId": "6fb2d0bc-7271-462c-cd42-a8a1738ba9f3" + }, + "execution_count": 290, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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\n" + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 59ms/step\n", + "I think it's 5\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "# загрузка собственного изображения\n", + "from PIL import Image\n", + "file2_data = Image.open('test_2.png')\n", + "file2_data = file2_data.convert('L') # перевод в градации серого\n", + "test2_img = np.array(file2_data)" + ], + "metadata": { + "id": "JcO7pbCSuvrv" + }, + "execution_count": 292, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "# вывод собственного изображения\n", + "plt.imshow(test2_img, cmap=plt.get_cmap('gray'))\n", + "plt.show()\n", + "# предобработка\n", + "test2_img = test2_img / 255\n", + "test2_img = test2_img.reshape(1, num_pixels)\n", + "# распознавание\n", + "result_2 = model.predict(test2_img)\n", + "print('I think it\\'s ', np.argmax(result_2))" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 465 + }, + "id": "2E0evx2su4y1", + "outputId": "162a5473-3b36-4a10-eb44-da66890080cd" + }, + "execution_count": 293, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAaAAAAGdCAYAAABU0qcqAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAGLlJREFUeJzt3X9MVff9x/HX1cKttnApIlxuRYraalIry5wy4uqaSBS3mPrjD9f1D7sYG+21mbp2i0vUdlnCZpNm6WLW/aVZVm1nMjT1DxNFwWxDm1qNMeuIMDYwcnE14VxEQQOf7x+ud9+rIAL38r738nwkn6Tce+S+PR559nAPR59zzgkAgHE2yXoAAMDERIAAACYIEADABAECAJggQAAAEwQIAGCCAAEATBAgAICJx6wHuN/AwICuXbumnJwc+Xw+63EAACPknFN3d7dCoZAmTRr6PCflAnTt2jWVlJRYjwEAGKP29nbNmDFjyOdT7ltwOTk51iMAABJguK/nSQvQvn379Mwzz+jxxx9XRUWFPvvss0f6dXzbDQAyw3Bfz5MSoE8++UQ7duzQnj179MUXX6i8vFwrVqzQ9evXk/FyAIB05JJg8eLFLhwOxz7u7+93oVDI1dTUDPtrPc9zklgsFouV5svzvId+vU/4GdCdO3d0/vx5VVVVxR6bNGmSqqqq1NjY+MD2fX19ikajcQsAkPkSHqCvvvpK/f39Kioqinu8qKhIkUjkge1ramoUCARiiyvgAGBiML8KbufOnfI8L7ba29utRwIAjIOE/xxQQUGBJk+erM7OzrjHOzs7FQwGH9je7/fL7/cnegwAQIpL+BlQdna2Fi5cqLq6uthjAwMDqqurU2VlZaJfDgCQppJyJ4QdO3Zow4YN+ta3vqXFixfrN7/5jXp6evSjH/0oGS8HAEhDSQnQ+vXr9Z///Ee7d+9WJBLRN77xDR0/fvyBCxMAABOXzznnrIf4/6LRqAKBgPUYAIAx8jxPubm5Qz5vfhUcAGBiIkAAABMECABgggABAEwQIACACQIEADBBgAAAJggQAMAEAQIAmCBAAAATBAgAYIIAAQBMJOVu2MBQUuzetxnP5/NZjwAMiTMgAIAJAgQAMEGAAAAmCBAAwAQBAgCYIEAAABMECABgggABAEwQIACACQIEADBBgAAAJggQAMAEAQIAmOBu2Bg17myd+kb7Z8RdtDEeOAMCAJggQAAAEwQIAGCCAAEATBAgAIAJAgQAMEGAAAAmCBAAwAQBAgCYIEAAABMECABgggABAExwM1Kk/E1FuTHmPeP55zSa1+LPCSPFGRAAwAQBAgCYIEAAABMECABgggABAEwQIACACQIEADBBgAAAJggQAMAEAQIAmCBAAAATBAgAYIKbkWYYbiyauUaz71L9eMDExhkQAMAEAQIAmEh4gN555x35fL64NW/evES/DAAgzSXlPaDnn39eJ0+e/N+LPMZbTQCAeEkpw2OPPaZgMJiMTw0AyBBJeQ/oypUrCoVCmjVrll599VW1tbUNuW1fX5+i0WjcAgBkvoQHqKKiQgcOHNDx48f1u9/9Tq2trXrxxRfV3d096PY1NTUKBAKxVVJSkuiRAAApyOeS/IMCXV1dKi0t1fvvv6+NGzc+8HxfX5/6+vpiH0ejUSI0Bqn+cx/8HND4Gs/jgT9b3M/zPOXm5g75fNKvDsjLy9Nzzz2n5ubmQZ/3+/3y+/3JHgMAkGKS/nNAN2/eVEtLi4qLi5P9UgCANJLwAL311ltqaGjQv/71L/3tb3/TmjVrNHnyZL3yyiuJfikAQBpL+Lfgrl69qldeeUU3btzQ9OnT9Z3vfEdnz57V9OnTE/1SAIA0lvSLEEYqGo0qEAhYjwFkhBT76/0ALlzIbMNdhMC94AAAJggQAMAEAQIAmCBAAAATBAgAYIIAAQBMECAAgAkCBAAwQYAAACYIEADABAECAJggQAAAE0n/B+kA2BntzT5T/SamyAycAQEATBAgAIAJAgQAMEGAAAAmCBAAwAQBAgCYIEAAABMECABgggABAEwQIACACQIEADBBgAAAJggQAMAEAQIAmCBAAAATBAgAYIIAAQBMECAAgAkCBAAwQYAAACYIEADABAECAJggQAAAEwQIAGCCAAEATBAgAIAJAgQAMEGAAAAmCBAAwAQBAgCYIEAAABMECABgggABAEwQIACACQIEADBBgAAAJggQAMAEAQIAmCBAAAATBAgAYIIAAQBMECAAgIkRB+jMmTNatWqVQqGQfD6fjhw5Eve8c067d+9WcXGxpkyZoqqqKl25ciVR8wIAMsSIA9TT06Py8nLt27dv0Of37t2rDz74QB9++KHOnTunJ554QitWrFBvb++YhwUAZBA3BpJcbW1t7OOBgQEXDAbde++9F3usq6vL+f1+d+jQoUf6nJ7nOUksFstwjRfr3ycrucvzvIf++Sf0PaDW1lZFIhFVVVXFHgsEAqqoqFBjY+Ogv6avr0/RaDRuAQAyX0IDFIlEJElFRUVxjxcVFcWeu19NTY0CgUBslZSUJHIkAECKMr8KbufOnfI8L7ba29utRwIAjIOEBigYDEqSOjs74x7v7OyMPXc/v9+v3NzcuAUAyHwJDVBZWZmCwaDq6upij0WjUZ07d06VlZWJfCkAQJp7bKS/4ObNm2pubo593NraqosXLyo/P18zZ87Utm3b9Mtf/lLPPvusysrKtGvXLoVCIa1evTqRcwMA0t1IL5s8ffr0oJfbbdiwwTl371LsXbt2uaKiIuf3+92yZctcU1PTI39+LsNmsezXeLH+fbKSu4a7DNv334MgZUSjUQUCAesxgAltvL4s+Hy+cXkd2PA876Hv65tfBQcAmJgIEADABAECAJggQAAAEwQIAGCCAAEATBAgAIAJAgQAMEGAAAAmCBAAwAQBAgCYIEAAABMECABgYsT/HhCA9JFiN7sH4nAGBAAwQYAAACYIEADABAECAJggQAAAEwQIAGCCAAEATBAgAIAJAgQAMEGAAAAmCBAAwAQBAgCY4GakQJpI9RuL+nw+6xGQZjgDAgCYIEAAABMECABgggABAEwQIACACQIEADBBgAAAJggQAMAEAQIAmCBAAAATBAgAYIIAAQBMcDNSAA/gxqIYD5wBAQBMECAAgAkCBAAwQYAAACYIEADABAECAJggQAAAEwQIAGCCAAEATBAgAIAJAgQAMEGAAAAmuBkpMEbOOesRgLTEGRAAwAQBAgCYGHGAzpw5o1WrVikUCsnn8+nIkSNxz7/22mvy+Xxxq7q6OlHzAgAyxIgD1NPTo/Lycu3bt2/Ibaqrq9XR0RFbhw4dGtOQAIDMM+KLEFauXKmVK1c+dBu/369gMDjqoQAAmS8p7wHV19ersLBQc+fO1ZYtW3Tjxo0ht+3r61M0Go1bAIDMl/AAVVdX6w9/+IPq6ur061//Wg0NDVq5cqX6+/sH3b6mpkaBQCC2SkpKEj0SACAF+dwYfojB5/OptrZWq1evHnKbf/7zn5o9e7ZOnjypZcuWPfB8X1+f+vr6Yh9Ho1EihLSSiT8H5PP5rEdABvA8T7m5uUM+n/TLsGfNmqWCggI1NzcP+rzf71dubm7cAgBkvqQH6OrVq7px44aKi4uT/VIAgDQy4qvgbt68GXc209raqosXLyo/P1/5+fl69913tW7dOgWDQbW0tOinP/2p5syZoxUrViR0cABAmnMjdPr0aSfpgbVhwwZ369Ytt3z5cjd9+nSXlZXlSktL3aZNm1wkEnnkz+953qCfn8VK1ZWJrPcpKzOW53kPPc7GdBFCMkSjUQUCAesxMEGl2F+HMeNiAlgyvwgBAIDBECAAgAkCBAAwQYAAACYIEADABAECAJggQAAAEwQIAGCCAAEATBAgAIAJAgQAMEGAAAAmCBAAwMSI/z0gIB2k+l2tuUs1wBkQAMAIAQIAmCBAAAATBAgAYIIAAQBMECAAgAkCBAAwQYAAACYIEADABAECAJggQAAAEwQIAGCCm5Ei5XFjUSAzcQYEADBBgAAAJggQAMAEAQIAmCBAAAATBAgAYIIAAQBMECAAgAkCBAAwQYAAACYIEADABAECAJjgZqQYV9xYFMDXOAMCAJggQAAAEwQIAGCCAAEATBAgAIAJAgQAMEGAAAAmCBAAwAQBAgCYIEAAABMECABgggABAExwM1KMWqrfWBRAauMMCABgggABAEyMKEA1NTVatGiRcnJyVFhYqNWrV6upqSlum97eXoXDYU2bNk1PPvmk1q1bp87OzoQODQBIfyMKUENDg8LhsM6ePasTJ07o7t27Wr58uXp6emLbbN++XZ9++qkOHz6shoYGXbt2TWvXrk344ACANOfG4Pr1606Sa2hocM4519XV5bKystzhw4dj23z55ZdOkmtsbHykz+l5npPESoOViaz3KYuVScvzvIf+fRvTe0Ce50mS8vPzJUnnz5/X3bt3VVVVFdtm3rx5mjlzphobGwf9HH19fYpGo3ELAJD5Rh2ggYEBbdu2TUuWLNH8+fMlSZFIRNnZ2crLy4vbtqioSJFIZNDPU1NTo0AgEFslJSWjHQkAkEZGHaBwOKzLly/r448/HtMAO3fulOd5sdXe3j6mzwcASA+j+kHUrVu36tixYzpz5oxmzJgRezwYDOrOnTvq6uqKOwvq7OxUMBgc9HP5/X75/f7RjAEASGMjOgNyzmnr1q2qra3VqVOnVFZWFvf8woULlZWVpbq6uthjTU1NamtrU2VlZWImBgBkhBGdAYXDYR08eFBHjx5VTk5O7H2dQCCgKVOmKBAIaOPGjdqxY4fy8/OVm5urN998U5WVlfr2t7+dlN8AACBNJeIS1f3798e2uX37tnvjjTfcU0895aZOnerWrFnjOjo6Hvk1uAw7fVYmst6nLFYmreEuw/b99y9dyohGowoEAtZjTCgpdgggTfl8PusRkGI8z1Nubu6Qz3MvOACACQIEADBBgAAAJggQAMAEAQIAmCBAAAATBAgAYIIAAQBMECAAgAkCBAAwQYAAACYIEADABAECAJgY1b+ICgD3G81d1bmD9sTGGRAAwAQBAgCYIEAAABMECABgggABAEwQIACACQIEADBBgAAAJggQAMAEAQIAmCBAAAATBAgAYIKbkYIbQgIwwRkQAMAEAQIAmCBAAAATBAgAYIIAAQBMECAAgAkCBAAwQYAAACYIEADABAECAJggQAAAEwQIAGCCAAEATBAgAIAJAgQAMEGAAAAmCBAAwAQBAgCYIEAAABMECABgggABAEwQIACACQIEADBBgAAAJggQAMAEAQIAmCBAAAATBAgAYGJEAaqpqdGiRYuUk5OjwsJCrV69Wk1NTXHbvPTSS/L5fHFr8+bNCR0aAJD+RhSghoYGhcNhnT17VidOnNDdu3e1fPly9fT0xG23adMmdXR0xNbevXsTOjQAIP09NpKNjx8/HvfxgQMHVFhYqPPnz2vp0qWxx6dOnapgMJiYCQEAGWlM7wF5nidJys/Pj3v8o48+UkFBgebPn6+dO3fq1q1bQ36Ovr4+RaPRuAUAmADcKPX397vvf//7bsmSJXGP//73v3fHjx93ly5dcn/84x/d008/7dasWTPk59mzZ4+TxGKxWKwMW57nPbQjow7Q5s2bXWlpqWtvb3/odnV1dU6Sa25uHvT53t5e53lebLW3t5vvNBaLxWKNfQ0XoBG9B/S1rVu36tixYzpz5oxmzJjx0G0rKiokSc3NzZo9e/YDz/v9fvn9/tGMAQBIYyMKkHNOb775pmpra1VfX6+ysrJhf83FixclScXFxaMaEACQmUYUoHA4rIMHD+ro0aPKyclRJBKRJAUCAU2ZMkUtLS06ePCgvve972natGm6dOmStm/frqVLl2rBggVJ+Q0AANLUSN730RDf59u/f79zzrm2tja3dOlSl5+f7/x+v5szZ457++23h/0+4P/neZ759y1ZLBaLNfY13Nd+33/DkjKi0agCgYD1GACAMfI8T7m5uUM+z73gAAAmCBAAwAQBAgCYIEAAABMECABgggABAEwQIACACQIEADBBgAAAJggQAMAEAQIAmCBAAAATBAgAYIIAAQBMECAAgAkCBAAwQYAAACYIEADABAECAJggQAAAEwQIAGCCAAEATBAgAIAJAgQAMEGAAAAmUi5AzjnrEQAACTDc1/OUC1B3d7f1CACABBju67nPpdgpx8DAgK5du6acnBz5fL6456LRqEpKStTe3q7c3FyjCe2xH+5hP9zDfriH/XBPKuwH55y6u7sVCoU0adLQ5zmPjeNMj2TSpEmaMWPGQ7fJzc2d0AfY19gP97Af7mE/3MN+uMd6PwQCgWG3SblvwQEAJgYCBAAwkVYB8vv92rNnj/x+v/UoptgP97Af7mE/3MN+uCed9kPKXYQAAJgY0uoMCACQOQgQAMAEAQIAmCBAAAATaROgffv26ZlnntHjjz+uiooKffbZZ9Yjjbt33nlHPp8vbs2bN896rKQ7c+aMVq1apVAoJJ/PpyNHjsQ975zT7t27VVxcrClTpqiqqkpXrlyxGTaJhtsPr7322gPHR3V1tc2wSVJTU6NFixYpJydHhYWFWr16tZqamuK26e3tVTgc1rRp0/Tkk09q3bp16uzsNJo4OR5lP7z00ksPHA+bN282mnhwaRGgTz75RDt27NCePXv0xRdfqLy8XCtWrND169etRxt3zz//vDo6OmLrL3/5i/VISdfT06Py8nLt27dv0Of37t2rDz74QB9++KHOnTunJ554QitWrFBvb+84T5pcw+0HSaquro47Pg4dOjSOEyZfQ0ODwuGwzp49qxMnTuju3btavny5enp6Ytts375dn376qQ4fPqyGhgZdu3ZNa9euNZw68R5lP0jSpk2b4o6HvXv3Gk08BJcGFi9e7MLhcOzj/v5+FwqFXE1NjeFU42/Pnj2uvLzcegxTklxtbW3s44GBARcMBt17770Xe6yrq8v5/X536NAhgwnHx/37wTnnNmzY4F5++WWTeaxcv37dSXINDQ3OuXt/9llZWe7w4cOxbb788ksnyTU2NlqNmXT37wfnnPvud7/rfvzjH9sN9QhS/gzozp07On/+vKqqqmKPTZo0SVVVVWpsbDSczMaVK1cUCoU0a9Ysvfrqq2pra7MeyVRra6sikUjc8REIBFRRUTEhj4/6+noVFhZq7ty52rJli27cuGE9UlJ5nidJys/PlySdP39ed+/ejTse5s2bp5kzZ2b08XD/fvjaRx99pIKCAs2fP187d+7UrVu3LMYbUsrdjPR+X331lfr7+1VUVBT3eFFRkf7xj38YTWWjoqJCBw4c0Ny5c9XR0aF3331XL774oi5fvqycnBzr8UxEIhFJGvT4+Pq5iaK6ulpr165VWVmZWlpa9POf/1wrV65UY2OjJk+ebD1ewg0MDGjbtm1asmSJ5s+fL+ne8ZCdna28vLy4bTP5eBhsP0jSD3/4Q5WWlioUCunSpUv62c9+pqamJv35z382nDZeygcI/7Ny5crYfy9YsEAVFRUqLS3Vn/70J23cuNFwMqSCH/zgB7H/fuGFF7RgwQLNnj1b9fX1WrZsmeFkyREOh3X58uUJ8T7owwy1H15//fXYf7/wwgsqLi7WsmXL1NLSotmzZ4/3mINK+W/BFRQUaPLkyQ9cxdLZ2algMGg0VWrIy8vTc889p+bmZutRzHx9DHB8PGjWrFkqKCjIyONj69atOnbsmE6fPh33z7cEg0HduXNHXV1dcdtn6vEw1H4YTEVFhSSl1PGQ8gHKzs7WwoULVVdXF3tsYGBAdXV1qqysNJzM3s2bN9XS0qLi4mLrUcyUlZUpGAzGHR/RaFTnzp2b8MfH1atXdePGjYw6Ppxz2rp1q2pra3Xq1CmVlZXFPb9w4UJlZWXFHQ9NTU1qa2vLqONhuP0wmIsXL0pSah0P1ldBPIqPP/7Y+f1+d+DAAff3v//dvf766y4vL89FIhHr0cbVT37yE1dfX+9aW1vdX//6V1dVVeUKCgrc9evXrUdLqu7ubnfhwgV34cIFJ8m9//777sKFC+7f//63c865X/3qVy4vL88dPXrUXbp0yb388suurKzM3b5923jyxHrYfuju7nZvvfWWa2xsdK2tre7kyZPum9/8pnv22Wddb2+v9egJs2XLFhcIBFx9fb3r6OiIrVu3bsW22bx5s5s5c6Y7deqU+/zzz11lZaWrrKw0nDrxhtsPzc3N7he/+IX7/PPPXWtrqzt69KibNWuWW7p0qfHk8dIiQM4599vf/tbNnDnTZWdnu8WLF7uzZ89ajzTu1q9f74qLi112drZ7+umn3fr1611zc7P1WEl3+vRpJ+mBtWHDBufcvUuxd+3a5YqKipzf73fLli1zTU1NtkMnwcP2w61bt9zy5cvd9OnTXVZWlistLXWbNm3KuP9JG+z3L8nt378/ts3t27fdG2+84Z566ik3depUt2bNGtfR0WE3dBIMtx/a2trc0qVLXX5+vvP7/W7OnDnu7bffdp7n2Q5+H/45BgCAiZR/DwgAkJkIEADABAECAJggQAAAEwQIAGCCAAEATBAgAIAJAgQAMEGAAAAmCBAAwAQBAgCYIEAAABP/BzmQgsgBnt7/AAAAAElFTkSuQmCC\n" + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 72ms/step\n", + "I think it's 2\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "# загрузка собственного изображения, повернутого на 90 градусов\n", + "from PIL import Image\n", + "file90_data = Image.open('test90.png')\n", + "file90_data = file90_data.convert('L') # перевод в градации серого\n", + "test90_img = np.array(file90_data)" + ], + "metadata": { + "id": "ZsRQAhIIa_vD" + }, + "execution_count": 294, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "# вывод собственного изображения\n", + "plt.imshow(test90_img, cmap=plt.get_cmap('gray'))\n", + "plt.show()\n", + "# предобработка\n", + "test90_img = test90_img / 255\n", + "test90_img = test90_img.reshape(1, num_pixels)\n", + "# распознавание\n", + "result_3 = model.predict(test90_img)\n", + "print('I think it\\'s ', np.argmax(result_3))" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 465 + }, + "id": "nQnk_zZMbM01", + "outputId": "c6d26580-6556-48d5-9c88-ef7e2964f1d2" + }, + "execution_count": 295, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAaAAAAGdCAYAAABU0qcqAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAGQBJREFUeJzt3X9MVff9x/HX9QdXbbkXEeFyKypqq0mtuDllxNa1kShsMaL+Ybv+oYvRaLGZsraLy6rttoTNJU3TxbT7S9es2s5kauofJoqC2YY2Wo0x64gwOjACribciyho4PP9w2/vehWkF+7lfS8+H8knKfecw317POHZC5ejxznnBADAMBtlPQAA4NFEgAAAJggQAMAEAQIAmCBAAAATBAgAYIIAAQBMECAAgIkx1gPcr7e3V9euXVN6ero8Ho/1OACAGDnn1NHRoWAwqFGj+n+dk3QBunbtmvLy8qzHAAAMUXNzs6ZMmdLv9qT7Flx6err1CACAOBjo63nCArRnzx5Nnz5d48aNU2FhoT777LNvdRzfdgOAkWGgr+cJCdAnn3yiiooK7dq1S59//rkKCgq0fPlyXb9+PRFPBwBIRS4BFi1a5MrLyyMf9/T0uGAw6CorKwc8NhQKOUksFovFSvEVCoUe+vU+7q+A7ty5o/Pnz6u4uDjy2KhRo1RcXKza2toH9u/u7lY4HI5aAICRL+4B+uqrr9TT06OcnJyox3NyctTa2vrA/pWVlfL7/ZHFO+AA4NFg/i64HTt2KBQKRVZzc7P1SACAYRD33wPKysrS6NGj1dbWFvV4W1ubAoHAA/t7vV55vd54jwEASHJxfwWUlpamBQsWqKqqKvJYb2+vqqqqVFRUFO+nAwCkqITcCaGiokLr1q3T9773PS1atEjvvvuuOjs79ZOf/CQRTwcASEEJCdDatWv13//+Vzt37lRra6vmz5+vY8eOPfDGBADAo8vjnHPWQ3xTOByW3++3HgMAMEShUEg+n6/f7ebvggMAPJoIEADABAECAJggQAAAEwQIAGCCAAEATBAgAIAJAgQAMEGAAAAmCBAAwAQBAgCYIEAAABMECABgggABAEwQIACACQIEADBBgAAAJggQAMAEAQIAmCBAAAATBAgAYIIAAQBMECAAgAkCBAAwQYAAACYIEADABAECAJggQAAAEwQIAGCCAAEATBAgAIAJAgQAMEGAAAAmCBAAwAQBAgCYIEAAABMECABgggABAEwQIACACQIEADBBgAAAJggQAMAEAQIAmCBAAAATBAgAYIIAAQBMECAAgAkCBAAwQYAAACYIEADABAECAJggQAAAEwQIAGCCAAEATBAgAICJuAforbfeksfjiVpz5syJ99MAAFLcmER80qefflonTpz435OMScjTAABSWELKMGbMGAUCgUR8agDACJGQnwFduXJFwWBQM2bM0Msvv6ympqZ+9+3u7lY4HI5aAICRL+4BKiws1L59+3Ts2DG9//77amxs1HPPPaeOjo4+96+srJTf74+svLy8eI8EAEhCHuecS+QTtLe3a9q0aXrnnXe0YcOGB7Z3d3eru7s78nE4HCZCADAChEIh+Xy+frcn/N0BGRkZeuqpp1RfX9/ndq/XK6/Xm+gxAABJJuG/B3Tz5k01NDQoNzc30U8FAEghcQ/Qa6+9ppqaGn355Zf6xz/+oVWrVmn06NF66aWX4v1UAIAUFvdvwV29elUvvfSSbty4ocmTJ+vZZ5/VmTNnNHny5Hg/FQAghSX8TQixCofD8vv91mMAAIZooDchcC84AIAJAgQAMEGAAAAmCBAAwAQBAgCYIEAAABMECABgggABAEwQIACACQIEADBBgAAAJggQAMAEAQIAmCBAAAATBAgAYIIAAQBMECAAgAkCBAAwQYAAACYIEADABAECAJggQAAAEwQIAGCCAAEATBAgAIAJAgQAMEGAAAAmCBAAwAQBAgCYIEAAABMECABgggABAEwQIACACQIEADBBgAAAJggQAMAEAQIAmCBAAAATBAgAYGKM9QCPir1798Z8TFlZWczHTJw4MeZjMPwuXLgQ8zHz58+P/yD9aG9vj/kYrj3EildAAAATBAgAYIIAAQBMECAAgAkCBAAwQYAAACYIEADABAECAJggQAAAEwQIAGCCAAEATBAgAIAJj3POWQ/xTeFwWH6/33qMpDCYvxqPx5OASR4dw3WT0GS/2SfnAfEQCoXk8/n63c4rIACACQIEADARc4BOnz6tFStWKBgMyuPx6PDhw1HbnXPauXOncnNzNX78eBUXF+vKlSvxmhcAMELEHKDOzk4VFBRoz549fW7fvXu33nvvPX3wwQc6e/asHnvsMS1fvlxdXV1DHhYAMHLE/C+ilpaWqrS0tM9tzjm9++67+uUvf6mV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\n" + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 91ms/step\n", + "I think it's 7\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "# загрузка собственного изображения, повернутого на 90 градусов\n", + "from PIL import Image\n", + "file902_data = Image.open('test90_2.png')\n", + "file902_data = file902_data.convert('L') # перевод в градации серого\n", + "test902_img = np.array(file902_data)" + ], + "metadata": { + "id": "IXK_VfJqbhJ3" + }, + "execution_count": 297, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "# вывод собственного изображения\n", + "plt.imshow(test902_img, cmap=plt.get_cmap('gray'))\n", + "plt.show()\n", + "# предобработка\n", + "test902_img = test902_img / 255\n", + "test902_img = test902_img.reshape(1, num_pixels)\n", + "# распознавание\n", + "result_4 = model.predict(test902_img)\n", + "print('I think it\\'s ', np.argmax(result_4))" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 465 + }, + "id": "S5WcjVtMb-bp", + "outputId": "40820fd4-8b58-41ba-c41a-374885a6b3f2" + }, + "execution_count": 298, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAaAAAAGdCAYAAABU0qcqAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAGNRJREFUeJzt3X9M1Pcdx/HXqXDVFo4iwnEVKWqrSa0sc8qIq2siUdxi6o8/XNc/7GJstNhMXbvFJWq7LGGzSbN0Mev+0iyrtjMZmvqHiaJgtqFNrcaYdUQYGxg5XE34HqKggc/+YL3uFETg7t7H8Xwkn6Tcfb178+ULzx739avPOecEAECSTbIeAAAwMREgAIAJAgQAMEGAAAAmCBAAwAQBAgCYIEAAABMECABgYor1APfr7+/X9evXlZWVJZ/PZz0OAGCEnHPq6upSKBTSpElDv85JuQBdv35dRUVF1mMAAMaora1NM2fOHPL+lPsVXFZWlvUIAIA4GO7necICtH//fj399NN67LHHVFZWpk8//fSR/hy/dgOA9DDcz/OEBOjjjz/Wzp07tXfvXn3++ecqLS3VypUrdePGjUQ8HQBgPHIJsGTJEldVVRX9uK+vz4VCIVddXT3sn/U8z0lisVgs1jhfnuc99Od93F8B3b17VxcuXFBFRUX0tkmTJqmiokINDQ0PbN/b26tIJBKzAADpL+4B+vLLL9XX16eCgoKY2wsKChQOhx/Yvrq6WoFAILo4Aw4AJgbzs+B27dolz/Oiq62tzXokAEASxP3vAeXl5Wny5Mnq6OiIub2jo0PBYPCB7f1+v/x+f7zHAACkuLi/AsrMzNSiRYtUW1sbva2/v1+1tbUqLy+P99MBAMaphFwJYefOndq4caO+9a1vacmSJfrNb36j7u5u/ehHP0rE0wEAxqGEBGjDhg36z3/+oz179igcDusb3/iGTpw48cCJCQCAicvnnHPWQ/y/SCSiQCBgPQYAYIw8z1N2dvaQ95ufBQcAmJgIEADABAECAJggQAAAEwQIAGCCAAEATBAgAIAJAgQAMEGAAAAmCBAAwAQBAgCYIEAAABMECABgggABAEwQIACACQIEADBBgAAAJggQAMAEAQIAmCBAAAATBAgAYIIAAQBMECAAgAkCBAAwQYAAACYIEADABAECAJggQAAAEwQIAGCCAAEATBAgAIAJAgQAMEGAAAAmCBAAwAQBAgCYIEAAABMECABgggABAEwQIACACQIEADBBgAAAJggQAMAEAQIAmCBAAAATBAgAYIIAAQBMECAAgAkCBAAwQYAAACYIEADABAECAJggQAAAEwQIAGCCAAEATBAgAICJuAfo7bffls/ni1nz58+P99MAAMa5KYl40Oeee06nTp36+kmmJORpAADjWELKMGXKFAWDwUQ8NAAgTSTkPaCrV68qFApp9uzZeuWVV9Ta2jrktr29vYpEIjELAJD+4h6gsrIyHTx4UCdOnNDvfvc7tbS06IUXXlBXV9eg21dXVysQCERXUVFRvEcCAKQgn3POJfIJOjs7VVxcrPfee0+bNm164P7e3l719vZGP45EIkQIANKA53nKzs4e8v6Enx2Qk5OjZ599Vk1NTYPe7/f75ff7Ez0GACDFJPzvAd26dUvNzc0qLCxM9FMBAMaRuAfozTffVH19vf71r3/pb3/7m9auXavJkyfr5ZdfjvdTAQDGsbj/Cu7atWt6+eWXdfPmTc2YMUPf+c53dO7cOc2YMSPeTwUAGMcSfhLCSEUiEQUCAesxAABjNNxJCFwLDgBgggABAEwQIACACQIEADBBgAAAJggQAMAEAQIAmCBAAAATBAgAYIIAAQBMECAAgAkCBAAwQYAAACYIEADABAECAJggQAAAEwQIAGCCAAEATBAgAIAJAgQAMEGAAAAmCBAAwAQBAgCYIEAAABMECABgggABAEwQIACACQIEADBBgAAAJggQAMAEAQIAmCBAAAATBAgAYIIAAQBMECAAgAkCBAAwQYAAACYIEADABAECAJiYYj0A4ss5Zz3ChOPz+axHQIKM5vuJ4+HR8QoIAGCCAAEATBAgAIAJAgQAMEGAAAAmCBAAwAQBAgCYIEAAABMECABgggABAEwQIACACQIEADDBxUiThIuEpi8uWJn6+P5LTbwCAgCYIEAAABMjDtDZs2e1evVqhUIh+Xw+HT16NOZ+55z27NmjwsJCTZ06VRUVFbp69Wq85gUApIkRB6i7u1ulpaXav3//oPfv27dP77//vj744AOdP39ejz/+uFauXKmenp4xDwsASCNuDCS5mpqa6Mf9/f0uGAy6d999N3pbZ2en8/v97vDhw4/0mJ7nOUlpt4D/Z308TrTF19ZmeZ730H0V1/eAWlpaFA6HVVFREb0tEAio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hRG9AqqqqtKhQ4d07NgxZWVlRd/XCQQCmjp1qgKBgDZt2qSdO3cqNzdX2dnZeuONN1ReXq5vf/vbCfkEAADjVDxOLzxw4EB0mzt37rjXX3/dPfnkk27atGlu7dq1rr29/ZGfg9Owx8b682SxUnElk/XnmkpruNOwff/bYSkjEokoEAhYj5ESRvOlGc2FGgEgETzPU3Z29pD3cy04AIAJAgQAMEGAAAAmCBAAwAQBAgCYIEAAABMECABgggABAEwQIACACQIEADBBgAAAJggQAMAEAQIAmBjVv4iK5ODK1gDSGa+AAAAmCBAAwAQBAgCYIEAAABMECABgggABAEwQIACACQIEADBBgAAAJggQAMAEAQIAmCBAAAATBAgAYIIAAQBMECAAgAkCBAAwQYAAACYIEADABAECAJggQAAAEwQIAGCCAAEATBAgAIAJAgQAMEGAAAAmCBAAwAQBAgCYIEAAABMECABgggABAEwQIACACQIEADBBgAAAJggQAMAEAQIAmCBAAAATBAgAYIIAAQBMECAAgAkCBAAwQYAAACZGFKDq6motXrxYWVlZys/P15o1a9TY2BizzYsvviifzxeztmzZEtehAQDj34gCVF9fr6qqKp07d04nT57UvXv3tGLFCnV3d8dst3nzZrW3t0fXvn374jo0AGD8mzKSjU+cOBHz8cGDB5Wfn68LFy5o2bJl0dunTZumYDAYnwkBAGlpTO8BeZ4nScrNzY25/cMPP1ReXp4WLFigXbt26fbt20M+Rm9vryKRSMwCAEwAbpT6+vrc97//fbd06dKY23//+9+7EydOuMuXL7s//vGP7qmnnnJr164d8nH27t3rJLFYLBYrzZbneQ/tyKgDtGXLFldcXOza2toeul1tba2T5Jqamga9v6enx3meF11tbW3mO43FYrFYY1/DBWhE7wF9Zdu2bTp+/LjOnj2rmTNnPnTbsrIySVJTU5PmzJnzwP1+v19+v380YwAAxrERBcg5pzfeeEM1NTWqq6tTSUnJsH/m0qVLkqTCwsJRDQgASE8jClBVVZUOHTqkY8eOKSsrS+FwWJIUCAQ0depUNTc369ChQ/re976n6dOn6/Lly9qxY4eWLVumhQsXJuQTAACMUyN530dD/J7vwIEDzjnnWltb3bJly1xubq7z+/1u7ty57q233hr294D/z/M8899bslgsFmvsa7if/b7/hSVlRCIRBQIB6zEAAGPkeZ6ys7OHvJ9rwQEATBAgAIAJAgQAMEGAAAAmCBAAwAQBAgCYIEAAABMECABgggABAEwQIACACQIEADBBgAAAJggQAMAEAQIAmCBAAAATBAgAYIIAAQBMECAAgAkCBAAwQYAAACYIEADABAECAJggQAAAEwQIAGCCAAEATKRcgJxz1iMAAOJguJ/nKRegrq4u6xEAAHEw3M9zn0uxlxz9/f26fv26srKy5PP5Yu6LRCIqKipSW1ubsrOzjSa0x34YwH4YwH4YwH4YkAr7wTmnrq4uhUIhTZo09OucKUmc6ZFMmjRJM2fOfOg22dnZE/oA+wr7YQD7YQD7YQD7YYD1fggEAsNuk3K/ggMATAwECABgYlwFyO/3a+/evfL7/dajmGI/DGA/DGA/DGA/DBhP+yHlTkIAAEwM4+oVEAAgfRAgAIAJAgQAMEGAAAAmxk2A9u/fr6efflqPPfaYysrK9Omnn1qPlHRvv/22fD5fzJo/f771WAl39uxZrV69WqFQSD6fT0ePHo253zmnPXv2qLCwUFOnTlVFRYWuXr1qM2wCDbcfXn311QeOj8rKSpthE6S6ulqLFy9WVlaW8vPztWbNGjU2NsZs09PTo6qqKk2fPl1PPPGE1q9fr46ODqOJE+NR9sOLL774wPGwZcsWo4kHNy4C9PHHH2vnzp3au3evPv/8c5WWlmrlypW6ceOG9WhJ99xzz6m9vT26/vKXv1iPlHDd3d0qLS3V/v37B71/3759ev/99/XBBx/o/Pnzevzxx7Vy5Ur19PQkedLEGm4/SFJlZWXM8XH48OEkTph49fX1qqqq0rlz53Ty5Endu3dPK1asUHd3d3SbHTt26JNPPtGRI0dUX1+v69eva926dYZTx9+j7AdJ2rx5c8zxsG/fPqOJh+DGgSVLlriqqqrox319fS4UCrnq6mrDqZJv7969rrS01HoMU5JcTU1N9OP+/n4XDAbdu+++G72ts7PT+f1+d/jwYYMJk+P+/eCccxs3bnQvvfSSyTxWbty44SS5+vp659zA1z4jI8MdOXIkus0XX3zhJLmGhgarMRPu/v3gnHPf/e533Y9//GO7oR5Byr8Cunv3ri5cuKCKiorobZMmTVJFRYUaGhoMJ7Nx9epVhUIhzZ49W6+88opaW1utRzLV0tKicDgcc3wEAgGVlZVNyOOjrq5O+fn5mjdvnrZu3aqbN29aj5RQnudJknJzcyVJFy5c0L1792KOh/nz52vWrFlpfTzcvx++8uGHHyovL08LFizQrl27dPv2bYvxhpRyFyO935dffqm+vj4VFBTE3F5QUKB//OMfRlPZKCsr08GDBzVv3jy1t7frnXfe0QsvvKArV64oKyvLejwT4XBYkgY9Pr66b6KorKzUunXrVFJSoubmZv385z/XqlWr1NDQoMmTJ1uPF3f9/f3avn27li5dqgULFkgaOB4yMzOVk5MTs206Hw+D7QdJ+uEPf6ji4mKFQiFdvnxZP/vZz9TY2Kg///nPhtPGSvkA4WurVq2K/vfChQtVVlam4uJi/elPf9KmTZsMJ0Mq+MEPfhD97+eff14LFy7UnDlzVFdXp+XLlxtOlhhVVVW6cuXKhHgf9GGG2g+vvfZa9L+ff/55FRYWavny5WpubtacOXOSPeagUv5XcHl5eZo8efIDZ7F0dHQoGAwaTZUacnJy9Oyzz6qpqcl6FDNfHQMcHw+aPXu28vLy0vL42LZtm44fP64zZ87E/PMtwWBQd+/eVWdnZ8z26Xo8DLUfBlNWViZJKXU8pHyAMjMztWjRItXW1kZv6+/vV21trcrLyw0ns3fr1i01NzersLDQehQzJSUlCgaDMcdHJBLR+fPnJ/zxce3aNd28eTOtjg/nnLZt26aamhqdPn1aJSUlMfcvWrRIGRkZMcdDY2OjWltb0+p4GG4/DObSpUuSlFrHg/VZEI/io48+cn6/3x08eND9/e9/d6+99prLyclx4XDYerSk+slPfuLq6upcS0uL++tf/+oqKipcXl6eu3HjhvVoCdXV1eUuXrzoLl686CS59957z128eNH9+9//ds4596tf/crl5OS4Y8eOucuXL7uXXnrJlZSUuDt37hhPHl8P2w9dXV3uzTffdA0NDa6lpcWdOnXKffOb33TPPPOM6+npsR49brZu3eoCgYCrq6tz7e3t0XX79u3oNlu2bHGzZs1yp0+fdp999pkrLy935eXlhlPH33D7oampyf3iF79wn332mWtpaXHHjh1zs2fPdsuWLTOePNa4CJBzzv32t791s2bNcpmZmW7JkiXu3Llz1iMl3YYNG1xhYaHLzMx0Tz31lNuwYYNramqyHivhzpw54yQ9sDZu3OicGzgVe/fu3a6goMD5/X63fPly19jYaDt0AjxsP9y+fdutWLHCzZgxw2VkZLji4mK3efPmtPuftME+f0nuwIED0W3u3LnjXn/9dffkk0+6adOmubVr17r29na7oRNguP3Q2trqli1b5nJzc53f73dz5851b731lvM8z3bw+/DPMQAATKT8e0AAgPREgAAAJggQAMAEAQIAmCBAAAATBAgAYIIAAQBMECAAgAkCBAAwQYAAACYIEADABAECAJj4L2UpJ2zPG98rAAAAAElFTkSuQmCC\n" + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 75ms/step\n", + "I think it's 7\n" + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/labworks/LW1/report.md b/labworks/LW1/report.md new file mode 100644 index 0000000..3638426 --- /dev/null +++ b/labworks/LW1/report.md @@ -0,0 +1,576 @@ +# Отчет по лабораторной работе №1 +Аникеев Андрей, Чагин Сергей, А-02-22 + +## 1. В среде Google Colab создание нового блокнота. +``` +import os +os.chdir('/content/drive/MyDrive/Colab Notebooks') +``` + +* 1.1 Импорт необходимых модулей. +``` +from tensorflow import keras +import matplotlib.pyplot as plt +import numpy as np +import sklearn +``` + +## 2. Загрузка датасета. +``` +from keras.datasets import mnist +(X_train, y_train), (X_test, y_test) = mnist.load_data() +``` + +## 3. Разбиение набора данных на обучающий и тестовый. +``` +from sklearn.model_selection import train_test_split +``` +* 3.1 Объединение в один набор. +``` +X = np.concatenate((X_train, X_test)) +y = np.concatenate((y_train, y_test)) +``` +* 3.2 Разбиение по вариантам. (5 бригада -> k=4*5-1) +``` +X_train, X_test, y_train, y_test = train_test_split(X, y,test_size = 10000,train_size = 60000, random_state = 19) +``` + +* 3.3 Вывод размерностей. +``` +print('Shape of X train:', X_train.shape) +print('Shape of y train:', y_train.shape) +``` + +> Shape of X train: (60000, 28, 28) +> Shape of y train: (60000,) + +## 4. Вывод обучающих данных. +* 4.1 Выведем первые четыре элемента обучающих данных. +``` +plt.figure(figsize=(10, 3)) +for i in range(4): + plt.subplot(1, 4, i + 1) + plt.imshow(X_train[i], cmap='gray') + plt.title(f'Label: {y_train[i]}') + plt.axis('off') +plt.tight_layout() +plt.show() +``` + +![отображение элементов](1.png) + +## 5. Предобработка данных. +* 5.1 Развернем каждое изображение в вектор. +``` +num_pixels = X_train.shape[1] * X_train.shape[2] +X_train = X_train.reshape(X_train.shape[0], num_pixels) / 255 +X_test = X_test.reshape(X_test.shape[0], num_pixels) / 255 +print('Shape of transformed X train:', X_train.shape) +``` + +> Shape of transformed X train: (60000, 784) + +* 5.2 Переведем метки в one-hot. +``` +from keras.utils import to_categorical + +y_train = to_categorical(y_train) +y_test = to_categorical(y_test) + +print('Shape of transformed y train:', y_train.shape) +num_classes = y_train.shape[1] +``` + +> Shape of transformed y train: (60000, 10) + +## 6. Реализация и обучение однослойной нейронной сети. +``` +from keras.models import Sequential +from keras.layers import Dense +``` + +* 6.1. Создаем модель - объявляем ее объектом класса Sequential, добавляем выходной слой. +``` +model = Sequential() +model.add(Dense(units=num_classes, activation='softmax')) +``` +* 6.2. Компилируем модель. +``` +model.compile(loss='categorical_crossentropy', optimizer='sgd', metrics=['accuracy']) +print(model.summary()) +``` + +>Model: "sequential_6" +>┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓ +>┃ Layer (type) ┃ Output Shape ┃ Param # ┃ +>┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩ +>│ dense_18 (Dense) │ ? │ 0 (unbuilt) │ +>└─────────────────────────────────┴────────────────────────┴───────────────┘ +>Total params: 0 (0.00 B) +>Trainable params: 0 (0.00 B) +>Non-trainable params: 0 (0.00 B) + +* 6.3 Обучаем модель. +``` +H = model.fit(X_train, y_train, validation_split=0.1, epochs=50) +``` + +* 6.4 Выводим график функции ошибки +``` +plt.plot(H.history['loss']) +plt.plot(H.history['val_loss']) +plt.grid() +plt.xlabel('Epochs') +plt.ylabel('loss') +plt.legend(['train_loss', 'val_loss']) +plt.title('Loss by epochs') +plt.show() +``` + +![график функции ошибки](2.png) + +## 7. Применение модели к тестовым данным. +``` +scores = model.evaluate(X_test, y_test) +print('Loss on test data:', scores[0]) +print('Accuracy on test data:', scores[1]) +``` + +>accuracy: 0.9213 - loss: 0.2825 +>Loss on test data: 0.28365787863731384 +>Accuracy on test data: 0.9225000143051147 + +## 8. Добавление одного скрытого слоя. +* 8.1 При 100 нейронах в скрытом слое. +``` +model100 = Sequential() +model100.add(Dense(units=100,input_dim=num_pixels, activation='sigmoid')) +model100.add(Dense(units=num_classes, activation='softmax')) + +model100.compile(loss='categorical_crossentropy', optimizer='sgd', metrics=['accuracy'] + +print(model100.summary()) +``` + +>Model: "sequential_10" +>┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓ +>┃ Layer (type) ┃ Output Shape ┃ Param # ┃ +>┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩ +>│ dense_19 (Dense) │ (None, 100) │ 78,500 │ +>├─────────────────────────────────┼────────────────────────┼───────────────┤ +>│ dense_20 (Dense) │ (None, 10) │ 1,010 │ +>└─────────────────────────────────┴────────────────────────┴───────────────┘ +>Total params: 79,510 (310.59 KB) +>Trainable params: 79,510 (310.59 KB) +>Non-trainable params: 0 (0.00 B) + +* 8.2 Обучение модели. +``` +H = model100.fit(X_train, y_train, validation_split=0.1, epochs=50) +``` + +* 8.3 График функции ошибки. +``` +plt.plot(H.history['loss']) +plt.plot(H.history['val_loss']) +plt.grid() +plt.xlabel('Epochs') +plt.ylabel('loss') +plt.legend(['train_loss', 'val_loss']) +plt.title('Loss by epochs') +plt.show() +``` + +![график функции ошибки](3.png) + +``` +scores = model100.evaluate(X_test, y_test) +print('Loss on test data:', scores[0]) +print('Accuracy on test data:', scores[1]) +``` + +>accuracy: 0.9465 - loss: 0.1946 +>Loss on test data: 0.19745595753192902 +>Accuracy on test data: 0.9442999958992004 + +* 8.4 При 300 нейронах в скрытом слое. +``` +model300 = Sequential() +model300.add(Dense(units=300,input_dim=num_pixels, activation='sigmoid')) +model300.add(Dense(units=num_classes, activation='softmax')) + +model300.compile(loss='categorical_crossentropy', optimizer='sgd', metrics=['accuracy']) + +print(model300.summary()) +``` + +>Model: "sequential_14" +>┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓ +>┃ Layer (type) ┃ Output Shape ┃ Param # ┃ +>┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩ +>│ dense_27 (Dense) │ (None, 300) │ 235,500 │ +>├─────────────────────────────────┼────────────────────────┼───────────────┤ +>│ dense_28 (Dense) │ (None, 10) │ 3,010 │ +>└─────────────────────────────────┴────────────────────────┴───────────────┘ +>Total params: 238,510 (931.68 KB) +>Trainable params: 238,510 (931.68 KB) +>Non-trainable params: 0 (0.00 B) + +* 8.5 Обучение модели. +``` +H = model300.fit(X_train, y_train, validation_split=0.1, epochs=50) +``` + +* 8.6 Вывод графиков функции ошибки. +``` +plt.plot(H.history['loss']) +plt.plot(H.history['val_loss']) +plt.grid() +plt.xlabel('Epochs') +plt.ylabel('loss') +plt.legend(['train_loss', 'val_loss']) +plt.title('Loss by epochs') +plt.show() +``` + +![график функции ошибки](4.png) + +``` +scores = model300.evaluate(X_test, y_test) +print('Loss on test data:', scores[0]) +print('Accuracy on test data:', scores[1]) +``` + +>accuracy: 0.9361 - loss: 0.2237 +>Loss on test data: 0.22660093009471893 +>Accuracy on test data: 0.9348000288009644 + +* 8.7 При 500 нейронах в скрытом слое. +``` +model500 = Sequential() +model500.add(Dense(units=500,input_dim=num_pixels, activation='sigmoid')) +model500.add(Dense(units=num_classes, activation='softmax')) + +model500.compile(loss='categorical_crossentropy', optimizer='sgd', metrics=['accuracy']) + +print(model500.summary()) +``` + +>Model: "sequential_16" +>┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓ +>┃ Layer (type) ┃ Output Shape ┃ Param # ┃ +>┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩ +>│ dense_31 (Dense) │ (None, 500) │ 392,500 │ +>├─────────────────────────────────┼────────────────────────┼───────────────┤ +>│ dense_32 (Dense) │ (None, 10) │ 5,010 │ +>└─────────────────────────────────┴────────────────────────┴───────────────┘ +>Total params: 397,510 (1.52 MB) +>Trainable params: 397,510 (1.52 MB) +>Non-trainable params: 0 (0.00 B) + +* 8.8 Обучение модели. +``` +H = model500.fit(X_train, y_train, validation_split=0.1, epochs=50) +``` + +* 8.9 Вывод графиков функции ошибки. +``` +plt.plot(H.history['loss']) +plt.plot(H.history['val_loss']) +plt.grid() +plt.xlabel('Epochs') +plt.ylabel('loss') +plt.legend(['train_loss', 'val_loss']) +plt.title('Loss by epochs') +plt.show() +``` + +![график функции ошибки](5.png) + +``` +scores = model500.evaluate(X_test, y_test) +print('Loss on test data:', scores[0]) +print('Accuracy on test data:', scores[1]) +``` + +>accuracy: 0.9306 - loss: 0.2398 +>Loss on test data: 0.24357788264751434 +>Accuracy on test data: 0.9304999709129333 + +Как мы видим, лучшая метрика получилась при архитектуре со 100 нейронами в скрытом слое: +Ошибка на тестовых данных: 0.19745595753192902 +Точность тестовых данных: 0.9442999958992004 + +## 9. Добавление второго скрытого слоя. +* 9.1 При 50 нейронах во втором скрытом слое. +``` +model10050 = Sequential() +model10050.add(Dense(units=100,input_dim=num_pixels, activation='sigmoid')) +model10050.add(Dense(units=50,activation='sigmoid')) +model10050.add(Dense(units=num_classes, activation='softmax')) + +model10050.compile(loss='categorical_crossentropy', optimizer='sgd', metrics=['accuracy']) + +print(model10050.summary()) +``` + +>Model: "sequential_17" +>┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓ +>┃ Layer (type) ┃ Output Shape ┃ Param # ┃ +>┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩ +>│ dense_33 (Dense) │ (None, 100) │ 78,500 │ +>├─────────────────────────────────┼────────────────────────┼───────────────┤ +>│ dense_34 (Dense) │ (None, 50) │ 5,050 │ +>├─────────────────────────────────┼────────────────────────┼───────────────┤ +>│ dense_35 (Dense) │ (None, 10) │ 510 │ +>└─────────────────────────────────┴────────────────────────┴───────────────┘ +>Total params: 84,060 (328.36 KB) +>Trainable params: 84,060 (328.36 KB) +>Non-trainable params: 0 (0.00 B) + +* 9.2 Обучаем модель. +``` +H = model10050.fit(X_train, y_train, validation_split=0.1, epochs=50) +``` + +* 9.3 Выводим график функции ошибки. +``` +plt.plot(H.history['loss']) +plt.plot(H.history['val_loss']) +plt.grid() +plt.xlabel('Epochs') +plt.ylabel('loss') +plt.legend(['train_loss', 'val_loss']) +plt.title('Loss by epochs') +plt.show() +``` + +![график функции ошибки](6.png) + +``` +scores = model10050.evaluate(X_test, y_test) +print('Loss on test data:', scores[0]) +print('Accuracy on test data:', scores[1]) +``` + +>accuracy: 0.9439 - loss: 0.1962 +>Loss on test data: 0.1993969976902008 +>Accuracy on test data: 0.9438999891281128 + +* 9.4 При 100 нейронах во втором скрытом слое. +``` +model100100 = Sequential() +model100100.add(Dense(units=100,input_dim=num_pixels, activation='sigmoid')) +model100100.add(Dense(units=100,activation='sigmoid')) +model100100.add(Dense(units=num_classes, activation='softmax')) + +model100100.compile(loss='categorical_crossentropy', optimizer='sgd', metrics=['accuracy']) + +print(model100100.summary()) +``` + +>Model: "sequential_18" +>┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓ +>┃ Layer (type) ┃ Output Shape ┃ Param # ┃ +>┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩ +>│ dense_36 (Dense) │ (None, 100) │ 78,500 │ +>├─────────────────────────────────┼────────────────────────┼───────────────┤ +>│ dense_37 (Dense) │ (None, 100) │ 10,100 │ +>├─────────────────────────────────┼────────────────────────┼───────────────┤ +>│ dense_38 (Dense) │ (None, 10) │ 1,010 │ +>└─────────────────────────────────┴────────────────────────┴───────────────┘ +>Total params: 89,610 (350.04 KB) +>Trainable params: 89,610 (350.04 KB) +>Non-trainable params: 0 (0.00 B) + +* 9.5 Обучаем модель. +``` +H = model100100.fit(X_train, y_train, validation_split=0.1, epochs=50) +``` + +* 9.6 Выводим график функции ошибки. +``` +plt.plot(H.history['loss']) +plt.plot(H.history['val_loss']) +plt.grid() +plt.xlabel('Epochs') +plt.ylabel('loss') +plt.legend(['train_loss', 'val_loss']) +plt.title('Loss by epochs') +plt.show() +``` + +![график функции ошибки](7.png) + +``` +scores = model100100.evaluate(X_test, y_test) +print('Loss on test data:', scores[0]) +print('Accuracy on test data:', scores[1]) +``` + +>accuracy: 0.9449 - loss: 0.1931 +>Loss on test data: 0.19571688771247864 +>Accuracy on test data: 0.9435999989509583 + +## 10. Результаты исследования архитектур нейронной сети. + +| Количество скрытых слоев | Количество нейронов в первом скрытом слое | Количество нейронов во втором скрытом слое | Значение метрики качества классификации | +|--------------------------|-------------------------------------------|--------------------------------------------|------------------------------------------| +| 0 | - | - | 0.9225000143051147 | +| 1 | 100 | - | 0.9442999958992004 | +| 1 | 300 | - | 0.9348000288009644 | +| 1 | 500 | - | 0.9304999709129333 | +| 2 | 100 | 50 | 0.9438999891281128 | +| 2 | 100 | 100 | 0.9435999989509583 | + +Анализ результатов показал, что наивысшую точность (около 94.5%) демонстрируют модели со сравнительно простой архитектурой: однослойная сеть со 100 нейронами и двухслойная конфигурация (100 и 50 нейронов). Усложнение модели за счет увеличения количества слоев или нейронов не привело к улучшению качества, а в некоторых случаях даже вызвало его снижение. Это свидетельствует о том, что для относительно простого набора данных MNIST более сложные архитектуры склонны к переобучению, в то время как простые модели лучше обобщают закономерности. + +## 11. Сохранение наилучшей модели на диск. +``` +model100.save('/content/drive/MyDrive/Colab Notebooks/best_model/model100.keras') +``` + +* 11.1 Загрузка лучшей модели с диска. +``` +from keras.models import load_model +model = load_model('/content/drive/MyDrive/Colab Notebooks/best_model/model100.keras') +``` + +## 12. Вывод тестовых изображений и результатов распознаваний. +``` +n = 111 +result = model.predict(X_test[n:n+1]) +print('NN output:', result) +plt.imshow(X_test[n].reshape(28,28), cmap=plt.get_cmap('gray')) +plt.show() +print('Real mark: ', str(np.argmax(y_test[n]))) +print('NN answer: ', str(np.argmax(result))) +``` + +>NN output: [[1.1728607e-03 5.4896927e-06 3.3185919e-05 2.6362878e-04 4.8558863e-06 +>9.9795568e-01 1.9454242e-07 1.6833146e-05 4.9621973e-04 5.1067746e-05]] +![alt text](8.png) +>Real mark: 5 +>NN answer: 5 + +``` +n = 222 +result = model.predict(X_test[n:n+1]) +print('NN output:', result) +plt.imshow(X_test[n].reshape(28,28), cmap=plt.get_cmap('gray')) +plt.show() +print('Real mark: ', str(np.argmax(y_test[n]))) +print('NN answer: ', str(np.argmax(result))) +``` + +>NN output: [[1.02687673e-05 2.02151591e-06 2.86183599e-03 8.74871985e-05 +>1.51387369e-02 6.32769879e-05 3.97122385e-05 4.11829986e-02 1.06158564e-04 9.40507472e-01]] +![alt text](9.png) +>Real mark: 9 +>NN answer: 9 + +## 13. Тестирование на собственных изображениях. +* 13.1 Загрузка 1 собственного изображения. +``` +from PIL import Image +file_data = Image.open('test.png') +file_data = file_data.convert('L') # перевод в градации серого +test_img = np.array(file_data) +``` + +* 13.2 Вывод собственного изображения. +``` +plt.imshow(test_img, cmap=plt.get_cmap('gray')) +plt.show() +``` + +![1 изображение](10.png) + +* 13.3 Предобработка. +``` +test_img = test_img / 255 +test_img = test_img.reshape(1, num_pixels) +``` + +* 13.4 Распознавание. +``` +result = model.predict(test_img) +print('I think it\'s ', np.argmax(result)) +``` +>I think it's 5 + +* 13.5 Тест 2 изображения. +``` +from PIL import Image +file2_data = Image.open('test_2.png') +file2_data = file2_data.convert('L') # перевод в градации серого +test2_img = np.array(file2_data) +``` + +``` +plt.imshow(test2_img, cmap=plt.get_cmap('gray')) +plt.show() +``` + +![2 изображение](11.png) + +``` +test2_img = test2_img / 255 +test2_img = test2_img.reshape(1, num_pixels) +``` + +``` +result_2 = model.predict(test2_img) +print('I think it\'s ', np.argmax(result_2)) +``` + +>I think it's 2 + +Сеть корректно распознала цифры на изображениях. + +## 14. Тестирование на повернутых изображениях. +``` +from PIL import Image +file90_data = Image.open('test90.png') +file90_data = file90_data.convert('L') # перевод в градации серого +test90_img = np.array(file90_data) + +plt.imshow(test90_img, cmap=plt.get_cmap('gray')) +plt.show() +``` + +![alt text](12.png) + +``` +test90_img = test90_img / 255 +test90_img = test90_img.reshape(1, num_pixels) + +result_3 = model.predict(test90_img) +print('I think it\'s ', np.argmax(result_3)) +``` + +>I think it's 7 + +``` +from PIL import Image +file902_data = Image.open('test90_2.png') +file902_data = file902_data.convert('L') # перевод в градации серого +test902_img = np.array(file902_data) + +plt.imshow(test902_img, cmap=plt.get_cmap('gray')) +plt.show() +``` + +![alt text](13.png) + +``` +test902_img = test902_img / 255 +test902_img = test902_img.reshape(1, num_pixels) + +result_4 = model.predict(test902_img) +print('I think it\'s ', np.argmax(result_4)) +``` + +>I think it's 7 + +Сеть не распознала цифры на изображениях корректно. \ No newline at end of file