From 3390d95ce703174884591f2dfc0de881199bcc8d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9F=D0=B8=D0=B2=D0=BE=D0=B2=D0=B0=D1=80=D0=BE=D0=B2=20?= =?UTF-8?q?=D0=AF=D1=80=D0=BE=D1=81=D0=BB=D0=B0=D0=B2?= Date: Sat, 20 Sep 2025 18:30:00 +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 -> 7002 bytes labworks/LW1/12.png | Bin 0 -> 6754 bytes labworks/LW1/13.png | Bin 0 -> 6710 bytes labworks/LW1/IS_LR1.ipynb | 2492 +++++++++++++++++++++++++++++++++++++ labworks/LW1/report.md | 581 +++++++++ 5 files changed, 3073 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..4dc468265b73fd4676f5b99053b0c7b12996cb89 GIT binary patch literal 7002 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 literal 0 HcmV?d00001 diff --git a/labworks/LW1/12.png b/labworks/LW1/12.png new file mode 100644 index 0000000000000000000000000000000000000000..54f0efc3dc6df5de6e9db66ff5e8e0761012f68d GIT binary patch literal 6754 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" + ], + "image/png": "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T5lHjhwZFixYEP75z3/u8f5NmzZF56nLMQWVlZXhiy++CIsWLdr92o4dO8K9994b+vfvH7p27Zq7BpSq5ry3gb2zr6H0NOd9vbe1br/99rBp06Zw2mmn5b6f+udJdyO6++67w5NPPrnH65MnTw5nnXVWeOihh8KYMWPCmWeeGd58881wxx13hP79++/13OvevXuHYcOGhcsvvzzs3LkzzJs3L3To0CFMnTp19zW33XZbGDZsWBg4cGC49NJLQ69evcLGjRvD0qVLw7vvvhtWrFixz1mXLVsWTj755DBjxozcH+AwceLEcOedd4ZJkyaF1157LfTo0SP85je/CW+99Vb43e9+V/sPCJqpUt3b27ZtC7feemsIIYQ///nPIYQQ5s+fH9q3bx/at28frrjiitp8PNAs2ddQekp1X/fs2TNUVlaGgQMHhlatWoXnn38+3H///WHQoEFh4sSJtf+AqD+N8jPTD3BfHlOwr1/vvPNOVlNTk91www1Zz549s0MOOSQ79thjs8ceeyy76KKLsp49e+5e68tjCm666aZs7ty5Wffu3bNDDjkkGz58eLZixYo97r1u3bps3LhxWZcuXbKysrKsW7du2VlnnZU9+OCDu6+pj+NHNm7cmF100UVZRUVFdsghh2RDhw7Nnnzyyf39yKBZKPW9/eVMe/v1n7NDKbGvofSU+r6+5JJLsv79+2fl5eVZWVlZ1rt37+xHP/pRtn379mI+NopQyLL/+DsTAAAAQL3x33QDAABAIko3AAAAJKJ0AwAAQCJKNwAAACSidAMAAEAiSjcAAAAkonQDAABAIi1re2GhUEg5B1CELMv26332NTRd+7uvQ7C3oSnzPRtKT96+9qQbAAAAElG6AQAAIBGlGwAAABJRugEAACARpRsAAAASUboBAAAgEaUbAAAAElG6AQAAIBGlGwAAABJRugEAACARpRsAAAASUboBAAAgEaUbAAAAElG6AQAAIBGlGwAAABJRugEAACARpRsAAAASUboBAAAgEaUbAAAAElG6AQAAIBGlGwAAABJRugEAACARpRsAAAASadnYA0BKrVq1iua33XZb7hrjx4+P5gsXLozmkyZNiuY7d+7MnQFq4/LLL4/ms2fPzl2jb9++0Xzjxo11mgkA4EDnSTcAAAAkonQDAABAIko3AAAAJKJ0AwAAQCJKNwAAACSidAMAAEAiSjcAAAAk4pxumrXRo0dH82nTpkXzwYMH594jy7Jo3rJlfBvl5c7pprYqKiqi+bXXXhvN27Vrl3uP1q1b12kmIL3evXtH81dffTV3jRYt4s9ZJkyYEM0XLlyYew9oLi677LJofscdd0TzQqGQe4/nnnsumg8bNiyaL168OPcePXv2jOZHH310ND/88MNz75En7+vTG2+8UfQ9SoEn3QAAAJCI0g0AAACJKN0AAACQiNINAAAAiSjdAAAAkIjSDQAAAIko3QAAAJCIc7ppNCNHjozms2bNyl1jwIAB0fzQQw+N5jt27Mi9x4033hjNq6qqovknn3ySew/o0KFD7jVPPvlkNO/atWt9jQM0I1mW5V5TU1MTzW+55ZZovm7dumj+pz/9KXcGaCqGDBkSzfP2VG323Ne//vWi1rjwwgtz71Gs2vx75Jk+fXo0/973vhfN8742lQpPugEAACARpRsAAAASUboBAAAgEaUbAAAAElG6AQAAIBGlGwAAABJRugEAACARpRsAAAASadnYA1C6xo4dG81nzJgRzfv161f0DHfddVc0v/vuu3PXeOGFF4qeA0aPHh3Nf/KTn+SuMWDAgGi+bt26aP6Vr3wl9x5A0/P9738/+T3atGkTza+55ppo/o9//CP3Hlu3bq3LSLDfKioqonnLlipQfRk3blw0nzZtWjR///3363OcJsuTbgAAAEhE6QYAAIBElG4AAABIROkGAACARJRuAAAASETpBgAAgESUbgAAAEjEIXXst7xzh/POwM47E7Q2pk+fHs0XLFgQzaurq4uegQND+/bto/kVV1wRzadOnRrNv/jii9wZTj/99Gh+6qmnRvNrr7029x5AwysUCtG8X79+DTTJvuV9/bngggty15g/f359jQNRlZWV0TzvbOk8v/rVr3Kv2bx5czQfP358UTPUxmuvvRbN887I3rZtW+49unfvHs23b9+eu8aBwJNuAAAASETpBgAAgESUbgAAAEhE6QYAAIBElG4AAABIROkGAACARJRuAAAASMQ53exVbc7z/dnPfhbNa2pqipohb/0QQpg9e3ZR9+DAMGfOnGg+ZMiQ3DWOOeaYaN6uXbtovnr16mg+dOjQ3Bk++uijaJ53TjfQNM2aNSuajxo1qoEm2be1a9dGc2dw05Qcd9xxSdf/wx/+kHvNI488Es2nT59eT9PQHHjSDQAAAIko3QAAAJCI0g0AAACJKN0AAACQiNINAAAAiSjdAAAAkIjSDQAAAIko3QAAAJBIy8YegMYxduzYaD516tTcNWpqaqJ5lmXR/JxzzonmS5cuzZ0BamPt2rXRvEWL/D9/vP/++6P5ihUrovnLL78czT/66KPcGfJs27Ytmu/atSt3jbZt2xY9B1A35557bmOPkGv16tWNPQI0mPfffz+af/zxxw00CaXCk24AAABIROkGAACARJRuAAAASETpBgAAgESUbgAAAEhE6QYAAIBElG4AAABIxDndJapjx47RPO+M7DZt2uTe48MPP4zmt99+ezR/+umno/knn3ySOwPUxoIFCxp7hAYxZ86caD5x4sTcNc4444xovmrVqjrNBAe69u3b515TVlaWfpAiHShfRyGEEGbPnh3Nn3rqqdw1Bg0aFM0rKyuj+ZFHHpl7jz/+8Y/RfOHChblr0DA86QYAAIBElG4AAABIROkGAACARJRuAAAASETpBgAAgESUbgAAAEhE6QYAAIBEnNPdDHXu3Dn3mp///OfR/Lzzzit6jiVLlkTzqqqqaO4cbqhfRx11VDTv3r177hrl5eX1NQ4QQrjwwgtzr+nRo0cDTBL3yiuvRPM1a9Y00CQQV5v90qFDh6Lucf3110fzU045JXeNvn37RvPNmzdH82HDhuXeo0uXLtG8T58+0TxvXy9evDh3BmrHk24AAABIROkGAACARJRuAAAASETpBgAAgESUbgAAAEhE6QYAAIBElG4AAABIpJBlWVarCwuF1LPw/yoqKqL5jTfemLvGxRdfXNQMK1euzL1m0KBBRd2D+lPLbbwH+7q0HHPMMdH8pZdeyl1j2bJl0Xzo0KF1GYki7O++DsHebkgjRoyI5kuWLMldo6ampp6m2bcWLeLPWR577LFo/u1vf7s+xzmg+Z4dd9hhh0XzFStW5K5Rm7O8CWHDhg3RfN68eblrzJ07t56mad7y9rUn3QAAAJCI0g0AAACJKN0AAACQiNINAAAAiSjdAAAAkIjSDQAAAIko3QAAAJCI0g0AAACJtGzsAdhT//79o/mECROSz3DDDTckvwfQ9KxataqxR4BmZcyYMdG8pqYmd40sy+prnP2eY/Xq1clngNooKyuL5j169GigSUpf165do/lVV12Vu0be15abb765TjOVKk+6AQAAIBGlGwAAABJRugEAACARpRsAAAASUboBAAAgEaUbAAAAElG6AQAAIBHndDdB9913XzSvj/M8N2zYEM2HDBmSu0beHEuWLInmmzZtyr0H0LCc1Qv/7eCDD47m7du3b5hBivToo49G85kzZzbMINAMvPzyy9F8/vz5uWusWbOmvsbZb5deemk0HzNmTDTv0qVL7j2uvvrqaL5o0aJoXl1dnXuPUuBJNwAAACSidAMAAEAiSjcAAAAkonQDAABAIko3AAAAJKJ0AwAAQCJKNwAAACTinO4EjjzyyGj+xBNPRPOuXbtG8/o4pzvvHlOmTMldo1AoRPOtW7dG86qqqmh+yy235M6Qdw8AKEaPHj2i+QUXXNBAkxTnrbfeiuaffvppA00C6RV7zvbDDz8czbds2VLnmRrD888/H80//vjjaD5u3Ljce+Sd5T1x4sRoPnv27Nx7lAJPugEAACARpRsAAAASUboBAAAgEaUbAAAAElG6AQAAIBGlGwAAABJRugEAACARpRsAAAASadnYA5Siyy67LJr36dOngSbZfxs2bMi9plu3btG8Xbt20Xz69OnRvFevXrkz/OAHP4jmn3zySe4aUCrOOOOMxh4BSk5VVVU0LxQK0bxFi/znGzU1NXWaaX9ceeWVye8B9WHbtm3RfPDgwblrvPPOO9F8y5YtdZqpVE2aNCmad+/ePXeNM888M5rnfe15+umnc++xbNmy3GuaOk+6AQAAIBGlGwAAABJRugEAACARpRsAAAASUboBAAAgEaUbAAAAElG6AQAAIBHndNdR3nl2IYRw+eWXN8AkxVm+fHk0HzNmTO4avXv3jua//e1vo3nXrl2j+cknn5w7Q3l5eTR3TjcHkjZt2jT2CNDsjBgxIpoPGzYsmmdZFs1rcwZ33hp538ucwU0p2bVrVzR/6aWXGmYQwqpVq3KvyTunu2PHjtG8srIy9x7O6QYAAAD2SekGAACARJRuAAAASETpBgAAgESUbgAAAEhE6QYAAIBElG4AAABIxDnd/+O4446L5uPGjctd47DDDitqhgULFkTzsrKy3DUmTJgQzU844YRo/t577+Xe44EHHojm3bp1y12j2Bk+++yzou4BwIEt73z7vLwhbNiwIZovXLiwgSYBmpMePXpE83vvvTeaDxkypD7HOaB50g0AAACJKN0AAACQiNINAAAAiSjdAAAAkIjSDQAAAIko3QAAAJCI0g0AAACJOKf7f4waNSqaDx48OHeNLMuKmmHTpk3R/P33389dY+DAgdH8+OOPr9NMe1NZWRnN8z6HRx99NJr/4he/yJ2huro69xqoD3ln21dUVBS1/tFHH517zYABA6J5bb4+5bnyyiujed++fYta/4MPPsi9ZsaMGdH8888/L2oG+E/nnHNOY48AsIezzjor95phw4ZF84svvjiad+zYsU4zsf886QYAAIBElG4AAABIROkGAACARJRuAAAASETpBgAAgESUbgAAAEhE6QYAAIBElG4AAABIpGVjD9DQOnfuHM0vueSSBppk36699tponmVZ8hn+9a9/5V7zxBNPRPNZs2ZF85dffjma19TU5M4AtXHbbbdF83HjxuWu0aZNm2jeokVp/Blm165do/mJJ54Yzd94441ofvjhh+fO8N3vfjeaL168OHcNCCGEY445Jveas88+O5oXCoWiZqjN14a873fPPfdcUTNAczJt2rRovnXr1qLv0bFjx2g+YMCAaD58+PCiZ8hTUVGRe01ZWVnyOYq1cuXKaP6Xv/ylgSZpXKXxu0QAAABogpRuAAAASETpBgAAgESUbgAAAEhE6QYAAIBElG4AAABIROkGAACARA64c7p37NgRzR9++OFofuWVV9bjNI3nlVdeieZ33XVX7hq33HJLfY0DSf3973+P5t26dSv6HmvXro3mK1asKPoexbrqqqtyrzn22GOj+ZlnnhnN169fX5eRIKlvfOMbudd06NAhmmdZVtQMeWdwhxDCkiVLonmp/N4DaqNz587R/Prrr2+gSaiNvHO4v/Wtb0XzDz74oD7HabI86QYAAIBElG4AAABIROkGAACARJRuAAAASETpBgAAgESUbgAAAEhE6QYAAIBEClktD6AsFAqpZ2kSDjvssGg+ZsyY3DXGjx9f1AwDBw6M5vfdd1/uGsuXL4/mjzzySDTfvn177j1oOvb3HNkDZV/zbyNGjMi95p577onmeed4b968uU4zsW/FnA9tb/9bz549c695/vnno/kRRxxR1Ay1+d/iO9/5TjR/7LHHipqBpsX37Libb745mv/whz9soElK35o1a6L5aaedlrtG3jnbO3furNNMzVXevvakGwAAABJRugEAACARpRsAAAASUboBAAAgEaUbAAAAElG6AQAAIBGlGwAAABJRugEAACCRQpZ3kveXFxYKqWcB9lMtt/Ee7GtouvZ3X4dgb9fFhRdeGM2nTp0azfv16xfNn3vuudwZRo8eHc23bduWuwbNh+/ZcbNmzYrmu3btKvoew4cPL+r9Xbp0yb2mb9++0fztt9+O5osXL869x+uvvx7N77///mie9//F+visDxR5n6Un3QAAAJCI0g0AAACJKN0AAACQiNINAAAAiSjdAAAAkIjSDQAAAIko3QAAAJCIc7qhBDjzE0qPc7qhNPmeDaXHOd0AAADQSJRuAAAASETpBgAAgESUbgAAAEhE6QYAAIBElG4AAABIROkGAACARJRuAAAASETpBgAAgESUbgAAAEhE6QYAAIBElG4AAABIROkGAACARJRuAAAASETpBgAAgESUbgAAAEhE6QYAAIBElG4AAABIROkGAACARJRuAAAASETpBgAAgESUbgAAAEhE6QYAAIBElG4AAABIROkGAACARJRuAAAASETpBgAAgESUbgAAAEhE6QYAAIBElG4AAABIROkGAACARJRuAAAASKSQZVnW2EMAAABAKfKkGwAAABJRugEAACARpRsAAAASUboBAAAgEaUbAAAAElG6AQAAIBGlGwAAABJRugEAACARpRsAAAAS+T8mTLiIW87riAAAAABJRU5ErkJggg==\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": "NGKvRZ8fbypE", + "outputId": "9530fb9b-df65-4738-e34e-ea73cc1adae8" + }, + "execution_count": 7, + "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": "dKZDth4wdMoi", + "outputId": "72e92b20-25a1-4293-c6b9-9dca3fb72ce6" + }, + "execution_count": 8, + "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": "HdlasD8UdSFr" + }, + "execution_count": 9, + "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": "f7EFobe4dTjU" + }, + "execution_count": 10, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "# вывод информации об архитектуре модели\n", + "print(model.summary())" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 186 + }, + "id": "Fr_Lnir_eTUS", + "outputId": "de050f54-4c8f-4f32-bb22-2b6703d07696" + }, + "execution_count": 11, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "\u001b[1mModel: \"sequential\"\u001b[0m\n" + ], + "text/html": [ + "
Model: \"sequential\"\n",
+              "
\n" + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓\n", + "┃\u001b[1m \u001b[0m\u001b[1mLayer (type) \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1mOutput Shape \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1m Param #\u001b[0m\u001b[1m \u001b[0m┃\n", + "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩\n", + "│ dense (\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 (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": "P4jek-2sedhi", + "outputId": "e2221728-d3cf-4d77-ce91-97fef5e08421" + }, + "execution_count": 12, + "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[1m7s\u001b[0m 3ms/step - accuracy: 0.7052 - loss: 1.1704 - val_accuracy: 0.8648 - val_loss: 0.5294\n", + "Epoch 2/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m8s\u001b[0m 2ms/step - accuracy: 0.8749 - loss: 0.4901 - val_accuracy: 0.8818 - val_loss: 0.4435\n", + "Epoch 3/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 2ms/step - accuracy: 0.8904 - loss: 0.4153 - val_accuracy: 0.8877 - val_loss: 0.4085\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.8953 - loss: 0.3858 - val_accuracy: 0.8927 - val_loss: 0.3866\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.8984 - loss: 0.3630 - val_accuracy: 0.8950 - val_loss: 0.3737\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.9014 - loss: 0.3549 - val_accuracy: 0.8977 - val_loss: 0.3633\n", + "Epoch 7/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.9036 - loss: 0.3455 - val_accuracy: 0.8998 - val_loss: 0.3553\n", + "Epoch 8/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 2ms/step - accuracy: 0.9061 - loss: 0.3383 - val_accuracy: 0.8998 - val_loss: 0.3495\n", + "Epoch 9/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 3ms/step - accuracy: 0.9086 - loss: 0.3254 - val_accuracy: 0.9020 - val_loss: 0.3454\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.9077 - loss: 0.3282 - val_accuracy: 0.9027 - val_loss: 0.3392\n", + "Epoch 11/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.9085 - loss: 0.3243 - val_accuracy: 0.9033 - val_loss: 0.3359\n", + "Epoch 12/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 3ms/step - accuracy: 0.9088 - loss: 0.3229 - val_accuracy: 0.9050 - val_loss: 0.3331\n", + "Epoch 13/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.3137 - val_accuracy: 0.9067 - val_loss: 0.3293\n", + "Epoch 14/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 3ms/step - accuracy: 0.9139 - loss: 0.3097 - val_accuracy: 0.9073 - val_loss: 0.3271\n", + "Epoch 15/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 3ms/step - accuracy: 0.9127 - loss: 0.3052 - val_accuracy: 0.9067 - val_loss: 0.3254\n", + "Epoch 16/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.9148 - loss: 0.3067 - val_accuracy: 0.9088 - val_loss: 0.3222\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.9136 - loss: 0.3047 - val_accuracy: 0.9095 - val_loss: 0.3213\n", + "Epoch 18/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 3ms/step - accuracy: 0.9157 - loss: 0.3049 - val_accuracy: 0.9087 - val_loss: 0.3198\n", + "Epoch 19/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.9178 - loss: 0.2938 - val_accuracy: 0.9097 - val_loss: 0.3177\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.9141 - loss: 0.3037 - val_accuracy: 0.9105 - val_loss: 0.3158\n", + "Epoch 21/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 3ms/step - accuracy: 0.9168 - loss: 0.2952 - val_accuracy: 0.9107 - val_loss: 0.3149\n", + "Epoch 22/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.9179 - loss: 0.2888 - val_accuracy: 0.9125 - val_loss: 0.3139\n", + "Epoch 23/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 3ms/step - accuracy: 0.9177 - loss: 0.2941 - val_accuracy: 0.9120 - val_loss: 0.3125\n", + "Epoch 24/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.9165 - loss: 0.2934 - val_accuracy: 0.9125 - val_loss: 0.3116\n", + "Epoch 25/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.9200 - loss: 0.2852 - val_accuracy: 0.9127 - val_loss: 0.3105\n", + "Epoch 26/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.9203 - loss: 0.2877 - val_accuracy: 0.9127 - val_loss: 0.3093\n", + "Epoch 27/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 2ms/step - accuracy: 0.9185 - loss: 0.2870 - val_accuracy: 0.9137 - val_loss: 0.3085\n", + "Epoch 28/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 2ms/step - accuracy: 0.9200 - loss: 0.2881 - val_accuracy: 0.9137 - val_loss: 0.3074\n", + "Epoch 29/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 3ms/step - accuracy: 0.9200 - loss: 0.2854 - val_accuracy: 0.9127 - val_loss: 0.3078\n", + "Epoch 30/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.9200 - loss: 0.2857 - val_accuracy: 0.9138 - val_loss: 0.3063\n", + "Epoch 31/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 2ms/step - accuracy: 0.9216 - loss: 0.2837 - val_accuracy: 0.9140 - val_loss: 0.3061\n", + "Epoch 32/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 3ms/step - accuracy: 0.9207 - loss: 0.2842 - val_accuracy: 0.9145 - val_loss: 0.3049\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.2792 - val_accuracy: 0.9138 - val_loss: 0.3048\n", + "Epoch 34/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.9220 - loss: 0.2804 - val_accuracy: 0.9148 - val_loss: 0.3034\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.9208 - loss: 0.2800 - val_accuracy: 0.9143 - val_loss: 0.3033\n", + "Epoch 36/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.9236 - loss: 0.2748 - val_accuracy: 0.9150 - val_loss: 0.3031\n", + "Epoch 37/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.9230 - loss: 0.2763 - val_accuracy: 0.9148 - val_loss: 0.3018\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.9225 - loss: 0.2761 - val_accuracy: 0.9158 - val_loss: 0.3014\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.9234 - loss: 0.2792 - val_accuracy: 0.9153 - val_loss: 0.3017\n", + "Epoch 40/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 2ms/step - accuracy: 0.9224 - loss: 0.2742 - val_accuracy: 0.9157 - val_loss: 0.3012\n", + "Epoch 41/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 3ms/step - accuracy: 0.9215 - loss: 0.2789 - val_accuracy: 0.9160 - val_loss: 0.3010\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.9233 - loss: 0.2786 - val_accuracy: 0.9150 - val_loss: 0.2998\n", + "Epoch 43/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.9228 - loss: 0.2766 - val_accuracy: 0.9165 - val_loss: 0.2997\n", + "Epoch 44/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 3ms/step - accuracy: 0.9238 - loss: 0.2741 - val_accuracy: 0.9163 - val_loss: 0.2988\n", + "Epoch 45/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 3ms/step - accuracy: 0.9218 - loss: 0.2820 - val_accuracy: 0.9157 - val_loss: 0.3000\n", + "Epoch 46/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.9230 - loss: 0.2773 - val_accuracy: 0.9158 - val_loss: 0.2996\n", + "Epoch 47/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 3ms/step - accuracy: 0.9245 - loss: 0.2670 - val_accuracy: 0.9155 - val_loss: 0.2980\n", + "Epoch 48/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.9255 - loss: 0.2701 - val_accuracy: 0.9172 - val_loss: 0.2982\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.9260 - loss: 0.2650 - val_accuracy: 0.9152 - val_loss: 0.2985\n", + "Epoch 50/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 3ms/step - accuracy: 0.9238 - loss: 0.2699 - val_accuracy: 0.9158 - val_loss: 0.2973\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": "JUeBjeS0ffg2", + "outputId": "41a51adf-216d-43fb-feaf-f8e8ab8e3bbd" + }, + "execution_count": 13, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjcAAAHHCAYAAABDUnkqAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAZNhJREFUeJzt3Xd4VFXCBvD3Tp9J74UEQu8EDMUAKkgVRVFcQBEBV1kVVjTqrqxKcVVUVsSCoKuo32JhRVFXioQgKE16D6ETWhqQTOrU+/1xZyYZEiAJM3fI5P09z31mbp0zJwFezjn3HkEURRFEREREfkLh6wIQEREReRLDDREREfkVhhsiIiLyKww3RERE5FcYboiIiMivMNwQERGRX2G4ISIiIr/CcENERER+heGGiIiI/ArDDRH51IQJExAYGOjrYvicIAiYMmWKr4tB5BcYboj81Oeffw5BELB9+3ZfF4WISFYMN0RERORXGG6IiIjIrzDcEDVyu3btwh133IHg4GAEBgZiwIAB2LJli9sxFosFs2bNQuvWraHT6RAREYG+ffsiPT3ddUxOTg4mTpyIhIQEaLVaxMXF4Z577sHJkydrVY7jx49jyJAhCAgIQHx8PF555RWIoggAEEURSUlJuOeee6qdV1FRgZCQEPzlL3+55mcsXrwYKSkp0Ov1CA8Px5gxY3D69Gm3Y/r164dOnTphx44d6N27N/R6PZo3b46FCxdWu15eXh7+/Oc/IyYmBjqdDsnJyfjiiy+qHWe32/Huu++ic+fO0Ol0iIqKwtChQ2vsMvzhhx/QqVMnaLVadOzYEatWrXLbX1xcjKeffhpJSUnQarWIjo7GoEGDsHPnzmt+f6LGguGGqBE7cOAAbrnlFuzZswd/+9vf8PLLL+PEiRPo168f/vjjD9dxM2fOxKxZs9C/f3988MEHePHFF9G0aVO3f1BHjhyJZcuWYeLEifjwww/x1FNPobi4GNnZ2dcsh81mw9ChQxETE4O33noLKSkpmDFjBmbMmAFAGmz70EMPYeXKlbh48aLbuf/73/9gNBrx0EMPXfUzXnvtNTz88MNo3bo15s6di6effhoZGRm49dZbUVhY6HbspUuXMGzYMKSkpOCtt95CQkICnnjiCSxatMh1THl5Ofr164f//Oc/GDt2LObMmYOQkBBMmDAB7777rtv1/vznP+Ppp59GYmIi3nzzTbzwwgvQ6XTVQuSGDRvw5JNPYsyYMXjrrbdQUVGBkSNH4sKFC65jHn/8cSxYsAAjR47Ehx9+iOeeew56vR6ZmZnXrGeiRkMkIr/02WefiQDEbdu2XfGYESNGiBqNRjx27Jhr27lz58SgoCDx1ltvdW1LTk4W77zzzite59KlSyIAcc6cOXUu5/jx40UA4l//+lfXNrvdLt55552iRqMR8/PzRVEUxaysLBGAuGDBArfz7777bjEpKUm02+1X/IyTJ0+KSqVSfO2119y279u3T1SpVG7bb7vtNhGA+Pbbb7u2mUwmsWvXrmJ0dLRoNptFURTFefPmiQDExYsXu44zm81iamqqGBgYKBqNRlEURXHt2rUiAPGpp56qVq6qZQYgajQa8ejRo65te/bsEQGI77//vmtbSEiIOHny5Ct+VyISRbbcEDVSNpsNq1evxogRI9CiRQvX9ri4ODz44IPYsGEDjEYjACA0NBQHDhzAkSNHaryWXq+HRqPBunXrcOnSpXqVp+pt0M7bos1mM9asWQMAaNOmDXr16oUvv/zSddzFixexcuVKjB07FoIgXPHa33//Pex2O0aNGoWCggLXEhsbi9atW+PXX391O16lUrl1c2k0GvzlL39BXl4eduzYAQBYsWIFYmNj8cADD7iOU6vVeOqpp1BSUoL169cDAL777jsIguBqharq8jIPHDgQLVu2dK136dIFwcHBOH78uGtbaGgo/vjjD5w7d+6K35eosWO4IWqk8vPzUVZWhrZt21bb1759e9jtdtd4lFdeeQWFhYVo06YNOnfujOeffx579+51Ha/VavHmm29i5cqViImJwa233oq33noLOTk5tSqLQqFwC1iAFGYAuI3Zefjhh7Fx40acOnUKAPDtt9/CYrFg3LhxV73+kSNHIIoiWrdujaioKLclMzMTeXl5bsfHx8cjICDgquU5deoUWrduDYXC/a/R9u3bu/YDwLFjxxAfH4/w8PBrVQOaNm1abVtYWJhbYHzrrbewf/9+JCYmomfPnpg5c6Zb+CEihhsiqoVbb70Vx44dw6JFi9CpUyd88sknuOmmm/DJJ5+4jnn66adx+PBhzJ49GzqdDi+//DLat2+PXbt2eawcY8aMgVqtdrXeLF68GN27d68xoFVlt9shCAJWrVqF9PT0astHH33ksTJeD6VSWeN20TGwGgBGjRqF48eP4/3330d8fDzmzJmDjh07YuXKlXIVk+iGx3BD1EhFRUXBYDAgKyur2r5Dhw5BoVAgMTHRtS08PBwTJ07E119/jdOnT6NLly6YOXOm23ktW7bEs88+i9WrV2P//v0wm814++23r1kWu91erfXh8OHDAICkpCS3Mtx555348ssvcerUKWzcuPGarTbOcomiiObNm2PgwIHVlptvvtnt+HPnzqG0tPSq5WnWrBmOHDkCu93udtyhQ4dc+52ffe7cuWoDoa9HXFwcnnzySfzwww84ceIEIiIi8Nprr3ns+kQNHcMNUSOlVCoxePBg/Pjjj25dP7m5ufjqq6/Qt29fBAcHA4Db3ToAEBgYiFatWsFkMgEAysrKUFFR4XZMy5YtERQU5DrmWj744APXe1EU8cEHH0CtVmPAgAFux40bNw4HDx7E888/D6VSiTFjxlzz2vfddx+USiVmzZrl1gri/KzLv5/VanVrzTGbzfjoo48QFRWFlJQUAMCwYcOQk5ODJUuWuJ33/vvvIzAwELfddhsA6S4yURQxa9asauW6vCzXYrPZUFRU5LYtOjoa8fHxta5nosZA5esCEJF3LVq0qNqzUgBg6tSpePXVV5Geno6+ffviySefhEqlwkcffQSTyYS33nrLdWyHDh3Qr18/pKSkIDw8HNu3b8fSpUtdg4APHz6MAQMGYNSoUejQoQNUKhWWLVuG3NzcWoUPnU6HVatWYfz48ejVqxdWrlyJ5cuX4x//+AeioqLcjr3zzjsRERGBb7/9FnfccQeio6Ovef2WLVvi1VdfxbRp03Dy5EmMGDECQUFBOHHiBJYtW4ZJkybhueeecx0fHx+PN998EydPnkSbNm2wZMkS7N69Gx9//DHUajUAYNKkSfjoo48wYcIE7NixA0lJSVi6dCk2btyIefPmISgoCADQv39/jBs3Du+99x6OHDmCoUOHwm634/fff0f//v3rNJ9UcXExEhIScP/99yM5ORmBgYFYs2YNtm3bVqsWMqJGw3c3ahGRNzlvBb/Scvr0aVEURXHnzp3ikCFDxMDAQNFgMIj9+/cXN23a5HatV199VezZs6cYGhoq6vV6sV27duJrr73mui26oKBAnDx5stiuXTsxICBADAkJEXv16iX+97//vWY5x48fLwYEBIjHjh0TBw8eLBoMBjEmJkacMWOGaLPZ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iMh3LGXA6/F1OkUBINQTn/2Pc4Am4JqHhYWF4Y477sBXX32FAQMGAACWLl2KyMhI9O/fHwqFAsnJya7j//nPf2LZsmX46aefrjgfY2199dVXqKiowP/93/8hIEAq6wcffIDhw4fjzTffhFqtRlFREe666y60bNkSANC+fXvX+dnZ2Xj++efRrl07AEDr1q2vqzzewJYbD3LeLVXObikiIrqGsWPH4rvvvoPJZAIAfPnllxgzZgwUCgVKSkrw3HPPoX379ggNDUVgYCAyMzM90nKTmZmJ5ORkV7ABgD59+sButyMrKwvh4eGYMGEChgwZguHDh+Pdd9/F+fPnXcempaXh0UcfxcCBA/HGG2/g2LFj110mT2PLjQexW4qI6AagNkgtKHVgt9thLC5GcFAQFIrr+H+/2lDrQ4cPHw5RFLF8+XL06NEDv//+O9555x0AwHPPPYf09HT861//QqtWraDX63H//ffDbDbXv2x18Nlnn+Gpp57CqlWrsGTJErz00ktIT0/HzTffjJkzZ+LBBx/E8uXLsXLlSsyYMQPffPMN7r33XlnKVhsMNx7k6pZiyw0Rke8IQq26htzY7YDaJp13PeGmDnQ6He677z58+eWXOHr0KNq2bYubbroJALBx40ZMmDDBFRhKSkpw8uRJj3xu+/bt8fnnn6O0tNTVerNx40YoFAq0bdvWdVy3bt3QrVs3TJs2Dampqfjqq69w8803AwDatGmDNm3a4JlnnsEDDzyAzz777IYKN+yW8iBnt5TZaofNXrtBZURE1HiNHTsWy5cvx6JFizB27FjX9tatW+P777/H7t27sWfPHjz44IPV7qy6ns/U6XQYP3489u/fj19//RV//etfMW7cOMTExODEiROYNm0aNm/ejFOnTmH16tU4cuQI2rdvj/LyckyZMgXr1q3DqVOnsHHjRmzbts1tTM6NgC03HuRsuQGAMrMVQboba/Q4ERHdWG6//XaEh4cjKysLDz74oGv73Llz8cgjj6B3796IjIzE3//+dxiNRo98psFgwC+//IKpU6eiR48eMBgMGDlyJObOnevaf+jQIXzxxRe4cOEC4uLiMHnyZPzlL3+B1WrFhQsX8PDDDyM3NxeRkZG47777MGvWLI+UzVMYbjxIq1JAgAgRAsrNNoYbIiK6KoVCgXPnqo8PSkpKwtq1a922TZ482W29Lt1U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Pi4NERGRf6tXuHn++edhNBoBAPv27cOzzz6LYcOG4cSJE0hLS/NoAf2B824pUQRMVruPS0NEROTf6tUtdeLECXTo0AEA8N133+Guu+7C66+/jp07d7oGF1Ml50P8AGncjc4xHQMRERF5Xr1abjQaDcrKygAAa9asweDBgwEA4eHhrhYdqqRUCNCopKrmzOBERETeVa+Wm759+yItLQ19+vTB1q1bsWTJEgDA4cOHkZCQ4NEC+guDRgmz1c5n3RAREXlZvVpuPvjgA6hUKixduhQLFixAkyZNAAArV67E0KFDPVpAf+GcGZy3gxMREXlXvVpumjZtip9//rna9nfeeee6C+SvOAUDERGRPOoVbgDAZrPhhx9+QGZmJgCgY8eOuPvuu6FUNtLBsjYLkJ+FsNKjNe52Dirm5JlERETeVa9wc/ToUQwbNgxnz55F27ZtAQCzZ89GYmIili9fjpYtW3q0kA3CsbVQfzUKybpEAE9V282WGyIiInnUa8zNU089hZYtW+L06dPYuXMndu7ciezsbDRv3hxPPVX9H/ZGIaodACDIdE5qxbkM55ciIiKSR71abtavX48tW7YgPDzctS0iIgJvvPEG+vTp47HCNSghiRA1AVCYS2G7eByI7+S2mzODExERyaNeLTdarRbFxcXVtpeUlECj0Vx3oRokhQJipNR6IxQcqrabk2cSERHJo17h5q677sKkSZPwxx9/QBRFiKKILVu24PHHH8fdd9/t6TI2HI6uKSEvs9ouTp5JREQkj3qFm/feew8tW7ZEamoqdDoddDodevfujVatWmHevHkeLmLDITrDTX71lhuOuSEiIpJHvcbchIaG4scff8TRo0ddt4K3b98erVq18mjhGhoxqj2AK3RLVZkZnIiIiLyn1uHmWrN9//rrr673c+fOrX+JGjAxSrotHhePA5YKQK1z7XO13JjYLUVERORNtQ43u3btqtVxgiDUuzANXmAszMoAaGylwIUjQGxn1y69hgOKiYiI5FDrcFO1ZYauQBBg1CUgsjQLyMt0CzfOuaXK2S1FRETkVfUaUExXVqyXJhFF3kG37RxQTEREJA+GGw8r1iVIb/LcBxVz+gUiIiJ5MNx4mNEVbi5vuXFMnMnn3BAREXkVw42HubqlCk8BphLXdnZLERERyYPhxsPMqiCIAdHSSkGWa7uec0sRERHJ4oYI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\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": "9h5aG6MtfnjN", + "outputId": "ded8c50d-afb6-4e6b-a9fe-79c64881e246" + }, + "execution_count": 14, + "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.9313 - loss: 0.2648\n", + "Loss on test data: 0.2729383409023285\n", + "Accuracy on test data: 0.9290000200271606\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "# сохранение модели на диск\n", + "model.save('/content/drive/MyDrive/Colab Notebooks/models/model_zero_hide.keras')" + ], + "metadata": { + "id": "31ngORxnfsJb" + }, + "execution_count": 15, + "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": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "GuUp0o_nf_Oq", + "outputId": "6e4b9d68-d31c-493c-ac14-f0305876ce53" + }, + "execution_count": 16, + "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(model100.summary())" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 219 + }, + "id": "1RJG5PfSgSdz", + "outputId": "2026dabc-92a1-41e5-a369-1a52df49fea0" + }, + "execution_count": 17, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "\u001b[1mModel: \"sequential_1\"\u001b[0m\n" + ], + "text/html": [ + "
Model: \"sequential_1\"\n",
+              "
\n" + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓\n", + "┃\u001b[1m \u001b[0m\u001b[1mLayer (type) \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1mOutput Shape \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1m Param #\u001b[0m\u001b[1m \u001b[0m┃\n", + "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩\n", + "│ dense_1 (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m100\u001b[0m) │ \u001b[38;5;34m78,500\u001b[0m │\n", + "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", + "│ dense_2 (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m10\u001b[0m) │ \u001b[38;5;34m1,010\u001b[0m │\n", + "└─────────────────────────────────┴────────────────────────┴───────────────┘\n" + ], + "text/html": [ + "
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓\n",
+              "┃ Layer (type)                     Output Shape                  Param # ┃\n",
+              "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩\n",
+              "│ dense_1 (Dense)                 │ (None, 100)            │        78,500 │\n",
+              "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+              "│ dense_2 (Dense)                 │ (None, 10)             │         1,010 │\n",
+              "└─────────────────────────────────┴────────────────────────┴───────────────┘\n",
+              "
\n" + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "\u001b[1m Total params: \u001b[0m\u001b[38;5;34m79,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": "Ofd6o3nzgc8D", + "outputId": "b8a6890e-8017-48c2-e2f3-856bfd06d873" + }, + "execution_count": 18, + "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[1m6s\u001b[0m 3ms/step - accuracy: 0.5502 - loss: 1.8732 - val_accuracy: 0.8025 - val_loss: 0.9640\n", + "Epoch 2/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 3ms/step - accuracy: 0.8292 - loss: 0.8451 - val_accuracy: 0.8508 - val_loss: 0.6354\n", + "Epoch 3/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.8635 - loss: 0.5842 - val_accuracy: 0.8683 - val_loss: 0.5187\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.8762 - loss: 0.4870 - val_accuracy: 0.8822 - val_loss: 0.4603\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.8868 - loss: 0.4312 - val_accuracy: 0.8875 - val_loss: 0.4235\n", + "Epoch 6/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.8923 - loss: 0.3969 - val_accuracy: 0.8895 - val_loss: 0.3990\n", + "Epoch 7/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 2ms/step - accuracy: 0.9005 - loss: 0.3701 - val_accuracy: 0.8928 - val_loss: 0.3803\n", + "Epoch 8/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.8989 - loss: 0.3632 - val_accuracy: 0.8953 - val_loss: 0.3663\n", + "Epoch 9/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 2ms/step - accuracy: 0.9030 - loss: 0.3459 - val_accuracy: 0.8978 - val_loss: 0.3544\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.9062 - loss: 0.3328 - val_accuracy: 0.9023 - val_loss: 0.3453\n", + "Epoch 11/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.9074 - loss: 0.3243 - val_accuracy: 0.9022 - val_loss: 0.3375\n", + "Epoch 12/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 3ms/step - accuracy: 0.9113 - loss: 0.3149 - val_accuracy: 0.9035 - val_loss: 0.3297\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.9120 - loss: 0.3104 - val_accuracy: 0.9052 - val_loss: 0.3228\n", + "Epoch 14/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 3ms/step - accuracy: 0.9144 - loss: 0.3048 - val_accuracy: 0.9068 - val_loss: 0.3173\n", + "Epoch 15/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.9159 - loss: 0.2928 - val_accuracy: 0.9102 - val_loss: 0.3116\n", + "Epoch 16/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 2ms/step - accuracy: 0.9166 - loss: 0.2904 - val_accuracy: 0.9090 - val_loss: 0.3064\n", + "Epoch 17/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 3ms/step - accuracy: 0.9177 - loss: 0.2865 - val_accuracy: 0.9115 - val_loss: 0.3017\n", + "Epoch 18/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.9199 - loss: 0.2805 - val_accuracy: 0.9120 - val_loss: 0.2973\n", + "Epoch 19/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 2ms/step - accuracy: 0.9195 - loss: 0.2783 - val_accuracy: 0.9135 - val_loss: 0.2932\n", + "Epoch 20/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 3ms/step - accuracy: 0.9211 - loss: 0.2715 - val_accuracy: 0.9147 - val_loss: 0.2893\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.9229 - loss: 0.2675 - val_accuracy: 0.9153 - val_loss: 0.2852\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.9244 - loss: 0.2652 - val_accuracy: 0.9180 - val_loss: 0.2811\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.9255 - loss: 0.2609 - val_accuracy: 0.9187 - val_loss: 0.2773\n", + "Epoch 24/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 2ms/step - accuracy: 0.9251 - loss: 0.2604 - val_accuracy: 0.9187 - val_loss: 0.2742\n", + "Epoch 25/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 3ms/step - accuracy: 0.9299 - loss: 0.2488 - val_accuracy: 0.9195 - val_loss: 0.2709\n", + "Epoch 26/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.9280 - loss: 0.2515 - val_accuracy: 0.9220 - val_loss: 0.2682\n", + "Epoch 27/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 2ms/step - accuracy: 0.9307 - loss: 0.2441 - val_accuracy: 0.9222 - val_loss: 0.2644\n", + "Epoch 28/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 3ms/step - accuracy: 0.9316 - loss: 0.2375 - val_accuracy: 0.9238 - val_loss: 0.2610\n", + "Epoch 29/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.9312 - loss: 0.2440 - val_accuracy: 0.9255 - val_loss: 0.2580\n", + "Epoch 30/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 2ms/step - accuracy: 0.9312 - loss: 0.2367 - val_accuracy: 0.9263 - val_loss: 0.2551\n", + "Epoch 31/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 3ms/step - accuracy: 0.9324 - loss: 0.2357 - val_accuracy: 0.9280 - val_loss: 0.2521\n", + "Epoch 32/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.9339 - loss: 0.2265 - val_accuracy: 0.9278 - val_loss: 0.2496\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.9342 - loss: 0.2287 - val_accuracy: 0.9292 - val_loss: 0.2474\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.9347 - loss: 0.2254 - val_accuracy: 0.9308 - val_loss: 0.2444\n", + "Epoch 35/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.9354 - loss: 0.2232 - val_accuracy: 0.9310 - val_loss: 0.2420\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.9390 - loss: 0.2149 - val_accuracy: 0.9323 - val_loss: 0.2397\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.9366 - loss: 0.2205 - val_accuracy: 0.9320 - val_loss: 0.2379\n", + "Epoch 38/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.9411 - loss: 0.2096 - val_accuracy: 0.9335 - val_loss: 0.2350\n", + "Epoch 39/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 3ms/step - accuracy: 0.9380 - loss: 0.2149 - val_accuracy: 0.9353 - val_loss: 0.2327\n", + "Epoch 40/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.9390 - loss: 0.2137 - val_accuracy: 0.9358 - val_loss: 0.2310\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.9407 - loss: 0.2100 - val_accuracy: 0.9355 - val_loss: 0.2284\n", + "Epoch 42/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 3ms/step - accuracy: 0.9395 - loss: 0.2092 - val_accuracy: 0.9360 - val_loss: 0.2263\n", + "Epoch 43/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.9408 - loss: 0.2079 - val_accuracy: 0.9385 - val_loss: 0.2242\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.9420 - loss: 0.2044 - val_accuracy: 0.9375 - val_loss: 0.2228\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.9446 - loss: 0.1978 - val_accuracy: 0.9382 - val_loss: 0.2203\n", + "Epoch 46/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.9455 - loss: 0.1935 - val_accuracy: 0.9397 - val_loss: 0.2186\n", + "Epoch 47/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.9455 - loss: 0.1934 - val_accuracy: 0.9395 - val_loss: 0.2169\n", + "Epoch 48/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 3ms/step - accuracy: 0.9433 - loss: 0.1970 - val_accuracy: 0.9405 - val_loss: 0.2147\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.9467 - loss: 0.1893 - val_accuracy: 0.9403 - val_loss: 0.2130\n", + "Epoch 50/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.9443 - loss: 0.1918 - val_accuracy: 0.9403 - val_loss: 0.2114\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": "On3RA9ZghcLj", + "outputId": "1b79c962-0484-4751-e47e-9da93ea4dbdb" + }, + "execution_count": 19, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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YuvWrV73u7RbSiaT4d1338Udd9wBvV6PTp064euvv25web/44gv06NEDGo0GiYmJeOWVV7zef/PNN9GpUydotVrExMTgrrvu8ry3du1a9OrVCzqdDhERERg+fDgsFkuDy1IXbLnxEYNGrEqrM8AFISK6ygmCgDJ7/aYSO51OlNkcUNoqGrXOjU6lqNOMn1dffRUnTpxAz5498cwzzwAADh8+DAB48skn8fLLL6N9+/YICwtDZmYmxowZg+effx4ajQYfffQRxo4di+PHj6NNmza1fseCBQuwaNEiLF68GK+//jomTpyIc+fOITw8vF4/0759+3D33Xdj/vz5uOeee/Djjz/ioYceQkREBKZMmYK9e/fikUcewX/+8x8MHDgQFy9exPfffw8AyM7OxoQJE7Bo0SLccccdKCkpwffffw9BEOpVhvpiuPERd7ixcUsSIqKAKrM70H3uNwH57iPPjIJefeV/WkNCQqBWq6HX6xEbGwsAOHbsGADgmWeewYgRIzzXhoeHIykpyfP62Wefxbp16/D1119j5syZtX7HlClTMGHCBADACy+8gNdeew2//PILbr755nr9TEuWLMGwYcPw9NNPAwA6d+6MI0eOYPHixZgyZQoyMjJgMBhw6623IigoCG3btkXfvn0BiOGmoqICd955J9q2bQsA6NWrF5xOJ0wmU73KUR/slvIRg1rsjip3wO+JlIiIWq5+/fp5vTabzZg9eza6deuG0NBQGI1GHD16FBkZGZe9T+/evT3PDQYDgoODkZeXV+/yHD16FIMGDfI6N2jQIJw8eRIOhwMjRoxA27Zt0b59e9x///345JNPUFpaCgBISkrCsGHD0KtXL/zpT3/CO++8g8LCwnqXob7YcuMjelfLjQAZrBVONHLPLyIiaiCdSoEjz4yq12ecTidKTCUICg5qdLdUY10662n27NlIS0vDyy+/jI4dO0Kn0+Guu+6CzWa77H0u3b5AJpPB6fT92ImgoCDs378f27dvx5YtWzB37lzMnz8fe/bsQWhoKNLS0vDjjz9iy5YteP311/Gvf/0Lu3fvbtR2GVfClhsf0Vf5A21h3xQRUcDIZDLo1cp6Hzq1okGfq3rUZ4VdtVpdp20Gdu3ahSlTpuCOO+5Ar169EBsbi/T09EbUUP1069YNu3btqlamzp07Q6EQ/+1TKpUYPnw4Fi1ahN9++w3p6en49ttvAYi/j0GDBmHBggU4cOAA1Go11q9f79cys+XGR+RyGfRqBUptDpTaKgJdHCIiauISExPx888/Iz09HUajsdZWlU6dOuHLL7/E2LFjIZPJ8PTTT/ulBaY2jz/+OK699lo8++yzuOeee7B792688cYbePPNNwEA//vf/3DmzBnccMMNCAsLw8aNG+F0OtGlSxf8/PPP2LZtG0aOHIno6Gj8/PPPyM/PR9euXf1aZrbc+JDeNe7GYmXLDRERXd7s2bOhUCjQvXt3REVF1TqGZsmSJQgLC8PAgQMxduxYjBo1Ctdcc41k5bzmmmvw+eefY9WqVejZsyfmzp2LZ555BlOmTAEAhIaG4ssvv8RNN92Ebt26YcWKFfjss8/Qo0cPBAcHY+fOnRgzZgw6d+6Mp556Cq+88gpGjx7t1zKz5caH3OGmlN1SRER0BZ07d8bu3bu9zrkDQ1WJiYmeLh63GTNmeL2+tJuqpoktdd1OYciQIdU+P378eIwfP77G6wcPHozt27fX+F63bt2wefPmauf93fLElhsfMrim/1nYLUVERBQwDDc+ZNC4Wm7YLUVERE3U9OnTYTQaazymT58e6OL5BLulfMgz5oYtN0RE1EQ988wzmD17do3vBQcHS1wa/2C48SF3txTH3BARUVMVHR2N6OjoQBfDr9gt5UN6DWdLERERBRrDjQ/pOaCYiIgo4BhufMjAqeBEREQBx3DjQww3REREgcdw40PuzTM5FZyIiChwGG58yD0V3MwxN0RE5GeJiYlYunRpna6VyWR+36yyKWG48SF2SxEREQUew40PGdzdUmy5ISIiChiGGx/ybJzJMTdERHQZb7/9NuLj46ttIHn77bfjL3/5C06fPo3bb78dMTExMBqNuPbaa7F161afff+hQ4dw0003QafTISIiAtOmTYPZbPa8v337dvTv3x8GgwGhoaEYNGgQzp07BwD49ddfMXToUAQFBSE4OBjJycnYu3evz8rmCww3PlS5/QLDDRFRwAgCYLPU/7CXNuxzVY8aduOuyZ/+9CdcuHAB3333nefcxYsXsXnzZkycOBFmsxljxozBtm3bcODAAdx8880YO3YsMjIyGl09FosFo0aNQlhYGPbs2YM1a9Zg69atmDlzJgCgoqIC48aNw4033ojffvsNu3fvxrRp0yCTyQAAEydOROvWrbFn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\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": "d-2h4TVuhemj", + "outputId": "9219e346-6a30-44f6-f54e-35dd2c97857c" + }, + "execution_count": 20, + "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.9500 - loss: 0.1884\n", + "Loss on test data: 0.1930633932352066\n", + "Accuracy on test data: 0.9473999738693237\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "# сохранение модели на диск\n", + "model100.save('/content/drive/MyDrive/Colab Notebooks/models/model100in_1hide.keras')" + ], + "metadata": { + "id": "1mvHa_c8hjJx" + }, + "execution_count": 21, + "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": "WO3ZHI6xhlVt" + }, + "execution_count": 22, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "# вывод информации об архитектуре модели\n", + "print(model300.summary())" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 219 + }, + "id": "BqRtNfophpf3", + "outputId": "d2d78eb7-926f-4844-b7b9-86a8a40b9cc4" + }, + "execution_count": 23, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "\u001b[1mModel: \"sequential_2\"\u001b[0m\n" + ], + "text/html": [ + "
Model: \"sequential_2\"\n",
+              "
\n" + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓\n", + "┃\u001b[1m \u001b[0m\u001b[1mLayer (type) \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1mOutput Shape \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1m Param #\u001b[0m\u001b[1m \u001b[0m┃\n", + "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩\n", + "│ dense_3 (\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_4 (\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_3 (Dense)                 │ (None, 300)            │       235,500 │\n",
+              "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+              "│ dense_4 (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": "YrP4IANqhwjf", + "outputId": "9f2d3613-d324-4cd0-ef0b-f2db4e9525da" + }, + "execution_count": 24, + "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[1m7s\u001b[0m 4ms/step - accuracy: 0.5442 - loss: 1.8087 - val_accuracy: 0.8263 - val_loss: 0.8667\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.8410 - loss: 0.7567 - val_accuracy: 0.8605 - val_loss: 0.5823\n", + "Epoch 3/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.8672 - loss: 0.5408 - val_accuracy: 0.8788 - val_loss: 0.4845\n", + "Epoch 4/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 3ms/step - accuracy: 0.8809 - loss: 0.4565 - val_accuracy: 0.8853 - val_loss: 0.4378\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.8884 - loss: 0.4120 - val_accuracy: 0.8902 - val_loss: 0.4057\n", + "Epoch 6/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.8944 - loss: 0.3836 - val_accuracy: 0.8932 - val_loss: 0.3863\n", + "Epoch 7/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 3ms/step - accuracy: 0.8988 - loss: 0.3663 - val_accuracy: 0.8943 - val_loss: 0.3728\n", + "Epoch 8/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.3515 - val_accuracy: 0.8965 - val_loss: 0.3612\n", + "Epoch 9/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 3ms/step - accuracy: 0.8987 - loss: 0.3487 - val_accuracy: 0.8998 - val_loss: 0.3534\n", + "Epoch 10/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 3ms/step - accuracy: 0.9036 - loss: 0.3349 - val_accuracy: 0.9012 - val_loss: 0.3445\n", + "Epoch 11/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.9058 - loss: 0.3285 - val_accuracy: 0.9020 - val_loss: 0.3373\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.9090 - loss: 0.3196 - val_accuracy: 0.9027 - val_loss: 0.3317\n", + "Epoch 13/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 3ms/step - accuracy: 0.9099 - loss: 0.3148 - val_accuracy: 0.9047 - val_loss: 0.3273\n", + "Epoch 14/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 2ms/step - accuracy: 0.9103 - loss: 0.3114 - val_accuracy: 0.9057 - val_loss: 0.3228\n", + "Epoch 15/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 2ms/step - accuracy: 0.9112 - loss: 0.3046 - val_accuracy: 0.9062 - val_loss: 0.3188\n", + "Epoch 16/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 3ms/step - accuracy: 0.9114 - loss: 0.3055 - val_accuracy: 0.9063 - val_loss: 0.3172\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.9142 - loss: 0.3020 - val_accuracy: 0.9080 - val_loss: 0.3124\n", + "Epoch 18/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.9158 - loss: 0.2907 - val_accuracy: 0.9100 - val_loss: 0.3096\n", + "Epoch 19/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 3ms/step - accuracy: 0.9149 - loss: 0.2954 - val_accuracy: 0.9097 - val_loss: 0.3062\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.9164 - loss: 0.2920 - val_accuracy: 0.9093 - val_loss: 0.3038\n", + "Epoch 21/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 2ms/step - accuracy: 0.9194 - loss: 0.2833 - val_accuracy: 0.9095 - val_loss: 0.3036\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.9203 - loss: 0.2754 - val_accuracy: 0.9132 - val_loss: 0.2985\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.9178 - loss: 0.2827 - val_accuracy: 0.9130 - val_loss: 0.2952\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.9191 - loss: 0.2785 - val_accuracy: 0.9145 - val_loss: 0.2926\n", + "Epoch 25/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 2ms/step - accuracy: 0.9210 - loss: 0.2731 - val_accuracy: 0.9153 - val_loss: 0.2902\n", + "Epoch 26/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 2ms/step - accuracy: 0.9212 - loss: 0.2696 - val_accuracy: 0.9160 - val_loss: 0.2883\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.9231 - loss: 0.2671 - val_accuracy: 0.9150 - val_loss: 0.2859\n", + "Epoch 28/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.9225 - loss: 0.2670 - val_accuracy: 0.9170 - val_loss: 0.2843\n", + "Epoch 29/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 2ms/step - accuracy: 0.9257 - loss: 0.2608 - val_accuracy: 0.9177 - val_loss: 0.2822\n", + "Epoch 30/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 3ms/step - accuracy: 0.9243 - loss: 0.2626 - val_accuracy: 0.9173 - val_loss: 0.2823\n", + "Epoch 31/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.9273 - loss: 0.2526 - val_accuracy: 0.9193 - val_loss: 0.2783\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.9263 - loss: 0.2588 - val_accuracy: 0.9192 - val_loss: 0.2758\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.9269 - loss: 0.2553 - val_accuracy: 0.9193 - val_loss: 0.2740\n", + "Epoch 34/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.9264 - loss: 0.2576 - val_accuracy: 0.9198 - val_loss: 0.2711\n", + "Epoch 35/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 3ms/step - accuracy: 0.9274 - loss: 0.2499 - val_accuracy: 0.9208 - val_loss: 0.2690\n", + "Epoch 36/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.9305 - loss: 0.2441 - val_accuracy: 0.9220 - val_loss: 0.2671\n", + "Epoch 37/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.9299 - loss: 0.2412 - val_accuracy: 0.9223 - val_loss: 0.2650\n", + "Epoch 38/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 3ms/step - accuracy: 0.9290 - loss: 0.2495 - val_accuracy: 0.9237 - val_loss: 0.2614\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.9311 - loss: 0.2420 - val_accuracy: 0.9235 - val_loss: 0.2601\n", + "Epoch 40/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 2ms/step - accuracy: 0.9337 - loss: 0.2365 - val_accuracy: 0.9272 - val_loss: 0.2579\n", + "Epoch 41/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 3ms/step - accuracy: 0.9326 - loss: 0.2376 - val_accuracy: 0.9258 - val_loss: 0.2568\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.9314 - loss: 0.2355 - val_accuracy: 0.9258 - val_loss: 0.2546\n", + "Epoch 43/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 2ms/step - accuracy: 0.9342 - loss: 0.2315 - val_accuracy: 0.9270 - val_loss: 0.2523\n", + "Epoch 44/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 3ms/step - accuracy: 0.9331 - loss: 0.2326 - val_accuracy: 0.9285 - val_loss: 0.2498\n", + "Epoch 45/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.9357 - loss: 0.2261 - val_accuracy: 0.9278 - val_loss: 0.2489\n", + "Epoch 46/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.9356 - loss: 0.2213 - val_accuracy: 0.9298 - val_loss: 0.2464\n", + "Epoch 47/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 2ms/step - accuracy: 0.9373 - loss: 0.2186 - val_accuracy: 0.9295 - val_loss: 0.2450\n", + "Epoch 48/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.9366 - loss: 0.2220 - val_accuracy: 0.9312 - val_loss: 0.2420\n", + "Epoch 49/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 3ms/step - accuracy: 0.9370 - loss: 0.2196 - val_accuracy: 0.9318 - val_loss: 0.2396\n", + "Epoch 50/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.9348 - loss: 0.2232 - val_accuracy: 0.9327 - val_loss: 0.2386\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": "M7D5NYCSiqzI", + "outputId": "3b787524-112b-4d99-c6ef-96493f5dcb3d" + }, + "execution_count": 25, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjcAAAHHCAYAAABDUnkqAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAZDFJREFUeJzt3Xd4VGXCNvD7TC/plQQCoXcComBEkd4UQbHCSnHVRWFFs7or7yrFVVFRFguCDV0/UVhxQV2KBDAgLEpXkN5LSC+TTDL9fH+cmUmGBEiZOZOE+3dd55qZM2fOPHkCcvtUQRRFEURERERNhCLYBSAiIiLyJ4YbIiIialIYboiIiKhJYbghIiKiJoXhhoiIiJoUhhsiIiJqUhhuiIiIqElhuCEiIqImheGGiIiImhSGGyIKqsmTJyMkJCTYxQg6QRAwffr0YBeDqElguCFqoj777DMIgoDdu3cHuyhERLJiuCEiIqImheGGiIiImhSGG6Lr3L59+zBy5EiEhYUhJCQEgwcPxs8//+xzjd1ux9y5c9G+fXvodDpER0fj1ltvRXp6uvearKwsTJkyBS1atIBWq0VCQgLGjBmDM2fO1Kgcp06dwvDhw2E0GpGYmIiXXnoJoigCAERRRHJyMsaMGVPlcxaLBeHh4fjTn/50ze/44osv0Lt3b+j1ekRFReHBBx/E+fPnfa4ZMGAAunXrhj179uCWW26BXq9H69atsWTJkir3y8nJwR//+EfEx8dDp9MhJSUF//rXv6pc53K58Pbbb6N79+7Q6XSIjY3FiBEjqu0yXL16Nbp16watVouuXbti/fr1Pu+XlJTg6aefRnJyMrRaLeLi4jB06FDs3bv3mj8/0fWC4YboOvb777/jtttuw6+//oq//vWvePHFF3H69GkMGDAAv/zyi/e6OXPmYO7cuRg4cCDee+89/P3vf0fLli19/kEdN24cVq1ahSlTpuD999/HU089hZKSEpw7d+6a5XA6nRgxYgTi4+PxxhtvoHfv3pg9ezZmz54NQBps+4c//AHr1q1DQUGBz2e///57mEwm/OEPf7jqd7zyyiuYOHEi2rdvjwULFuDpp5/Gpk2b0L9/fxQVFflcW1hYiFGjRqF3795444030KJFCzzxxBNYunSp95ry8nIMGDAA/+///T9MmDAB8+fPR3h4OCZPnoy3337b535//OMf8fTTTyMpKQmvv/46nn/+eeh0uiohctu2bXjyySfx4IMP4o033oDFYsG4ceOQn5/vvWbq1KlYvHgxxo0bh/fffx/PPvss9Ho9Dh8+fM16JrpuiETUJH366aciAHHXrl1XvGbs2LGiRqMRT5486T2XmZkphoaGiv379/eeS0lJEe+4444r3qewsFAEIM6fP7/W5Zw0aZIIQPzzn//sPedyucQ77rhD1Gg0Ym5uriiKonj06FERgLh48WKfz991111icnKy6HK5rvgdZ86cEZVKpfjKK6/4nD9w4ICoUql8zt9+++0iAPGtt97ynrNarWLPnj3FuLg40WaziaIoigsXLhQBiF988YX3OpvNJqampoohISGiyWQSRVEUN2/eLAIQn3rqqSrlqlxmAKJGoxFPnDjhPffrr7+KAMR3333Xey48PFycNm3aFX9WIhJFttwQXaecTic2bNiAsWPHok2bNt7zCQkJGD9+PLZt2waTyQQAiIiIwO+//47jx49Xey+9Xg+NRoOMjAwUFhbWqTyVp0F7pkXbbDZs3LgRANChQwf07dsXy5Yt815XUFCAdevWYcKECRAE4Yr3/s9//gOXy4X7778feXl53qNZs2Zo3749fvzxR5/rVSqVTzeXRqPBn/70J+Tk5GDPnj0AgLVr16JZs2Z46KGHvNep1Wo89dRTKC0txZYtWwAA33zzDQRB8LZCVXZ5mYcMGYK2bdt6X/fo0QNhYWE4deqU91xERAR++eUXZGZmXvHnJbreMdwQXadyc3NRVlaGjh07Vnmvc+fOcLlc3vEoL730EoqKitChQwd0794dzz33HH777Tfv9VqtFq+//jrWrVuH+Ph49O/fH2+88QaysrJqVBaFQuETsAApzADwGbMzceJEbN++HWfPngUAfP3117Db7Xj44Yevev/jx49DFEW0b98esbGxPsfhw4eRk5Pjc31iYiKMRuNVy3P27Fm0b98eCoXvf0Y7d+7sfR8ATp48icTERERFRV2rGtCyZcsq5yIjI30C4xtvvIGDBw8iKSkJffr0wZw5c3zCDxEx3BBRDfTv3x8nT57E0qVL0a1bN3z88ce44YYb8PHHH3uvefrpp3Hs2DHMmzcPOp0OL774Ijp37ox9+/b5rRwPPvgg1Gq1t/Xmiy++wI033lhtQKvM5XJBEASsX78e6enpVY4PPvjAb2WsD6VS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M3HPPfcEsdSNV4sWLfDaa69hz5492L17NwYNGoQxY8bg999/B8C6DqRdu3bhgw8+QI8ePXzOs879q2vXrrh06ZL32LZtm/e9gNa1SPXWp08fcdq0ad7XTqdTTExMFOfNmxfEUjVNAMRVq1Z5X7tcLrFZs2bi/PnzveeKiopErVYrfvXVV0EoYdOSk5MjAhC3bNkiiqJUt2q1Wvz666+91xw+fFgEIO7YsSNYxWxSIiMjxY8//ph1HUAlJSVi+/btxfT0dPH2228XZ8yYIYoi/3z72+zZs8WUlJRq3wt0XbPlpp5sNhv27NmDIUOGeM8pFAoMGTIEO3bsCGLJrg+nT59GVlaWT/2Hh4ejb9++rH8/KC4uBgBERUUBAPbs2QO73e5T3506dULLli1Z3/XkdDqxfPlymM1mpKamsq4DaNq0abjjjjt86hbgn+9AOH78OBITE9GmTRtMmDAB586dAxD4ur7uNs70t7y8PDidTsTHx/ucj4+Px5EjR4JUqutHVlYWAFRb/573qG5cLheefvpp9OvXD926dQMg1bdGo0FERITPtazvujtw4ABSU1NhsVgQEhKCVatWoUuXLti/fz/rOgCWL1+OvXv3YteuXVXe459v/+rbty8+++wzdOzYEZcuXcLcuXNx22234eDBgwGva4YbIqrWtGnTcPDgQZ8+cvK/jh07Yv/+/SguLsbKlSsxadIkbNmyJdjFapLOnz+PGTNmID09HTqdLtjFafJGjhzpfd6jRw/07dsXrVq1wr///W/o9fqAfje7peopJiYGSqWyygjv7OxsNGvWLEilun546pj171/Tp0/Hf//7X/z4449o0aKF93yzZs1gs9lQVFTkcz3ru+40Gg3atWuH3r17Y968eUhJScHbb7/Nug6APXv2ICcnBzfccANUKhVUKhW2bNmCd955ByqVCvHx8azzAIqIiECHDh1w4sSJgP/5ZripJ41Gg969e2PTpk3ecy6XC5s2bUJqamoQS3Z9aN26NZo1a+ZT/yaTCb/88gvrvw5EUcT06dOxatUqbN68Ga1bt/Z5v3fv3lCr1T71ffToUZw7d4717SculwtWq5V1HQCDBw/GgQMHsH//fu9x4403YsKECd7nrPPAKS0txcmTJ5GQkBD4P9/1HpJM4vLly0WtVit+9tln4qFDh8THH39cjIiIELOysoJdtCahpKRE3Ldvn7hv3z4RgLhgwQJx37594tmzZ0VRFMXXXntNjIiIEL/99lvxt99+E8eMGSO2bt1aLC8vD3LJG58nnnhCDA8PFzMyMsRLly55j7KyMu81U6dOFVu2bClu3rxZ3L17t5iamiqmpqYGsdSN1/PPPy9u2bJFPH36tPjbb7+Jzz//vCgIgrhhwwZRFFnXcqg8W0oUWef+9Je//EXMyMgQT58+LW7fvl0cMmSIGBMTI+bk5IiiGNi6Zrjxk3fffVds2bKlqNFoxD59+og///xzsIvUZPz4448igCrHpEmTRFGUpoO/+OKLYnx8vKjVasXBgweLR48eDW6hG6nq6hmA+Omnn3qvKS8vF5988kkxMjJSNBgM4t133y1eunQpeIVuxB555BGxVatWokajEWNjY8XBgwd7g40osq7lcHm4YZ37zwMPPCAmJCSIGo1GbN68ufjAAw+IJ06c8L4fyLoWRFEU69/+Q0RERNQwcMwNERERNSkMN0RERNSkMNwQERFRk8JwQ0RERE0Kww0RERE1KQw3RERE1KQw3BAREVGTwnBDRNclQRCwevXqYBeDiAKA4YaIZDd58mQIglDlGDFiRLCLRkRNgCrYBSCi69OIESPw6aef+pzTarVBKg0RNSVsuSGioNBqtWjWrJnPERkZCUDqMlq8eDFGjhwJvV6PNm3aYOXKlT6fP3DgAAYNGgS9Xo/o6Gg8/vjjKC0t9blm6dKl6Nq1K7RaLRISEjB9+nSf9/Py8nD33XfDYDCgffv2+O6777zvFRYWYsKECYiNjYVer0f79u2rhDEiapgYboioQXrxxRcxbtw4/Prrr5gwYQIefPBBHD58GABgNpsxfPhwREZGYteuXfj666+xceNGn/CyePFiTJs2DY8//jgOHDiA7777Du3atfP5jrlz5+L+++/Hb7/9hlGjRmHChAkoKCjwfv+hQ4ewbt06HD58GIsXL0ZMTIx8FUBEdeeX7TeJiGph0qRJolKpFI1Go8/xyiuviKIo7U4+depUn8/07dtXfOKJJ0RRFMUPP/xQjIyMFEtLS73vr1mzRlQoFGJWVpYoiqKYmJgo/v3vf79iGQCIL7zwgvd1aWmpCEBct26dKIqiOHr0aHHKlCn++YGJSFYcc0NEQTFw4EAsXrzY51xUVJT3eWpqqs97qamp2L9/PwDg8OHDSElJgdFo9L7fr18/uFwuHD16FIIgIDMzE4MHD75qGXr06OF9bjQaERYWhpycHADAE088gXHjxmHv3r0YNmwYxo4di1tuuaVOPysRyYvhhoiCwmg0Vukm8he9Xl+j69Rqtc9rQRDgcrkAACNHjsTZs2exdu1apKenY/DgwZg2bRrefPNNv5eXiPyLY26IqEH6+eefq7zu3LkzAKBz58749ddfYTabve9v374dCoUCHTt2RGhoKJKTk7Fp06Z6lSE2NhaTJk3CF198gYULF+LDDz+s1/2ISB5suSGioLBarcjKyvI5p1KpvIN2v/76a9x444249dZbsWzZMuzcuROffPIJAGDChAmYPXs2Jk2ahDlz5iA3Nxd//vOf8fDDDyM+Ph4AMGfOHEydOhVxcXEYOXIkSkpKsH37dvz5z3+uUflmzZqF3r17o2vXrrBarfjvf//rDVdE1LAx3BBRUKxfvx4JCQk+5zp27IgjR44AkGYyLV++HE8++SQSEhLw1VdfoUuXLgAAg8GAH374ATNmzMBNN90Eg8GAcePGYcGCBd57TZo0CRaLBf/85z/x7LPPIiYmBvfee2+Ny6fRaDBz5kycOXMGer0et912G5YvX+6Hn5yIAk0QRVEMdiGIiCoTBAGrVq3C2LFjg10UImqEOOaGiIiImhSGGyIiImpSOOaGiBoc9pYTUX2w5YaIiIiaFIYbIiIialIYboiIiKhJYbghIiKiJoXhhoiIiJoUhhsiIiJqUhhuiIiIqElhuCEiIqImheGGiIiImpT/D+rlWEPUIgBPAAAAAElFTkSuQmCC\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": "5dBUsxjVivJU", + "outputId": "19a29b01-dd36-4837-d03c-c56ed6f4c2be" + }, + "execution_count": 26, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "\u001b[1m313/313\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 3ms/step - accuracy: 0.9444 - loss: 0.2126\n", + "Loss on test data: 0.2181043177843094\n", + "Accuracy on test data: 0.9419999718666077\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "# сохранение модели на диск\n", + "model300.save('/content/drive/MyDrive/Colab Notebooks/models/model300in_1hide.keras')" + ], + "metadata": { + "id": "0GB5tz5eizCo" + }, + "execution_count": 27, + "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": { + "id": "9FlJqDcci26k" + }, + "execution_count": 28, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "# вывод информации об архитектуре модели\n", + "print(model500.summary())" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 219 + }, + "id": "TbPS-5fKi9mZ", + "outputId": "1c8e0c55-2a92-4d3e-efc0-ac864f927584" + }, + "execution_count": 29, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "\u001b[1mModel: \"sequential_3\"\u001b[0m\n" + ], + "text/html": [ + "
Model: \"sequential_3\"\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_5 (\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_6 (\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_5 (Dense)                 │ (None, 500)            │       392,500 │\n",
+              "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+              "│ dense_6 (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": "rODU_cugjBOX", + "outputId": "437d576f-b51a-46e2-e8cb-de00be1681a7" + }, + "execution_count": 30, + "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[1m8s\u001b[0m 4ms/step - accuracy: 0.5502 - loss: 1.7606 - val_accuracy: 0.8245 - val_loss: 0.8323\n", + "Epoch 2/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 2ms/step - accuracy: 0.8380 - loss: 0.7271 - val_accuracy: 0.8622 - val_loss: 0.5687\n", + "Epoch 3/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.8677 - loss: 0.5258 - val_accuracy: 0.8782 - val_loss: 0.4738\n", + "Epoch 4/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 2ms/step - accuracy: 0.8807 - loss: 0.4537 - val_accuracy: 0.8863 - val_loss: 0.4287\n", + "Epoch 5/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 2ms/step - accuracy: 0.8888 - loss: 0.4060 - val_accuracy: 0.8903 - val_loss: 0.4030\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.8949 - loss: 0.3814 - val_accuracy: 0.8942 - val_loss: 0.3843\n", + "Epoch 7/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.8982 - loss: 0.3631 - val_accuracy: 0.8970 - val_loss: 0.3695\n", + "Epoch 8/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.8990 - loss: 0.3528 - val_accuracy: 0.8935 - val_loss: 0.3625\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.9019 - loss: 0.3448 - val_accuracy: 0.8982 - val_loss: 0.3532\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.9052 - loss: 0.3285 - val_accuracy: 0.8998 - val_loss: 0.3444\n", + "Epoch 11/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 2ms/step - accuracy: 0.9065 - loss: 0.3287 - val_accuracy: 0.9022 - val_loss: 0.3391\n", + "Epoch 12/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 3ms/step - accuracy: 0.9066 - loss: 0.3208 - val_accuracy: 0.9023 - val_loss: 0.3360\n", + "Epoch 13/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.9091 - loss: 0.3170 - val_accuracy: 0.9042 - val_loss: 0.3292\n", + "Epoch 14/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 2ms/step - accuracy: 0.9096 - loss: 0.3107 - val_accuracy: 0.9048 - val_loss: 0.3239\n", + "Epoch 15/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 3ms/step - accuracy: 0.9116 - loss: 0.3105 - val_accuracy: 0.9042 - val_loss: 0.3225\n", + "Epoch 16/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 2ms/step - accuracy: 0.9118 - loss: 0.3031 - val_accuracy: 0.9078 - val_loss: 0.3180\n", + "Epoch 17/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 3ms/step - accuracy: 0.9128 - loss: 0.3061 - val_accuracy: 0.9065 - val_loss: 0.3144\n", + "Epoch 18/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.9151 - loss: 0.2968 - val_accuracy: 0.9088 - val_loss: 0.3116\n", + "Epoch 19/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.9161 - loss: 0.2913 - val_accuracy: 0.9080 - val_loss: 0.3132\n", + "Epoch 20/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 3ms/step - accuracy: 0.9163 - loss: 0.2925 - val_accuracy: 0.9098 - val_loss: 0.3081\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.9180 - loss: 0.2858 - val_accuracy: 0.9102 - val_loss: 0.3045\n", + "Epoch 22/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 3ms/step - accuracy: 0.9178 - loss: 0.2867 - val_accuracy: 0.9110 - val_loss: 0.3036\n", + "Epoch 23/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 2ms/step - accuracy: 0.9165 - loss: 0.2874 - val_accuracy: 0.9118 - val_loss: 0.3011\n", + "Epoch 24/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.9202 - loss: 0.2799 - val_accuracy: 0.9127 - val_loss: 0.3019\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.9191 - loss: 0.2846 - val_accuracy: 0.9135 - val_loss: 0.2968\n", + "Epoch 26/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.9189 - loss: 0.2767 - val_accuracy: 0.9125 - val_loss: 0.2945\n", + "Epoch 27/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 2ms/step - accuracy: 0.9225 - loss: 0.2693 - val_accuracy: 0.9137 - val_loss: 0.2928\n", + "Epoch 28/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 3ms/step - accuracy: 0.9216 - loss: 0.2754 - val_accuracy: 0.9148 - val_loss: 0.2929\n", + "Epoch 29/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.9194 - loss: 0.2785 - val_accuracy: 0.9142 - val_loss: 0.2902\n", + "Epoch 30/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 2ms/step - accuracy: 0.9216 - loss: 0.2678 - val_accuracy: 0.9155 - val_loss: 0.2876\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.9236 - loss: 0.2649 - val_accuracy: 0.9170 - val_loss: 0.2861\n", + "Epoch 32/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.9227 - loss: 0.2678 - val_accuracy: 0.9165 - val_loss: 0.2858\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.9258 - loss: 0.2604 - val_accuracy: 0.9178 - val_loss: 0.2847\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.9246 - loss: 0.2639 - val_accuracy: 0.9167 - val_loss: 0.2817\n", + "Epoch 35/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.9277 - loss: 0.2580 - val_accuracy: 0.9160 - val_loss: 0.2807\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.9234 - loss: 0.2612 - val_accuracy: 0.9190 - val_loss: 0.2780\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.9271 - loss: 0.2556 - val_accuracy: 0.9203 - val_loss: 0.2764\n", + "Epoch 38/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.9264 - loss: 0.2554 - val_accuracy: 0.9207 - val_loss: 0.2735\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.9289 - loss: 0.2531 - val_accuracy: 0.9202 - val_loss: 0.2733\n", + "Epoch 40/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 3ms/step - accuracy: 0.9259 - loss: 0.2578 - val_accuracy: 0.9225 - val_loss: 0.2709\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.9291 - loss: 0.2455 - val_accuracy: 0.9223 - val_loss: 0.2692\n", + "Epoch 42/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 2ms/step - accuracy: 0.9291 - loss: 0.2465 - val_accuracy: 0.9230 - val_loss: 0.2671\n", + "Epoch 43/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 3ms/step - accuracy: 0.9297 - loss: 0.2432 - val_accuracy: 0.9223 - val_loss: 0.2655\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.9308 - loss: 0.2454 - val_accuracy: 0.9238 - val_loss: 0.2642\n", + "Epoch 45/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.9318 - loss: 0.2391 - val_accuracy: 0.9257 - val_loss: 0.2611\n", + "Epoch 46/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 3ms/step - accuracy: 0.9320 - loss: 0.2421 - val_accuracy: 0.9243 - val_loss: 0.2619\n", + "Epoch 47/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 2ms/step - accuracy: 0.9342 - loss: 0.2357 - val_accuracy: 0.9253 - val_loss: 0.2592\n", + "Epoch 48/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.9342 - loss: 0.2313 - val_accuracy: 0.9255 - val_loss: 0.2562\n", + "Epoch 49/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 3ms/step - accuracy: 0.9325 - loss: 0.2370 - val_accuracy: 0.9275 - val_loss: 0.2550\n", + "Epoch 50/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.9341 - loss: 0.2305 - val_accuracy: 0.9290 - val_loss: 0.2525\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": "7uCJOOJGkTCc", + "outputId": "c4417baf-cc1c-4b44-9bbc-742aac2b4402" + }, + "execution_count": 31, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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\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": "H5BhhLZrkWFq", + "outputId": "079cf4ab-31f3-40d2-e395-5f01241fbb89" + }, + "execution_count": 32, + "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.9401 - loss: 0.2261\n", + "Loss on test data: 0.2324201464653015\n", + "Accuracy on test data: 0.9376000165939331\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "# сохранение модели на диск\n", + "model500.save('/content/drive/MyDrive/Colab Notebooks/models/model500in_1hide.keras')" + ], + "metadata": { + "id": "Uyv2pf5FkYjc" + }, + "execution_count": 33, + "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": { + "id": "0X6rM1m6klas" + }, + "execution_count": 34, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "# вывод информации об архитектуре модели\n", + "print(model10050.summary())" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 253 + }, + "id": "CJRW6vaKkm9o", + "outputId": "a9c1ce01-d18f-4ddd-c4ec-9a0cd0033b5b" + }, + "execution_count": 35, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "\u001b[1mModel: \"sequential_4\"\u001b[0m\n" + ], + "text/html": [ + "
Model: \"sequential_4\"\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_7 (\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_8 (\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_9 (\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_7 (Dense)                 │ (None, 100)            │        78,500 │\n",
+              "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+              "│ dense_8 (Dense)                 │ (None, 50)             │         5,050 │\n",
+              "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+              "│ dense_9 (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": "wWbPA8j4k18a", + "outputId": "01d10ca9-af62-47df-dd46-424082f0cfe3" + }, + "execution_count": 36, + "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[1m8s\u001b[0m 4ms/step - accuracy: 0.2227 - loss: 2.2802 - val_accuracy: 0.4622 - val_loss: 2.0805\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.5419 - loss: 1.9606 - val_accuracy: 0.6317 - val_loss: 1.5174\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.6736 - loss: 1.3815 - val_accuracy: 0.7442 - val_loss: 1.0607\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.7579 - loss: 0.9849 - val_accuracy: 0.7940 - val_loss: 0.8175\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.8073 - loss: 0.7717 - val_accuracy: 0.8348 - val_loss: 0.6708\n", + "Epoch 6/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 3ms/step - accuracy: 0.8399 - loss: 0.6320 - val_accuracy: 0.8545 - val_loss: 0.5783\n", + "Epoch 7/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.8582 - loss: 0.5480 - val_accuracy: 0.8662 - val_loss: 0.5183\n", + "Epoch 8/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.8725 - loss: 0.4895 - val_accuracy: 0.8743 - val_loss: 0.4753\n", + "Epoch 9/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 3ms/step - accuracy: 0.8778 - loss: 0.4514 - val_accuracy: 0.8790 - val_loss: 0.4448\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.8848 - loss: 0.4211 - val_accuracy: 0.8845 - val_loss: 0.4208\n", + "Epoch 11/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 2ms/step - accuracy: 0.8904 - loss: 0.3980 - val_accuracy: 0.8872 - val_loss: 0.4040\n", + "Epoch 12/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 2ms/step - accuracy: 0.8963 - loss: 0.3766 - val_accuracy: 0.8903 - val_loss: 0.3874\n", + "Epoch 13/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.8963 - loss: 0.3704 - val_accuracy: 0.8932 - val_loss: 0.3759\n", + "Epoch 14/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.9000 - loss: 0.3562 - val_accuracy: 0.8953 - val_loss: 0.3654\n", + "Epoch 15/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 3ms/step - accuracy: 0.9022 - loss: 0.3458 - val_accuracy: 0.8972 - val_loss: 0.3559\n", + "Epoch 16/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.9033 - loss: 0.3372 - val_accuracy: 0.9003 - val_loss: 0.3458\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.9073 - loss: 0.3226 - val_accuracy: 0.9025 - val_loss: 0.3394\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.9084 - loss: 0.3189 - val_accuracy: 0.9032 - val_loss: 0.3316\n", + "Epoch 19/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.9121 - loss: 0.3062 - val_accuracy: 0.9063 - val_loss: 0.3253\n", + "Epoch 20/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 3ms/step - accuracy: 0.9116 - loss: 0.3051 - val_accuracy: 0.9073 - val_loss: 0.3189\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.9117 - loss: 0.2999 - val_accuracy: 0.9090 - val_loss: 0.3139\n", + "Epoch 22/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.9157 - loss: 0.2935 - val_accuracy: 0.9098 - val_loss: 0.3081\n", + "Epoch 23/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 3ms/step - accuracy: 0.9183 - loss: 0.2849 - val_accuracy: 0.9115 - val_loss: 0.3033\n", + "Epoch 24/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.9186 - loss: 0.2827 - val_accuracy: 0.9135 - val_loss: 0.2988\n", + "Epoch 25/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.9186 - loss: 0.2792 - val_accuracy: 0.9140 - val_loss: 0.2947\n", + "Epoch 26/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 3ms/step - accuracy: 0.9209 - loss: 0.2732 - val_accuracy: 0.9148 - val_loss: 0.2894\n", + "Epoch 27/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.9216 - loss: 0.2741 - val_accuracy: 0.9165 - val_loss: 0.2861\n", + "Epoch 28/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.9196 - loss: 0.2729 - val_accuracy: 0.9183 - val_loss: 0.2810\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.9239 - loss: 0.2641 - val_accuracy: 0.9190 - val_loss: 0.2772\n", + "Epoch 30/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.9256 - loss: 0.2613 - val_accuracy: 0.9213 - val_loss: 0.2737\n", + "Epoch 31/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.9260 - loss: 0.2544 - val_accuracy: 0.9210 - val_loss: 0.2696\n", + "Epoch 32/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 3ms/step - accuracy: 0.9294 - loss: 0.2466 - val_accuracy: 0.9232 - val_loss: 0.2658\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.9275 - loss: 0.2482 - val_accuracy: 0.9233 - val_loss: 0.2626\n", + "Epoch 34/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.9288 - loss: 0.2404 - val_accuracy: 0.9250 - val_loss: 0.2584\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.9310 - loss: 0.2387 - val_accuracy: 0.9265 - val_loss: 0.2551\n", + "Epoch 36/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 3ms/step - accuracy: 0.9301 - loss: 0.2390 - val_accuracy: 0.9272 - val_loss: 0.2522\n", + "Epoch 37/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.9314 - loss: 0.2333 - val_accuracy: 0.9277 - val_loss: 0.2482\n", + "Epoch 38/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 3ms/step - accuracy: 0.9345 - loss: 0.2272 - val_accuracy: 0.9292 - val_loss: 0.2450\n", + "Epoch 39/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 2ms/step - accuracy: 0.9349 - loss: 0.2244 - val_accuracy: 0.9292 - val_loss: 0.2427\n", + "Epoch 40/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 2ms/step - accuracy: 0.9345 - loss: 0.2283 - val_accuracy: 0.9310 - val_loss: 0.2396\n", + "Epoch 41/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 3ms/step - accuracy: 0.9354 - loss: 0.2187 - val_accuracy: 0.9318 - val_loss: 0.2364\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.9368 - loss: 0.2170 - val_accuracy: 0.9323 - val_loss: 0.2334\n", + "Epoch 43/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 2ms/step - accuracy: 0.9370 - loss: 0.2121 - val_accuracy: 0.9338 - val_loss: 0.2301\n", + "Epoch 44/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 3ms/step - accuracy: 0.9382 - loss: 0.2116 - val_accuracy: 0.9337 - val_loss: 0.2280\n", + "Epoch 45/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.9387 - loss: 0.2097 - val_accuracy: 0.9357 - val_loss: 0.2244\n", + "Epoch 46/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.9402 - loss: 0.2091 - val_accuracy: 0.9373 - val_loss: 0.2222\n", + "Epoch 47/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 3ms/step - accuracy: 0.9410 - loss: 0.2006 - val_accuracy: 0.9373 - val_loss: 0.2200\n", + "Epoch 48/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.9406 - loss: 0.2033 - val_accuracy: 0.9390 - val_loss: 0.2178\n", + "Epoch 49/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 2ms/step - accuracy: 0.9425 - loss: 0.2008 - val_accuracy: 0.9398 - val_loss: 0.2144\n", + "Epoch 50/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 3ms/step - accuracy: 0.9433 - loss: 0.1953 - val_accuracy: 0.9400 - val_loss: 0.2120\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": "BnxtXX1kl33n", + "outputId": "7487e23b-e517-4129-ed6e-90fd1020120e" + }, + "execution_count": 37, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkAAAAHHCAYAAABXx+fLAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAcZVJREFUeJzt3Xl4U1Xi//F3kibpvu9sRXYQiqAwgKMgOw6K4rgxAo6jo8IoMupP5qssbijuC+Ou6CjiCuOoIAUFRQFlU0FAQDahLVDo3qZpc39/pA2UttCWNunyeT3PfXJzc3Jzclrgw7nnnGsyDMNAREREpBkx+7oCIiIiIt6mACQiIiLNjgKQiIiINDsKQCIiItLsKACJiIhIs6MAJCIiIs2OApCIiIg0OwpAIiIi0uwoAImIiEizowAkIg3exIkTCQ4O9nU1fM5kMjF58mRfV0OkSVAAEmnG5s2bh8lkYt26db6uioiIVykAiYiISLOjACQiIiLNjgKQiJzWxo0bGTlyJKGhoQQHBzN48GDWrFlTrozT6WTWrFl06NABf39/oqKiOP/880lJSfGUSUtL4/rrr6dly5bY7XYSEhK49NJL2bNnT7Xq8dtvvzF8+HCCgoJITEzk/vvvxzAMAAzDICkpiUsvvbTC+woLCwkLC+Pvf//7aT/j7bffpnfv3gQEBBAZGcnVV1/N/v37y5UZOHAgZ599NuvXr6d///4EBATQtm1bXnzxxQrnO3ToEDfccANxcXH4+/uTnJzMm2++WaGcy+XimWeeoXv37vj7+xMTE8OIESMqvTy5aNEizj77bOx2O926dWPJkiXlXs/JyWHKlCkkJSVht9uJjY1l6NChbNiw4bTfX6S5UAASkVPasmULf/zjH/nxxx+5++67ue+++9i9ezcDBw5k7dq1nnIzZ85k1qxZDBo0iOeff57/+7//o3Xr1uX+0R07diwLFy7k+uuv59///je33XYbOTk57Nu377T1KCkpYcSIEcTFxTFnzhx69+7NjBkzmDFjBuAeIPyXv/yFxYsXc/To0XLv/d///kd2djZ/+ctfTvkZDz30EOPHj6dDhw48+eSTTJkyheXLl3PBBReQmZlZruyxY8cYNWoUvXv3Zs6cObRs2ZJbbrmF119/3VOmoKCAgQMH8p///Idx48bx2GOPERYWxsSJE3nmmWfKne+GG25gypQptGrVikcffZR77rkHf3//CkFz1apV3HrrrVx99dXMmTOHwsJCxo4dS0ZGhqfMzTffzAsvvMDYsWP597//zZ133klAQABbt249bTuLNBuGiDRbb7zxhgEYP/zwQ5VlxowZY9hsNmPXrl2eYwcPHjRCQkKMCy64wHMsOTnZuPjii6s8z7FjxwzAeOyxx2pczwkTJhiA8Y9//MNzzOVyGRdffLFhs9mMw4cPG4ZhGNu3bzcA44UXXij3/ksuucRISkoyXC5XlZ+xZ88ew2KxGA899FC54z///LPh5+dX7viFF15oAMYTTzzhOeZwOIyePXsasbGxRlFRkWEYhvH0008bgPH22297yhUVFRn9+vUzgoODjezsbMMwDOPLL780AOO2226rUK8T6wwYNpvN2Llzp+fYjz/+aADGc8895zkWFhZmTJo0qcrvKiKGoR4gEalSSUkJS5cuZcyYMZx11lme4wkJCVx77bWsWrWK7OxsAMLDw9myZQs7duyo9FwBAQHYbDZWrFjBsWPHalWfE6eAl00JLyoqYtmyZQB07NiRvn378s4773jKHT16lMWLFzNu3DhMJlOV5/74449xuVxceeWVHDlyxLPFx8fToUMHvvrqq3Ll/fz8yl1Ss9ls/P3vf+fQoUOsX78egM8//5z4+HiuueYaTzmr1cptt91Gbm4uK1euBOCjjz7CZDJ5erNOdHKdhwwZQrt27TzPe/ToQWhoKL/99pvnWHh4OGvXruXgwYNVfl+R5k4BSESqdPjwYfLz8+nUqVOF17p06YLL5fKMj7n//vvJzMykY8eOdO/enbvuuouffvrJU95ut/Poo4+yePFi4uLiuOCCC5gzZw5paWnVqovZbC4XwsAdeIByY4jGjx/Pt99+y969ewH44IMPcDqdXHfddac8/44dOzAMgw4dOhATE1Nu27p1K4cOHSpXPjExkaCgoFPWZ+/evXTo0AGzufxftV26dPG8DrBr1y4SExOJjIw8XTPQunXrCsciIiLKhco5c+awefNmWrVqRZ8+fZg5c2a5gCQiCkAiUkcuuOACdu3axeuvv87ZZ5/Nq6++Sq9evXj11Vc9ZaZMmcKvv/7K7Nmz8ff357777qNLly5s3Lixzupx9dVXY7VaPb1Ab7/9Nueee26lIe5ELpcLk8nEkiVLSElJqbC99NJLdVbHM2GxWCo9bpQOBge48sor+e2333juuedITEzkscceo1u3bixevNhb1RRp8BSARKRKMTExBAYGsn379gqvbdu2DbPZTKtWrTzHIiMjuf7663n33XfZv38/PXr0YObMmeXe165dO/75z3+ydOlSNm/eTFFREU888cRp6+JyuSr0Yvz6668AJCUllavDxRdfzDvvvMPevXv59ttvT9v7U1YvwzBo27YtQ4YMqbD94Q9/KFf+4MGD5OXlnbI+bdq0YceOHbhcrnLltm3b5nm97LMPHjxYYfD2mUhISODWW29l0aJF7N69m6ioKB566KE6O79IY6cAJCJVslgsDBs2jP/+97/lLjOlp6czf/58zj//fEJDQwHKzUICCA4Opn379jgcDgDy8/MpLCwsV6Zdu3aEhIR4ypzO888/79k3DIPnn38eq9XK4MGDy5W77rrr+OWXX7jrrruwWCxcffXVpz335ZdfjsViYdasWeV6U8o+6+TvV1xcXK5XqKioiJdeeomYmBh69+4NwKhRo0hLS+O9994r977nnnuO4OBgLrzwQsA9O84wDGbNmlWhXifX5XRKSkrIysoqdyw2NpbExMRqt7NIc+Dn6wqIiO+9/vrrFdaSAbj99tt58MEHSUlJ4fzzz+fWW2/Fz8+Pl156CYfDwZw5czxlu3btysCBA+nduzeRkZGsW7eODz/80DNw+ddff2Xw4MFceeWVdO3aFT8/PxYuXEh6enq1Aoq/vz9LlixhwoQJ9O3bl8WLF/PZZ5/xr3/9i5iYmHJlL774YqKiovjggw8YOXIksbGxpz1/u3btePDBB5k2bRp79uxhzJgxhISEsHv3bhYuXMhNN93EnXfe6SmfmJjIo48+yp49e+jYsSPvvfcemzZt4uWXX8ZqtQJw00038dJLLzFx4kTWr19PUlISH374Id9++y1PP/00ISEhAAwaNIjrrruOZ599lh07djBixAhcLhfffPMNgwYNqtH9v3JycmjZsiVXXHEFycnJBAcHs2zZMn744Ydq9bSJNBu+m4AmIr5WNg2+qm3//v2GYRjGhg0bjOHDhxvBwcFGYGCgMWjQIOO7774rd64HH3zQ6NOnjxEeHm4EBAQYnTt3Nh566CHPlPAjR44YkyZNMjp37mwEBQUZYWFhRt++fY3333//tPWcMGGCERQUZOzatcsYNmyYERgYaMTFxRkzZswwSkpKKn3Prbfe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8MMPfPDBByxbtozJkycDUFxczJgxY7jwwgv56aefWL16NTfddBMmkwmAcePG0bJlS3744QfWr1/PPffcg9VqPeN61SXdCsObjv6GefunREYMoHWkewyQeoBERHzAmQ8PJ9boLWYg/Ew/918HwRZUraIRERGMHDmS+fPnM3jwYAA+/PBDoqOjGTRoEGazmeTkZE/5Bx54gIULF/LJJ594gkptzZ8/n8LCQt566y2Cgtz1ff755xk9ejSPPvooVquVrKws/vSnP9GuXTsAunTp4nn/vn37uOuuu+jcuTMAHTp0OKP61Af1AHlTcDwA9uJMzyUwTYUXEZGqjBs3jo8++giHwz1j+J133uHqq6/GbDaTm5vLnXfeSZcuXQgPDyc4OJitW7fWSQ/Q1q1bSU5O9oQfgAEDBuByudi+fTuRkZFMnDiR4cOHM3r0aJ555hlSU1M9ZadOncrf/vY3hgwZwiOPPMKuXbvOuE51TT1A3hQSB4C/M5NWEQGYTJDrKCYjr4joYLuPKyci0oxYA929MTXgcrnIzskhNCQEs7mW/QfWwBoVHz16NIZh8Nlnn3HeeefxzTff8NRTTwFw5513kpKSwuOPP0779u0JCAjgiiuuoKioqHZ1q6E33niD2267jSVLlvDee+9x7733kpKSwh/+8AdmzpzJtddey2effcbixYuZMWMGCxYs4LLLLvNK3apDAcibSnuA/J2ZmKwWEsMCOJBZwN6MPAUgERFvMpmqfSnKw+UCa4n7fbUNQDXk7+/P5ZdfzjvvvMPOnTvp1KkTvXr1AuDbb79l4sSJnlCRm5vLnj176uRzu3Tpwrx588jLy/P0An377beYzWY6derkKXfOOedwzjnnMG3aNPr168f8+fP5wx/+AEDHjh3p2LEjd9xxB9dccw1vvPFGgwpAugTmTSHuAGQryYNih2cg9B7dE0xERKowbtw4PvvsM15//XXGjRvnOd6hQwc+/vhjNm3axI8//si1115bYcbYmXymv78/EyZMYPPmzXz11Vf84x//4LrrriMuLo7du3czbdo0Vq9ezd69e1m6dCk7duygS5cuFBQUMHnyZFasWMHevXv59ttv+eGHH8qNEWoI1APkTQERGBYbppIiyE2nTVQQ3+3KYK8GQouISBUuuugiIiMj2b59O9dee63n+JNPPslf//pX+vfvT3R0NP/v//0/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xqFDhwzDqN+2VgDyoueee85o3bq1YbPZjD59+hhr1qzxdZWahK+++soAKmwTJkwwDMM9Ff6+++4z4uLiDLvdbgwePNjYvn27byvdiFXW1oDxxhtveMoUFBQYt956qxEREWEEBgYal112mZGamuq7Sjdif/3rX402bdoYNpvNiImJMQYPHuwJP4ahtvaGkwOQ2rzuXHXVVUZCQoJhs9mMFi1aGFdddZWxc+dOz+v12dYmwzCMM+9HEhEREWk8NAZIREREmh0FIBEREWl2FIBERESk2VEAEhERkWZHAUhERESaHQUgERERaXYUgERERKTZUQASEamCyWRi0aJFvq6GiNQDBSARaZAmTpyIyWSqsI0YMcLXVRORJsDP1xUQEanKiBEjeOONN8ods9vtPqqNiDQl6gESkQbLbrcTHx9fbouIiADcl6deeOEFRo4cSUBAAGeddRYffvhhuff//PPPXHTRRQQEBBAVFcVNN91Ebm5uuTKvv/463bp1w263k5CQwOTJk8u9fuTIES677DICAwPp0KEDn3zyiee1Y8eOMW7cOGJiYggICKBDhw4VApuINEwKQCLSaN13332MHTuWH3/8kXHjxnH11VezdetWAPLy8hg+fDgRERH88MMPfPDBByxbtqxcwHnhhReYNGkSN910Ez///DOffPIJ7du3L/cZs2bN4sorr+Snn35i1KhRjBs3jqNHj3o+/5dffmHx4sVs3bqVF154gejoaO81gIjUXp3cUlVEpI5NmDDBsFgsRlBQULntoYceMgzDfVf6m2++udx7+vbta9xyyy2GYRjGyy+/bERERBi5ubme1z/77DPDbDYbaWlphmEYRmJiovF///d/VdYBMO69917P89zcXAMwFi9ebBiGYYwePdq4/vrr6+YLi4hXaQyQiDRYgwYN4oUXXih3LDIy0rPfr1+/cq/169ePTZs2AbB161aSk5MJCgryvD5gwABcLhfbt2/HZDJx8OBBBg8efMo69OjRw7MfFBREaGgohw4dAuCWW25h7NixbNiwgWHDhjFmzBj69+9fq+8qIt6lACQiDVZQUFCFS1J1JSAgoFrlrFZruecmkwmXywXAyJEj2bt3L59//jkpKSkMHjyYSZMm8fjjj9d5fUWkbmkMkIg0WmvWrKnwvEuXLgB06dKFH3/8kby8PM/r3377LWazmU6dOhESEkJSUhLLly8/ozrExMQwYcIE3n77bZ5++mlefvnlMzqfiHiHeoBEpMFyOBykpaWVO+bn5+cZaPzBBx9w7rnncv755/POO+/w/fff89prrwEwbtw4ZsyYwYQJE5g5cyaHDx/mH//4B9dddx1xcXEAzJw5k5tvvpnY2FhGjhxJTk4O3377Lf/4xz+qVb/p06fTu3dvunXrhsPh4NNPP/UEMBFp2BSARKTBWrJkCQkJCeWOderUiW3btgHuGVoLFizg1ltvJSEhgXfffZeuXbsCEBgYyBdffMHtt9/OeeedR2BgIGPHjuXJJ5/0nGvChAkUFhby1FNPceeddxIdHc0VV1xR7frZbDamTZvGnj17CAgI4I9//CMLFiyog28uIvXNZBiG4etKiIjUlMlkYuHChYwZM8bXVRGRRkhjgERERKTZUQASERGRZkdjgESkUdLVexE5E+oBEhERkWZHAUhERESaHQUgERERaXYUgERERKTZUQASERGRZkcBSERERJodBSARERFpdhSAREREpNlRABIREZFm5/8DsW5N9SXM3XoAAAAASUVORK5CYII=\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": "c97Qx3pul98e", + "outputId": "b84aef12-fdc2-4b56-d354-8c28f19bcd55" + }, + "execution_count": 38, + "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.9476 - loss: 0.1931\n", + "Loss on test data: 0.1974852979183197\n", + "Accuracy on test data: 0.9449999928474426\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "# сохранение модели на диск\n", + "model10050.save('/content/drive/MyDrive/Colab Notebooks/models/model100in_1hide_50in_2hide.keras')" + ], + "metadata": { + "id": "Dn5qMhDAmBlZ" + }, + "execution_count": 39, + "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": "YIfzGZVzmCqT" + }, + "execution_count": 40, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "# вывод информации об архитектуре модели\n", + "print(model100100.summary())" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 253 + }, + "id": "aK8ffWILmIDg", + "outputId": "8949cb99-d5c1-4720-929b-60806f6d5431" + }, + "execution_count": 41, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "\u001b[1mModel: \"sequential_5\"\u001b[0m\n" + ], + "text/html": [ + "
Model: \"sequential_5\"\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_10 (\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_11 (\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_12 (\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_10 (Dense)                │ (None, 100)            │        78,500 │\n",
+              "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+              "│ dense_11 (Dense)                │ (None, 100)            │        10,100 │\n",
+              "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+              "│ dense_12 (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": "Dz7X9T55mLCh", + "outputId": "d38b4420-d153-4c3b-ae8a-f7f7a6d03a71" + }, + "execution_count": 42, + "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[1m6s\u001b[0m 3ms/step - accuracy: 0.2072 - loss: 2.2849 - val_accuracy: 0.5913 - val_loss: 2.1135\n", + "Epoch 2/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 3ms/step - accuracy: 0.5483 - loss: 2.0036 - val_accuracy: 0.6333 - val_loss: 1.5555\n", + "Epoch 3/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.6781 - loss: 1.4029 - val_accuracy: 0.7727 - val_loss: 1.0336\n", + "Epoch 4/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 3ms/step - accuracy: 0.7912 - loss: 0.9437 - val_accuracy: 0.8180 - val_loss: 0.7608\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.8356 - loss: 0.7032 - val_accuracy: 0.8483 - val_loss: 0.6186\n", + "Epoch 6/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 2ms/step - accuracy: 0.8556 - loss: 0.5826 - val_accuracy: 0.8627 - val_loss: 0.5368\n", + "Epoch 7/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 3ms/step - accuracy: 0.8689 - loss: 0.5120 - val_accuracy: 0.8722 - val_loss: 0.4862\n", + "Epoch 8/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.8786 - loss: 0.4576 - val_accuracy: 0.8790 - val_loss: 0.4503\n", + "Epoch 9/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 2ms/step - accuracy: 0.8854 - loss: 0.4263 - val_accuracy: 0.8833 - val_loss: 0.4242\n", + "Epoch 10/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 2ms/step - accuracy: 0.8909 - loss: 0.3984 - val_accuracy: 0.8878 - val_loss: 0.4031\n", + "Epoch 11/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 2ms/step - accuracy: 0.8927 - loss: 0.3848 - val_accuracy: 0.8900 - val_loss: 0.3876\n", + "Epoch 12/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 3ms/step - accuracy: 0.8989 - loss: 0.3638 - val_accuracy: 0.8925 - val_loss: 0.3750\n", + "Epoch 13/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.9014 - loss: 0.3527 - val_accuracy: 0.8957 - val_loss: 0.3617\n", + "Epoch 14/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.9024 - loss: 0.3423 - val_accuracy: 0.8970 - val_loss: 0.3520\n", + "Epoch 15/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 3ms/step - accuracy: 0.9061 - loss: 0.3291 - val_accuracy: 0.8997 - val_loss: 0.3436\n", + "Epoch 16/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.9058 - loss: 0.3264 - val_accuracy: 0.9007 - val_loss: 0.3367\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.9089 - loss: 0.3168 - val_accuracy: 0.9027 - val_loss: 0.3297\n", + "Epoch 18/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 3ms/step - accuracy: 0.9094 - loss: 0.3103 - val_accuracy: 0.9058 - val_loss: 0.3220\n", + "Epoch 19/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.9138 - loss: 0.2969 - val_accuracy: 0.9057 - val_loss: 0.3165\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.9158 - loss: 0.2941 - val_accuracy: 0.9073 - val_loss: 0.3119\n", + "Epoch 21/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 3ms/step - accuracy: 0.9167 - loss: 0.2889 - val_accuracy: 0.9095 - val_loss: 0.3054\n", + "Epoch 22/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.9189 - loss: 0.2806 - val_accuracy: 0.9118 - val_loss: 0.2994\n", + "Epoch 23/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 2ms/step - accuracy: 0.9200 - loss: 0.2785 - val_accuracy: 0.9128 - val_loss: 0.2947\n", + "Epoch 24/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 3ms/step - accuracy: 0.9224 - loss: 0.2694 - val_accuracy: 0.9150 - val_loss: 0.2898\n", + "Epoch 25/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.9214 - loss: 0.2677 - val_accuracy: 0.9172 - val_loss: 0.2862\n", + "Epoch 26/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.9225 - loss: 0.2662 - val_accuracy: 0.9172 - val_loss: 0.2817\n", + "Epoch 27/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 3ms/step - accuracy: 0.9231 - loss: 0.2641 - val_accuracy: 0.9187 - val_loss: 0.2759\n", + "Epoch 28/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.9250 - loss: 0.2588 - val_accuracy: 0.9188 - val_loss: 0.2733\n", + "Epoch 29/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.9260 - loss: 0.2537 - val_accuracy: 0.9215 - val_loss: 0.2682\n", + "Epoch 30/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 3ms/step - accuracy: 0.9269 - loss: 0.2510 - val_accuracy: 0.9215 - val_loss: 0.2658\n", + "Epoch 31/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.9268 - loss: 0.2502 - val_accuracy: 0.9227 - val_loss: 0.2614\n", + "Epoch 32/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 2ms/step - accuracy: 0.9278 - loss: 0.2475 - val_accuracy: 0.9270 - val_loss: 0.2576\n", + "Epoch 33/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 2ms/step - accuracy: 0.9297 - loss: 0.2409 - val_accuracy: 0.9263 - val_loss: 0.2536\n", + "Epoch 34/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 2ms/step - accuracy: 0.9311 - loss: 0.2362 - val_accuracy: 0.9272 - val_loss: 0.2501\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.9327 - loss: 0.2292 - val_accuracy: 0.9282 - val_loss: 0.2479\n", + "Epoch 36/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.9351 - loss: 0.2239 - val_accuracy: 0.9302 - val_loss: 0.2431\n", + "Epoch 37/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 2ms/step - accuracy: 0.9332 - loss: 0.2269 - val_accuracy: 0.9303 - val_loss: 0.2405\n", + "Epoch 38/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 3ms/step - accuracy: 0.9348 - loss: 0.2221 - val_accuracy: 0.9300 - val_loss: 0.2366\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.9389 - loss: 0.2137 - val_accuracy: 0.9335 - val_loss: 0.2344\n", + "Epoch 40/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 2ms/step - accuracy: 0.9400 - loss: 0.2088 - val_accuracy: 0.9338 - val_loss: 0.2310\n", + "Epoch 41/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 3ms/step - accuracy: 0.9394 - loss: 0.2086 - val_accuracy: 0.9330 - val_loss: 0.2284\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.9423 - loss: 0.1993 - val_accuracy: 0.9342 - val_loss: 0.2245\n", + "Epoch 43/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 3ms/step - accuracy: 0.9400 - loss: 0.2072 - val_accuracy: 0.9343 - val_loss: 0.2242\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.9419 - loss: 0.1991 - val_accuracy: 0.9370 - val_loss: 0.2197\n", + "Epoch 45/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.9441 - loss: 0.1937 - val_accuracy: 0.9358 - val_loss: 0.2195\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.9437 - loss: 0.1969 - val_accuracy: 0.9392 - val_loss: 0.2144\n", + "Epoch 47/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.9447 - loss: 0.1885 - val_accuracy: 0.9380 - val_loss: 0.2123\n", + "Epoch 48/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.9447 - loss: 0.1914 - val_accuracy: 0.9402 - val_loss: 0.2101\n", + "Epoch 49/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 3ms/step - accuracy: 0.9442 - loss: 0.1929 - val_accuracy: 0.9412 - val_loss: 0.2070\n", + "Epoch 50/50\n", + "\u001b[1m1688/1688\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.9450 - loss: 0.1935 - val_accuracy: 0.9417 - val_loss: 0.2049\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": "eF7B4wucnIPS", + "outputId": "bf695176-e2f1-4e5d-dc43-dc6bfe1017ec" + }, + "execution_count": 43, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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o2IyOMCVV17Jjh07+Ne//kV6ejr/+Mc/6N27NwsXLgxVNUUaPQUgETmu1q1b43Q62bJlS5XXNm/ejNlspl27doFziYmJTJo0iTfeeIO9e/fSp08fZsyYEfS+Ll268Je//IXFixezceNGPB4P//znP09aF5/PV6UX46effgKgY8eOQXW45JJLeP3119m9ezcrVqw4ae9PZb0Mw6BTp04MGzasyvGLX/wiqPz+/fspKio6YX06dOjA1q1b8fl8QeU2b94ceL3ys/fv319l8vapSEtL45ZbbmHBggXs3LmTVq1a8fe//73eri/S1CkAichxWSwWRowYwQcffBA0zJSdnc28efM4//zziY2NBQhahQQQHR1N165dcbvdABQXF1NaWhpUpkuXLsTExATKnMxTTz0VeGwYBk899RRWq5WhQ4cGlbvuuuv48ccfufPOO7FYLFx99dUnvfZll12GxWJh5syZQb0plZ917PcrKysL6hXyeDw899xztG7dmv79+wMwZswYsrKyePPNN4Pe969//Yvo6GguuugiwL86zjAMZs6cWaVex9blZMrLy8nPzw86l5ycTHp6eo3bWaQliAh3BUQk/F566aUqe8kA3HbbbTzwwANkZGRw/vnnc8sttxAREcFzzz2H2+1m9uzZgbKnnXYagwcPpn///iQmJrJmzRreeeedwMTln376iaFDh3LllVdy2mmnERERwfvvv092dnaNAorD4WDRokVMmDCBgQMHsnDhQj7++GP++te/0rp166Cyl1xyCa1ateLtt99m9OjRJCcnn/T6Xbp04YEHHmDatGns2rWLcePGERMTw86dO3n//fe58cYbueOOOwLl09PTefjhh9m1axfdu3fnzTffZMOGDTz//PNYrVYAbrzxRp577jkmTpzI2rVr6dixI++88w4rVqzg8ccfJyYmBoAhQ4Zw3XXX8eSTT7J161ZGjRqFz+fjf//7H0OGDKnV/b8KCwtp27YtV1xxBX379iU6OprPPvuMb775pkY9bSItRvgWoIlIuFUugz/esXfvXsMwDGPdunXGyJEjjejoaMPpdBpDhgwxvvrqq6BrPfDAA8aAAQOM+Ph4IzIy0ujZs6fx97//PbAk/ODBg8bkyZONnj17GlFRUUZcXJwxcOBA46233jppPSdMmGBERUUZ27dvN0aMGGE4nU4jJSXFmD59ulFe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WLGiSp26d+8e2H8vIiKCYcOGMXv2bL777jt27drF559/Dvh/H+eddx4zZ85k/fr12Gw2FixY0KB1Vg9QiHVOimLD3ny2H1AAEhGRE+vYsSOrV69m165dREdHH7d3plu3brz33nuMHTsWk8nEPffcE9Ldqv/yl79wzjnncP/993PVVVexcuVKnnrqKZ5++mkAPvroI3bs2MGFF15IQkICn3zyCT6fjx49erB69WqWLFnCiBEjSE5OZvXq1Rw4cICePXs2aJ3VAxRinQM9QMVhromIiDR2d9xxBxaLhdNOO43WrVsfd07Po48+SkJCAueeey5jx45l5MiRnHXWWSGr51lnncVbb73F/PnzOf3007n33nu57777Agua4uPjee+997j44ovp1asXzz77LG+88Qa9e/cmNjaWL7/8kjFjxtC9e3f+9re/8c9//pPRo0c3aJ3VAxRilQFoh4bARETkJLp3787KlSuDzlWGiqN17NgxMJxUafLkyUHPjx0Sq24hUl5eXo3qNXjw4Crvv/zyy7n88surLX/++edXWdRUqVevXlVujg40eA+WeoBCrHPrI3OAGsldSERERFocBaAQa5cQiRmDIk852QXuk79BREQkxG666Saio6OrPW666aZwV69eaAgsxGwRZpIckFMK2w+4SI3TUngREWlc7rvvPu64445qX6vvm4SHiwJQGCRHGuSUmthxwMV5XZPCXR0REZEgycnJJCcnh7saDUpDYGGQHOn/qaXwIiIi4aEAFAYpkf7Jz9sPuMJcExERkZZJASgMKgPQDvUAiYiIhIUCUBgkV8x73pdXQrGnLLyVERERaYEUgMIgygoJTv8N6NQLJCIiEnoKQKGU+R3mNS+RVPiDdoQWEZEG17FjRx5//PEalTWZTA1+A9LGRAEolH5ahOXTu2hzeFVgR+jtOZoILSIiEmoKQKEUkwqAw5unHiAREZEwUgAKpegjAahTkhNQD5CIiFTv+eefJz09vcpNQS+99FJ+97vfsX37di699FJSUlKIjo7mnHPO4bPPPqu3z//++++5+OKLiYyMpFWrVtx44424XEf+zVq6dCkDBgwgKiqK+Ph4zjvvPHbv3g3At99+y5AhQ4iJiSE2Npb+/fuzZs2aeqtbfVAACqWjeoC6tK7sAXLh8+mmqCIiIWUY4Cmq/eEtrtv7Ko9a3AT7N7/5Dbm5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kjDXvGm6+eabjbi4OGPp0qVGZmZm4CguLg6Uuemmm4z27dsbn3/+ubFmzRpj0KBBxqBBg8JY66br7rvvNpYtW2bs3LnT+O6774y7777bMJlMxuLFiw3DUFuHwtGrwAxDbV6f/vKXvxhLly41du7caaxYscIYNmyYkZSUZOTk5BiG0bBtrQAUQv/617+M9u3bGzabzRgwYICxatWqcFepWfjiiy8MoMoxYcIEwzD8S+HvueceIyUlxbDb7cbQoUONLVu2hLfSTVh1bQ0YL7/8cqBMSUmJccsttxgJCQmG0+k0fv3rXxuZmZnhq3QT9rvf/c7o0KGDYbPZjNatWxtDhw4NhB/DUFuHwrEBSG1ef6666iojLS3NsNlsRps2bYyrrrrK2LZtW+D1hmxrk2EYxqn3I4mIiIg0HZoDJCIiIi2OApCIiIi0OApAIiIi0uIoAImIiEiLowAkIiIiLY4CkIiIiLQ4CkAiIiLS4igAiYgch8lkYsGCBeGuhog0AAUgEWmUJk6ciMlkqnKMGjUq3FUTkWYgItwVEBE5nlGjRvHyyy8HnbPb7WGqjYg0J+oBEpFGy263k5qaGnQkJCQA/uGpZ555htGjRxMZGUnnzp155513gt7//fffc/HFFxMZGUmrVq248cYbcblcQWVeeuklevfujd1uJy0tjSlTpgS9fvDgQX7961/jdDrp1q0bH374YeC1w4cPM378eFq3bk1kZCTdunWrEthEpHFSABKRJuuee+7h8ssv59tvv2X8+PFcffXVbNq0CYCioiJGjhxJQkIC33zzDW+//TafffZZUMB55plnmDx5MjfeeCPff/89H374IV27dg36jJkzZ3LllVfy3XffMWbMGMaPH8+hQ4cCn//jjz+ycOFCNm3axDPPPENSUlLoGkBE6q5ebqkqIlLPJkyYYFgsFiMqKiro+Pvf/24Yhv+u9DfddFPQewYOHGjcfPPNhmEYxvPPP28kJCQYLpcr8PrHH39smM1mIysryzAMw0hPTzf+7//+77h1AIy//e1vgecul8sAjIULFxqGYRhjx441Jk2aVD9fWERCSnOARKTRGjJkCM8880zQucTExMDjQYMGBb02aNAgNmzYAMCmTZvo27cvUVFRgdfPO+88fD4fW7ZswWQysX//foYOHXrCOvTp0yfwOCoqitjYWHJycgC4+eabufzyy1m3bh0jRoxg3LhxnHvuuXX6riISWgpAItJoRUVFVRmSqi+RkZE1Kme1WoOem0wmfD4fAKNHj2b37t188sknZGRkMHToUCZPnswjjzxS7/UVkfqlOUAi0mStWrWqyvNevXoB0KtXL7799luKiooCr69YsQKz2UyPHj2IiYmhY8eOLFmy5JTq0Lp1ayZMmMBrr73G448/zvPPP39K1xOR0FAPkIg0Wm63m6ysrKBzERERgYnGb7/9NmeffTbnn38+r7/+Ol9//TUvvvgiAOPHj2f69OlMmDCBGTNmcODAAf70pz9x3XXXkZKSAsCMGTO46aabSE5OZvTo0RQWFrJixQr+9Kc/1ah+9957L/3796d379643W4++uijQAATkcZNAUhEGq1FixaRlpYWdK5Hjx5s3rwZ8K/Qmj9/PrfccgtpaWm88cYbnHbaaQA4nU4+/fRTbrvtNs455xycTieXX345jz76aOBaEyZMoLS0lMcee4w77riDpKQkrrjiihrXz2azMW3aNHbt2kVkZCQXXHAB8+fPr4dvLiINzWQYhhHuSoiI1JbJZOL9999n3Lhx4a6KiDRBmgMkIiIiLY4CkIiIiLQ4mgMkIk2SRu9F5FSoB0hERERaHAUgERERaXEUgERERKTFUQASERGRFkcBSERERFocBSARERFpcRSAREREpMVRABIREZEWRwFIREREWpz/D9qlq4keXUdWAAAAAElFTkSuQmCC\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": "yxdjaq6bnNXt", + "outputId": "bd5062e3-2c8b-414f-d226-ea6c07a74958" + }, + "execution_count": 44, + "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.9485 - loss: 0.1814\n", + "Loss on test data: 0.18734164535999298\n", + "Accuracy on test data: 0.9470000267028809\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "# сохранение модели на диск\n", + "model100100.save('/content/drive/MyDrive/Colab Notebooks/models/model100in_1hide_100in_2hide.keras')" + ], + "metadata": { + "id": "Sr9bCq_KnP85" + }, + "execution_count": 45, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "# сохранение лучшей модели в папку best_model\n", + "model100.save('/content/drive/MyDrive/Colab Notebooks/best_model/model100.keras')" + ], + "metadata": { + "id": "BV7wEu2SoMaB" + }, + "execution_count": 46, + "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": "hg2PYRgwoTiU" + }, + "execution_count": 47, + "outputs": [] + }, + { + "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": 517 + }, + "id": "A8O5K-_4oeK9", + "outputId": "1a71c522-a042-41d7-f2fb-77aeff301c79" + }, + "execution_count": 52, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 27ms/step\n", + "NN output: [[3.7926259e-03 9.0994104e-07 2.0981293e-04 2.9478846e-02 2.0727816e-06\n", + " 9.6508384e-01 7.6052487e-07 5.7595258e-05 1.0619552e-03 3.1140275e-04]]\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAaAAAAGdCAYAAABU0qcqAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAG/VJREFUeJzt3X9sVfX9x/HXpdAraHu7UtrbCpQCKhsI21Bqg/aro6HtFgdINnQuAeMwuGImTDF1E9Qtq7LNGRemS7aBZuKvRCDi0gwrLVFbDFWCbLOhrBsltEXIei+0UDr6+f5BvPNKC57LvX33x/ORfBLuOefd8+7Hk74899x+6nPOOQEA0M9GWDcAABieCCAAgAkCCABgggACAJgggAAAJgggAIAJAggAYIIAAgCYGGndwOf19PToyJEjSklJkc/ns24HAOCRc04nTpxQTk6ORozo+z5nwAXQkSNHNGHCBOs2AACXqLm5WePHj+9z/4B7Cy4lJcW6BQBAHFzs53nCAmjDhg2aNGmSLrvsMuXn5+v999//QnW87QYAQ8PFfp4nJIBeeeUVrV69WuvWrdMHH3ygWbNmqbi4WEePHk3E6QAAg5FLgDlz5riysrLI67Nnz7qcnBxXUVFx0dpQKOQkMRgMBmOQj1AodMGf93G/Azpz5ozq6+tVVFQU2TZixAgVFRWptrb2vOO7uroUDoejBgBg6It7AB07dkxnz55VVlZW1PasrCy1traed3xFRYUCgUBk8Ak4ABgezD8FV15erlAoFBnNzc3WLQEA+kHcfw8oIyNDSUlJamtri9re1tamYDB43vF+v19+vz/ebQAABri43wElJydr9uzZqqqqimzr6elRVVWVCgoK4n06AMAglZCVEFavXq2lS5fquuuu05w5c/T000+ro6NDd911VyJOBwAYhBISQEuWLNEnn3yitWvXqrW1VV/96ldVWVl53gcTAADDl88556yb+KxwOKxAIGDdBgDgEoVCIaWmpva53/xTcACA4YkAAgCYIIAAACYIIACACQIIAGCCAAIAmCCAAAAmCCAAgAkCCABgggACAJgggAAAJgggAIAJAggAYIIAAgCYIIAAACYIIACACQIIAGCCAAIAmCCAAAAmCCAAgAkCCABgggACAJgggAAAJgggAIAJAggAYIIAAgCYIIAAACYIIACACQIIAGCCAAIAmCCA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mPX19Z5rli1b5rnmK1/5iuea5ORkzzVf+9rXPNdI0l133eW55pFHHonpXMMRd0AAABMEEADABAEEADBBAAEATBBAAAATBBAAwAQBBAAwQQABAEwQQAAAEwQQAMAEAQQAMEEAAQBM+JxzzrqJzwqHwwoEAtZtDCuLFi2KqS43N9dzzd69ez3XVFdXe65B/xs/frznmt27d3uuCQaDnmti9Z///MdzzfTp0z3XtLW1ea4ZDEKhkFJTU/vczx0QAMAEAQQAMOE5gHbt2qVbb71VOTk58vl82rp1a9T+ZcuWyefzRY2SkpJ49QsAGCI8B1BHR4dmzZqlDRs29HlMSUmJWlpaIuOll166pCYBAEOP57+IWlpaqtLS0gse4/f7+/VBIQBg8EnIM6Dq6mplZmbqmmuu0b333qvjx4/3eWxXV5fC4XDUAAAMfXEPoJKSEr3wwguqqqrSk08+qZqaGpWWlurs2bO9Hl9RUaFAIBAZEyZMiHdLAIAByPNbcBdz++23R/597bXXaubMmZoyZYqqq6s1b968844vLy/X6tWrI6/D4TAhBADDQMI/hj158mRlZGSosbGx1/1+v1+pqalRAwAw9CU8gA4fPqzjx48rOzs70acCAAwint+CO3nyZNTdTFNTk/bu3av09HSlp6frscce0+LFixUMBnXw4EGtWbNGU6dOVXFxcVwbBwAMbp4DaM+ePbrlllsirz99frN06VI9++yz2rdvn55//nm1t7crJydH8+fP189+9jP5/f74dQ0AGPRYjBSAmccff9xzzU9+8pMEdBI/Dz30kOeaX/3qVwnoxB6LkQIABiQCCABgggACAJgggAAAJgggAIAJAggAYIIAAgCYIIAAACYIIACACQIIAGCCAAIAmCCAAAAmCCAAgAlWw+4nI0d6/+vnPp/Pc013d7fnGsDK1KlTPdf89a9/9VyTm5vruSZW7777rueawsLCBHRij9WwAQADEgEEADBBAAEATBBAAAATBBAAwAQBBAAwQQABAEwQQAAAEwQQAMAEAQQAMEEAAQBMEEAAABPeV8hETLZv3+65JiMjw3NNSUmJ55pjx455rgHiobGx0XNNW1ub55r+XIx07ty5/XauwY47IACACQIIAGCCAAIAmCCAAAAmCCAAgAkCCABgggACAJgggAAAJgggAIAJAggAYIIAAgCYIIAAACZYjLSf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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 = 123\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": "pk03l3jdpUp5", + "outputId": "454ba285-7f2c-488b-8f42-082cc7928fab" + }, + "execution_count": 53, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 37ms/step\n", + "NN output: [[7.6678516e-06 2.1507578e-06 2.5754166e-04 6.3994766e-04 2.8644723e-04\n", + " 2.3038971e-04 1.0776109e-05 2.3045135e-05 9.9186021e-01 6.6818334e-03]]\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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WEcCAAwjMQeooqJC58+f13vvvfdQA1RVVSkYDIZXR0fHQ30/AMDwENMfRN28ebOOHj2qEydOaOLEieHb/X6/bt68qZ6enohXQd3d3fL7/YN+L6/XK6/XG8sYAIBhLKpXQM45bd68WYcOHdLx48dVUFAQcf+cOXM0evRo1dXVhW9rbm5We3u7iouL4zMxACAlRPUKqKKiQvv379eRI0eUlpYWfl/H5/Np3Lhx8vl8evnll1VZWanMzEylp6frlVdeUXFxMZ+AAwBEiCpAe/bskXT3Plt79+7VunXrJEm/+c1vNGLECK1atUp9fX0qKyvT7373u7gMCwBIHR7nnLMe4otCoZB8Pp/1GEgisWwsWl9fH/9B4mjHjh1D8jzV1dVD8jyx8ng81iMggYLBoNLT0+95P3vBAQBMECAAgAkCBAAwQYAAACYIEADABAECAJggQAAAEwQIAGCCAAEATBAgAIAJAgQAMEGAAAAmCBAAwAS7YSMlxbobdiw7b2NALDt8b9++Pf6DIGmwGzYAICkRIACACQIEADBBgAAAJggQAMAEAQIAmCBAAAATBAgAYIIAAQBMECAAgAkCBAAwQYAAACZGWQ8AJEIgEIjpcWxGOoCNRTEUeAUEADBBgAAAJggQAMAEAQIAmCBAAAATBAgAYIIAAQBMECAAgAkCBAAwQYAAACYIEADABAECAJjwOOec9RBfFAqF5PP5rMfAI6q+vj7qxyTzBqaxbCoqsbEo4iMYDCo9Pf2e9/MKCABgggABAEwQIACACQIEADBBgAAAJggQAMAEAQIAmCBAAAATBAgAYIIAAQBMECAAgAkCBAAwwWakAICEYDNSAEBSIkAAABNRBaimpkZz585VWlqasrOztXz5cjU3N0ccs2DBAnk8noi1cePGuA4NABj+ogpQIBBQRUWFTp48qWPHjunWrVtavHixent7I45bv369Ojs7w2vXrl1xHRoAMPyNiubg2traiK/37dun7OxsNTU1qaSkJHz7Y489Jr/fH58JAQAp6aHeAwoGg5KkzMzMiNvfffddZWVlaebMmaqqqtL169fv+T36+voUCoUiFgDgEeBidPv2bfed73zHzZ8/P+L23//+9662ttadO3fO/elPf3JPPvmkW7FixT2/T3V1tZPEYrFYrBRbwWDwvh2JOUAbN250kydPdh0dHfc9rq6uzklyLS0t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\n" + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Real mark: 8\n", + "NN answer: 8\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": "PkjvyImOpii6" + }, + "execution_count": 56, + "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": "wcbVyWwusUx6", + "outputId": "bba41efc-7b84-4fa9-ca98-971663b9bb17" + }, + "execution_count": 57, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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iNdDU1OTLly4kFavh4edh96cOnVKkpLr9WD9KYgvY/fu3c7r9bra2lr3j3/8w61atcrl5OS49vZ269H61Y9+9CNXX1/vWlpa3N/+9jdXVlbm8vLy3OXLl61HS6hr1665kydPupMnTzpJ7te//rU7efKk+/e//+2cc+7NN990OTk5bv/+/e706dNuwYIFrri42N28edN48vh60Hm4du2ae/XVV11jY6NraWlxH330kfv617/unnrqKdfV1WU9etysWbPG+Xw+V19f79ra2sLrxo0b4X1Wr17tRo8e7Q4fPuyOHz/uSktLXWlpqeHU8few89Dc3Ox+/vOfu+PHj7uWlha3f/9+N27cODd79mzjySOlRICcc+63v/2tGz16tBs2bJibOXOmO3r0qPVI/W7p0qWusLDQDRs2zD355JNu6dKlrrm52XqshPv444+dpPvW8uXLnXN3P4r9xhtvuIKCAuf1et3cuXNdU1OT7dAJ8KDzcOPGDTdv3jw3YsQIN3ToUDdmzBi3cuXKtPs/ab3955fkduzYEd7n5s2b7gc/+IH7yle+4h577DG3aNEi19bWZjd0AjzsPFy4cMHNnj3b5ebmOq/X6yZMmOBee+01FwwGbQf/Av45BgCAiaR/DwgAkJ4IEADABAECAJggQAAAEwQIAGCCAAEATBAgAIAJAgQAMEGAAAAmCBAAwAQBAgCYIEAAABP/B4Y4g2ZmJ135AAAAAElFTkSuQmCC\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 27ms/step\n", + "I think it's 2\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "# загрузка собственного изображения\n", + "from PIL import Image\n", + "file2_data = Image.open('test2.png')\n", + "file2_data = file2_data.convert('L') # перевод в градации серого\n", + "test2_img = np.array(file2_data)" + ], + "metadata": { + "id": "JY7tkymctESN" + }, + "execution_count": 59, + "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": "saUm4dytutDS", + "outputId": "b6047a9e-da28-4995-d96b-b5ad3bf208c1" + }, + "execution_count": 60, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAaAAAAGdCAYAAABU0qcqAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAGsZJREFUeJzt3X9s1Hcdx/HX8etgW+9qKe2141eBDcz4YUSoDRtu0tBWQ/gVA3N/gFlAalkE3CY1DoaaHGKiywyCfxjq4mAbiUBGDAkra4laIDAIIWpDSTdKaIsj4Q4KLYR+/IPs5EYL3HHX9931+Ui+Cb3v98u9992tz317xwePc84JAIA+NsB6AABA/0SAAAAmCBAAwAQBAgCYIEAAABMECABgggABAEwQIACAiUHWA3xZd3e3Ll68qKysLHk8HutxAAAxcs7p6tWrKiws1IABvd/npFyALl68qFGjRlmPAQB4RC0tLRo5cmSv+1PuR3BZWVnWIwAAEuBB38+TFqCtW7dq7NixGjp0qIqLi3Xs2LGHOo8fuwFAZnjQ9/OkBOj999/XunXrtHHjRn3yySeaNm2aysrKdOnSpWQ8HQAgHbkkmDlzpquqqop8ffv2bVdYWOiCweADzw2FQk4SGxsbG1uab6FQ6L7f7xN+B3Tz5k2dOHFCpaWlkccGDBig0tJSNTQ03HN8V1eXwuFw1AYAyHwJD9Dnn3+u27dvKz8/P+rx/Px8tbW13XN8MBiU3++PbHwCDgD6B/NPwVVXVysUCkW2lpYW65EAAH0g4X8OKDc3VwMHDlR7e3vU4+3t7QoEAvcc7/V65fV6Ez0GACDFJfwOaMiQIZo+fbpqa2sjj3V3d6u2tlYlJSWJfjoAQJpKykoI69at07Jly/SNb3xDM2fO1FtvvaWOjg794Ac/SMbTAQDSUFICtGTJEv33v//Vhg0b1NbWpq997Ws6cODAPR9MAAD0Xx7nnLMe4m7hcFh+v996DADAIwqFQvL5fL3uN/8UHACgfyJAAAATBAgAYIIAAQBMECAAgAkCBAAwQYAAACYIEADABAECAJggQAAAEwQIAGCCAAEATCRlNWwgkZYvXx7zORs3bozrucaOHRvXeanq008/jeu8TZs2xXxOTU1NXM+F/os7IACACQIEADBBgAAAJggQAMAEAQIAmCBAAAATBAgAYIIAAQBMECAAgAkCBAAwQYAAACYIEADABAECAJhgNWz0qVWrVsV8zrZt25IwSf8Q7+refXXNWUG7f+MOCABgggABAEwQIACACQIEADBBgAAAJggQAMAEAQIAmCBAAAATBAgAYIIAAQBMECAAgAkCBAAw4XHOOesh7hYOh+X3+63HQJK0trbGfE4gEEjCJEi0zs7OmM+prKyM+RwWME0foVBIPp+v1/3cAQEATBAgAIAJAgQAMEGAAAAmCBAAwAQBAgCYIEAAABMECABgggABAEwQIACACQIEADBBgAAAJgZZD4D0VV5eHvM5qb6w6LBhw2I+J55FOOOxfv36mM8JBoNJmKRnQ4cOjfmcbdu2JWGSe7GAaWriDggAYIIAAQBMJDxAb775pjweT9Q2adKkRD8NACDNJeU9oGeeeUYfffTR/59kEG81AQCiJaUMgwYNSvk3mwEAtpLyHtDZs2dVWFiocePG6aWXXtL58+d7Pbarq0vhcDhqAwBkvoQHqLi4WDU1NTpw4IC2bdum5uZmPffcc7p69WqPxweDQfn9/sg2atSoRI8EAEhBCQ9QRUWFvve972nq1KkqKyvT3/72N125ckUffPBBj8dXV1crFApFtpaWlkSPBABIQUn/dEB2draefvppNTU19bjf6/XK6/UmewwAQIpJ+p8Dunbtms6dO6eCgoJkPxUAII0kPECvvvqq6uvr9emnn+qf//ynFi5cqIEDB+rFF19M9FMBANJYwn8Ed+HCBb344ou6fPmyRowYoWeffVZHjhzRiBEjEv1UAIA05nHOOesh7hYOh+X3+63HwENobW2N+ZxU//NhHo/HeoSEimcBU6lvFzGNVTyLv8azyCweXSgUks/n63U/a8EBAEwQIACACQIEADBBgAAAJggQAMAEAQIAmCBAAAATBAgAYIIAAQBMECAAgAkCBAAwQYAAACaS/hfSIXNlZ2dbj9Cr7du3W4+QEjZv3txnz9VXC5gOHTq0T54HyccdEADABAECAJggQAAAEwQIAGCCAAEATBAgAIAJAgQAMEGAAAAmCBAAwAQBAgCYIEAAABMECABgggABAEx4nHPOeoi7hcNh+f1+6zHwENavXx/zOfGsmHzs2LGYzykuLo75HDyaFPtWEsXj8ViP0C+FQiH5fL5e93MHBAAwQYAAACYIEADABAECAJggQAAAEwQIAGCCAAEATBAgAIAJAgQA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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 39ms/step\n", + "I think it's 8\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": "3DV_1KeKvo3S" + }, + "execution_count": 61, + "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": "uBXsSP-iweMO", + "outputId": "6a305eb2-febe-449e-c893-bf9c346e1572" + }, + "execution_count": 62, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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z3etra0P3K+2ttZJck1NTQM+3t3d7QKBQGhrbW01P2lsbGxsbI++PSxAEb0H9JlNmzbp2LFjOnXqlCZNmvTAfYuLiyVJTU1Nmjp16n2Pe71eeb3eaMYAACSxiALknNPLL7+sw4cPq66uToWFhQ895uLFi5KknJycqAYEAKSmiAJUWVmp/fv36+jRo0pLS1N7e7skyefzady4cbp69ar279+vb33rW5owYYIuXbqkLVu2qLS0VLNnz47LbwAAkKQied9Hg/ycb+/evc4551paWlxpaanLyMhwXq/XTZs2zb366qsP/Tng/woEAuY/t2RjY2Nje/TtYd/7Pf8floQRDAbl8/msxwAAPKJAIKD09PRBH2ctOACACQIEADBBgAAAJggQAMAEAQIAmCBAAAATBAgAYIIAAQBMECAAgAkCBAAwQYAAACYIEADABAECAJggQAAAEwQIAGCCAAEATBAgAIAJAgQAMEGAAAAmCBAAwAQBAgCYIEAAABMECABgggABAEwQIACAiYQLkHPOegQAQAw87Pt5wgWos7PTegQAQAw87Pu5xyXYS46+vj5dv35daWlp8ng8YY8Fg0Hl5eWptbVV6enpRhPa4zz04zz04zz04zz0S4Tz4JxTZ2encnNzNWLE4K9zRg3hTF/IiBEjNGnSpAfuk56ePqwvsM9wHvpxHvpxHvpxHvpZnwefz/fQfRLuR3AAgOGBAAEATCRVgLxer6qrq+X1eq1HMcV56Md56Md56Md56JdM5yHhPoQAABgekuoVEAAgdRAgAIAJAgQAMEGAAAAmkiZAu3btUkFBgcaOHavi4mKdPXvWeqQh98Ybb8jj8YRtM2bMsB4r7k6dOqXFixcrNzdXHo9HR44cCXvcOadt27YpJydH48aNU1lZma5cuWIzbBw97DysWbPmvuujvLzcZtg4qamp0dy5c5WWlqasrCwtXbpUjY2NYft0d3ersrJSEyZM0BNPPKEVK1aoo6PDaOL4+CLn4fnnn7/vetiwYYPRxANLigC999572rp1q6qrq/Xxxx+rqKhIixYt0o0bN6xHG3LPPPOM2traQttf/vIX65HirqurS0VFRdq1a9eAj+/cuVNvv/229uzZozNnzujxxx/XokWL1N3dPcSTxtfDzoMklZeXh10fBw4cGMIJ46++vl6VlZU6ffq0Tpw4oXv37mnhwoXq6uoK7bNlyxa9//77OnTokOrr63X9+nUtX77ccOrY+yLnQZLWrVsXdj3s3LnTaOJBuCQwb948V1lZGbrd29vrcnNzXU1NjeFUQ6+6utoVFRVZj2FKkjt8+HDodl9fn/P7/e5Xv/pV6L5bt245r9frDhw4YDDh0Pj8eXDOudWrV7slS5aYzGPlxo0bTpKrr693zvX/2Y8ePdodOnQotM8//vEPJ8k1NDRYjRl3nz8Pzjn3jW98w/3gBz+wG+oLSPhXQHfv3tX58+dVVlYWum/EiBEqKytTQ0OD4WQ2rly5otzcXE2ZMkUvvfSSWlparEcy1dzcrPb29rDrw+fzqbi4eFheH3V1dcrKytL06dO1ceNG3bx503qkuAoEApKkjIwMSdL58+d17969sOthxowZmjx5ckpfD58/D5959913lZmZqZkzZ6qqqkp37tyxGG9QCbcY6ed98skn6u3tVXZ2dtj92dnZ+uc//2k0lY3i4mLt27dP06dPV1tbm7Zv367nnntOly9fVlpamvV4Jtrb2yVpwOvjs8eGi/Lyci1fvlyFhYW6evWqfvKTn6iiokINDQ0aOXKk9Xgx19fXp82bN2v+/PmaOXOmpP7rYcyYMRo/fnzYvql8PQx0HiTpO9/5jvLz85Wbm6tLly7pRz/6kRobG/XnP//ZcNpwCR8g/FdFRUXo17Nnz1ZxcbHy8/P1pz/9SWvXrjWcDIlg1apVoV/PmjVLs2fP1tSpU1VXV6cFCxYYThYflZWVunz58rB4H/RBBjsP69evD/161qxZysnJ0YIFC3T16lVNnTp1qMccUML/CC4zM1MjR46871MsHR0d8vv9RlMlhvHjx+vpp59WU1OT9ShmPrsGuD7uN2XKFGVmZqbk9bFp0yYdO3ZMH330Udh/3+L3+3X37l3dunUrbP9UvR4GOw8DKS4ulqSEuh4SPkBjxozRnDlzVFtbG7qvr69PtbW1KikpMZzM3u3bt3X16lXl5ORYj2KmsLBQfr8/7PoIBoM6c+bMsL8+rl27pps3b6bU9eGc06ZNm3T48GGdPHlShYWFYY/PmTNHo0ePDrseGhsb1dLSklLXw8POw0AuXrwoSYl1PVh/CuKLOHjwoPN6vW7fvn3u73//u1u/fr0bP368a29vtx5tSP3whz90dXV1rrm52f31r391ZWVlLjMz0924ccN6tLjq7Ox0Fy5ccBcuXHCS3JtvvukuXLjg/v3vfzvnnNuxY4cbP368O3r0qLt06ZJbsmSJKywsdJ9++qnx5LH1oPPQ2dnpXnnlFdfQ0OCam5vdhx9+6L761a+6p556ynV3d1uPHjMbN250Pp/P1dXVuba2ttB2586d0D4bNmxwkydPdidPnnTnzp1zJSUlrqSkxHDq2HvYeWhqanI/+9nP3Llz51xzc7M7evSomzJliistLTWePFxSBMg5537zm9+4yZMnuzFjxrh58+a506dPW4805FauXOlycnLcmDFj3JNPPulWrlzpmpqarMeKu48++shJum9bvXq1c67/o9ivv/66y87Odl6v1y1YsMA1NjbaDh0HDzoPd+7ccQsXLnQTJ050o0ePdvn5+W7dunUp95e0gX7/ktzevXtD+3z66afu+9//vvvSl77kHnvsMbds2TLX1tZmN3QcPOw8tLS0uNLSUpeRkeG8Xq+bNm2ae/XVV10gELAd/HP47xgAACYS/j0gAEBqIkAAABMECABgggABAEwQIACACQIEADBBgAAAJggQAMAEAQIAmCBAAAATBAgAYIIAAQBM/B/iWKeEXCQwkQAAAABJRU5ErkJggg==\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 61ms/step\n", + "I think it's 8\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": "s9FSbb99wh_9" + }, + "execution_count": 63, + "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": "ppK14r4-w0Av", + "outputId": "8eee50ab-67d4-4741-d14a-e68334e6ecb5" + }, + "execution_count": 64, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAaAAAAGdCAYAAABU0qcqAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAGaJJREFUeJzt3W9Mlff9//HX8Q9H28JhiHCgoqK22tQ/y5wyYuvaSQS2GP/dUNcbuhgNDpspa7u5rP7ZluBc0jVdnO7GAmtWtTOZmnqDxGLBbEMbqcaYbUQMnRgBVxPOQSxo5PO7wa/nu1NBe47n8D4cno/kSuRc18V59+oVnj2c048e55wTAABDbJT1AACAkYkAAQBMECAAgAkCBAAwQYAAACYIEADABAECAJggQAAAE2OsB/iyvr4+3bhxQ6mpqfJ4PNbjAAAi5JxTV1eXcnNzNWrU4K9zEi5AN27cUF5envUYAIDH1NraqkmTJg26P+F+BZeammo9AgAgBh718zxuAdq/f7+mTp2qcePGqaCgQB9//PFXOo9fuwFAcnjUz/O4BOj9999XRUWFdu3apU8++UTz5s1TcXGxbt68GY+nAwAMRy4OFi5c6MrLy0Nf379/3+Xm5rrKyspHnhsIBJwkNjY2NrZhvgUCgYf+vI/5K6C7d++qsbFRRUVFocdGjRqloqIiNTQ0PHB8b2+vgsFg2AYASH4xD9Bnn32m+/fvKzs7O+zx7Oxstbe3P3B8ZWWlfD5faOMTcAAwMph/Cm7Hjh0KBAKhrbW11XokAMAQiPn/B5SZmanRo0ero6Mj7PGOjg75/f4Hjvd6vfJ6vbEeAwCQ4GL+CiglJUXz589XbW1t6LG+vj7V1taqsLAw1k8HABim4rISQkVFhdavX69vfvObWrhwod5++211d3frBz/4QTyeDgAwDMUlQGvWrNF///tf7dy5U+3t7fr617+umpqaBz6YAAAYuTzOOWc9xP8KBoPy+XzWYwAAHlMgEFBaWtqg+80/BQcAGJkIEADABAECAJggQAAAEwQIAGCCAAEATBAgAIAJAgQAMEGAAAAmCBAAwAQBAgCYIEAAABMECABgggABAEwQIACACQIEADBBgAAAJggQAMAEAQIAmCBAAAATBAgAYIIAAQBMECAAgAkCBAAwQYAAACYIEADABAECAJggQAAAEwQIAGCCAAEATBAgAIAJAgQAMEGAAAAmCBAAwAQBAgCYIEAAABMECABgggABAEwQIACACQIEADBBgAAAJggQAMAEAQIAmCBAAAATBAgAYIIAAQBMECAAgAkCBAAwQYAAACYIEADABAECAJggQAAAEwQIAGCCAAEATBAgAICJmAdo9+7d8ng8YdusWbNi/TQAgGFuTDy+6fPPP68PP/zw/55kTFyeBgAwjMWlDGPGjJHf74/HtwYAJIm4vAd05coV5ebmatq0aXrllVd07dq1QY/t7e1VMBgM2wAAyS/mASooKFB1dbVqamp04MABtbS06MUXX1RXV9eAx1dWVsrn84W2vLy8WI8EAEhAHueci+cTdHZ2asqUKXrrrbe0cePGB/b39vaqt7c39HUwGCRCAJAEAoGA0tLSBt0f908HpKen69lnn1Vzc/OA+71er7xeb7zHAAAkmLj/f0C3b9/W1atXlZOTE++nAgAMIzEP0Guvvab6+np9+umn+sc//qGVK1dq9OjRWrduXayfCgAwjMX8V3DXr1/XunXrdOvWLU2cOFEvvPCCzp49q4kTJ8b6qQAAw1jcP4QQqWAwKJ/PZz0GAOAxPepDCKwFBwAwQYAAACYIEADABAECAJggQAAAEwQIAGCCAAEATBAgAIAJAgQAMEGAAAAmCBAAwAQBAgCYIEAAABMECABgggABAEwQIACACQIEADBBgAAAJggQAMAEAQIAmCBAAAATBAgAYIIAAQBMECAAgAkCBAAwQYAAACYIEADABAECAJggQAAAEwQIAGCCAAEATBAgAIAJAgQAMEGAAAAmCBAAwAQBAgCYIEAAABMECABgggABAEwQIACACQIEADBBgAAAJggQAMAEAQIAmCBAAAATBAgAYIIAAQBMECAAgAkCBAAwQYAAACYIEADABAECAJgYYz0AgOSwYcOGiM85cOBAxOdUV1dHfM6WLVsiPgfxxysgAIAJAgQAMBFxgM6cOaNly5YpNzdXHo9Hx48fD9vvnNPOnTuVk5Oj8ePHq6ioSFeuXInVvACAJBFxgLq7uzVv3jzt379/wP379u3TO++8o4MHD+rcuXN68sknVVxcrJ6ensceFgCQPCL+EEJpaalKS0sH3Oec09tvv62f//znWr58uSTp3XffVXZ2to4fP661a9c+3rQAgKQR0/eAWlpa1N7erqKiotBjPp9PBQUFamhoGPCc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\n" + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 28ms/step\n", + "I think it's 4\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..1f8d01c --- /dev/null +++ b/labworks/LW1/report.md @@ -0,0 +1,581 @@ +# Отчет по лабораторной работе №1 +Пивоваров Я.В., Сидора Д.А., А-02-22 + +## 1. В среде Google Colab создание нового блокнота. +``` +import os +os.chdir('/content/drive/MyDrive/Colab Notebooks') +``` + +* Импорт библиотек и модулей +``` +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 +``` +* Объединение в один набор. +``` +X = np.concatenate((X_train, X_test)) +y = np.concatenate((y_train, y_test)) +``` +* Разбиение по вариантам. (4 бригада -> k=4*4-1) +``` +X_train, X_test, y_train, y_test = train_test_split(X, y,test_size = 10000,train_size = 60000, random_state = 15) +``` + +* Вывод размерностей. +``` +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. Вывод обучающих данных. +* Выведем первые четыре элемента обучающих данных. +``` +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. Предобработка данных. +* Развернем каждое изображение в вектор. +``` +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) + +* Переведем метки в 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 +``` + +* Создаем модель - объявляем ее объектом класса Sequential, добавляем выходной слой. +``` +model = Sequential() +model.add(Dense(units=num_classes, activation='softmax')) +``` +* Компилируем модель. +``` +model.compile(loss='categorical_crossentropy', optimizer='sgd', metrics=['accuracy']) +print(model.summary()) +``` + +>Model: "sequential" +>┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓ +>┃ Layer (type) ┃ Output Shape ┃ Param # ┃ +>┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩ +>│ dense (Dense) │ ? │ 0 (unbuilt) │ +>└─────────────────────────────────┴────────────────────────┴───────────────┘ +> Total params: 0 (0.00 B) +> Trainable params: 0 (0.00 B) +> Non-trainable params: 0 (0.00 B) +>None + +* Обучаем модель. +``` +H = model.fit(X_train, y_train, validation_split=0.1, epochs=50) +``` + +* Выводим график функции ошибки +``` +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.9313 - loss: 0.2648 +>Loss on test data: 0.2729383409023285 +>Accuracy on test data: 0.9290000200271606 + +## 8. Добавление одного скрытого слоя. +* При 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_1" +>┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓ +>┃ Layer (type) ┃ Output Shape ┃ Param # ┃ +>┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩ +>│ dense_1 (Dense) │ (None, 100) │ 78,500 │ +>├─────────────────────────────────┼────────────────────────┼───────────────┤ +>│ dense_2 (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) +>None + +* Обучение модели. +``` +H = model100.fit(X_train, y_train, validation_split=0.1, epochs=50) +``` + +* График функции ошибки. +``` +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.9500 - loss: 0.1884 +>Loss on test data: 0.1930633932352066 +>Accuracy on test data: 0.9473999738693237 + +* При 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_2" +>┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓ +>┃ Layer (type) ┃ Output Shape ┃ Param # ┃ +>┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩ +>│ dense_3 (Dense) │ (None, 300) │ 235,500 │ +>├─────────────────────────────────┼────────────────────────┼───────────────┤ +>│ dense_4 (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) +>None +* Обучение модели. +``` +H = model300.fit(X_train, y_train, validation_split=0.1, epochs=50) +``` + +* Вывод графиков функции ошибки. +``` +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.9444 - loss: 0.2126 +>Loss on test data: 0.2181043177843094 +>Accuracy on test data: 0.9419999718666077 + +* При 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_3" +>┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓ +>┃ Layer (type) ┃ Output Shape ┃ Param # ┃ +>┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩ +>│ dense_5 (Dense) │ (None, 500) │ 392,500 │ +>├─────────────────────────────────┼────────────────────────┼───────────────┤ +>│ dense_6 (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) +>None + +* Обучение модели. +``` +H = model500.fit(X_train, y_train, validation_split=0.1, epochs=50) +``` + +* Вывод графиков функции ошибки. +``` +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.9401 - loss: 0.2261 +>Loss on test data: 0.2324201464653015 +>Accuracy on test data: 0.9376000165939331 + +Как мы видим, лучшая метрика получилась при архитектуре со 100 нейронами в скрытом слое: +Ошибка на тестовых данных: 0.1930633932352066 +Точность тестовых данных: 0.9473999738693237 + +## 9. Добавление второго скрытого слоя. +* При 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_4" +>┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓ +>┃ Layer (type) ┃ Output Shape ┃ Param # ┃ +>┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩ +>│ dense_7 (Dense) │ (None, 100) │ 78,500 │ +>├─────────────────────────────────┼────────────────────────┼───────────────┤ +>│ dense_8 (Dense) │ (None, 50) │ 5,050 │ +>├─────────────────────────────────┼────────────────────────┼───────────────┤ +>│ dense_9 (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) +>None + +* Обучаем модель. +``` +H = model10050.fit(X_train, y_train, validation_split=0.1, epochs=50) +``` + +* Выводим график функции ошибки. +``` +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.9476 - loss: 0.1931 +>Loss on test data: 0.1974852979183197 +>Accuracy on test data: 0.9449999928474426 + +* При 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_5" +>┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓ +>┃ Layer (type) ┃ Output Shape ┃ Param # ┃ +>┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩ +>│ dense_10 (Dense) │ (None, 100) │ 78,500 │ +>├─────────────────────────────────┼────────────────────────┼───────────────┤ +>│ dense_11 (Dense) │ (None, 100) │ 10,100 │ +>├─────────────────────────────────┼────────────────────────┼───────────────┤ +>│ dense_12 (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) +>None + +* Обучаем модель. +``` +H = model100100.fit(X_train, y_train, validation_split=0.1, epochs=50) +``` + +* Выводим график функции ошибки. +``` +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.9485 - loss: 0.1814 +>Loss on test data: 0.18734164535999298 +>Accuracy on test data: 0.9470000267028809 + +## 10. Результаты исследования архитектур нейронной сети. + +| Количество скрытых слоев | Количество нейронов в первом скрытом слое | Количество нейронов во втором скрытом слое | Значение метрики качества классификации | +|--------------------------|-------------------------------------------|--------------------------------------------|------------------------------------------| +| 0 | - | - | 0.9290000200271606 | +| 1 | 100 | - | 0.9473999738693237 | +| 1 | 300 | - | 0.9419999718666077 | +| 1 | 500 | - | 0.9376000165939331 | +| 2 | 100 | 50 | 0.9449999928474426 | +| 2 | 100 | 100 | 0.9470000267028809 | + +Анализ результатов позволяет сделать вывод, что наилучшее качество классификации (порядка 94.7%) достигается при использовании моделей с относительно простой архитектурой. Наибольшую точность показали однослойная сеть со 100 нейронами и двухслойная конфигурация с 100 и 100 нейронами соответственно. + +## 11. Сохранение наилучшей модели на диск. +``` +model100.save('/content/drive/MyDrive/Colab Notebooks/best_model/model100.keras') +``` + +* Загрузка лучшей модели с диска. +``` +from keras.models import load_model +model = load_model('/content/drive/MyDrive/Colab Notebooks/best_model/model100.keras') +``` + +## 12. Вывод тестовых изображений и результатов распознаваний. +``` +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: [[3.7926259e-03 9.0994104e-07 2.0981293e-04 2.9478846e-02 2.0727816e-06 +> 9.6508384e-01 7.6052487e-07 5.7595258e-05 1.0619552e-03 3.1140275e-04]] +![alt text](8.png) +>Real mark: 5 +>NN answer: 5 + +``` +n = 123 +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: [[7.6678516e-06 2.1507578e-06 2.5754166e-04 6.3994766e-04 2.8644723e-04 +> 2.3038971e-04 1.0776109e-05 2.3045135e-05 9.9186021e-01 6.6818334e-03]] +![alt text](9.png) +>Real mark: 8 +>NN answer: 8 + +## 13. Тестирование на собственных изображениях. +* Загрузка 1 собственного изображения. +``` +from PIL import Image +file_data = Image.open('test.png') +file_data = file_data.convert('L') # перевод в градации серого +test_img = np.array(file_data) +``` + +* Вывод собственного изображения. +``` +plt.imshow(test_img, cmap=plt.get_cmap('gray')) +plt.show() +``` + +![1 изображение](10.png) + +* Предобработка. +``` +test_img = test_img / 255 +test_img = test_img.reshape(1, num_pixels) +``` + +* Распознавание. +``` +result = model.predict(test_img) +print('I think it\'s ', np.argmax(result)) +``` +>I think it's 2 + +* Тест 2 изображения. +``` +from PIL import Image +file2_data = Image.open('test2.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 8 + +Сеть корректно распознала цифры на изображениях. + +## 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 8 + +``` +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 4 + +Сеть не распознала цифры на изображениях корректно. \ No newline at end of file