File size: 43,836 Bytes
1a71784
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
{
  "nbformat": 4,
  "nbformat_minor": 0,
  "metadata": {
    "colab": {
      "provenance": []
    },
    "kernelspec": {
      "name": "python3",
      "display_name": "Python 3"
    },
    "language_info": {
      "name": "python"
    }
  },
  "cells": [
    {
      "cell_type": "markdown",
      "source": [
        "Гуров Б. И.\n",
        "\n",
        "Группа 46(1)\n",
        "\n",
        "ссылка: [colab](https://colab.research.google.com/drive/1J-MXiuMNkrVU3mMRMSa5wi325TZNYur-?usp=drive_link)"
      ],
      "metadata": {
        "id": "8MdaNhzamMMn"
      }
    },
    {
      "cell_type": "code",
      "execution_count": 70,
      "metadata": {
        "id": "zW7NeM9omztt"
      },
      "outputs": [],
      "source": [
        "import numpy as np\n",
        "import matplotlib.pyplot as plt\n",
        "import seaborn as sn\n",
        "import numpy as np\n",
        "import pandas as pd\n",
        "from tensorflow.keras.layers import Dense, Flatten\n",
        "from tensorflow.keras.utils import plot_model\n",
        "from tensorflow.keras.models import Sequential\n",
        "from tensorflow.keras.datasets import mnist"
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "(x_train, y_train), (x_test, y_test) = mnist.load_data()\n",
        "print('train length', len(x_train))\n",
        "print('test length', len(x_test))"
      ],
      "metadata": {
        "id": "CDaFa8XJnwlW",
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "outputId": "1f6bd83b-a78e-469a-cbe6-32c5c45fe03e"
      },
      "execution_count": 71,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "train length 60000\n",
            "test length 10000\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "x_train = x_train/255\n",
        "y_train = y_train % 2\n",
        "\n",
        "x_test = x_test/255\n",
        "y_test = y_test % 2"
      ],
      "metadata": {
        "id": "_HW6iyojTZig"
      },
      "execution_count": 72,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "y_test"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "xNVk1F0pcfsu",
        "outputId": "09e0ef24-92ac-4a9f-fd65-b6029e9e1a68"
      },
      "execution_count": 73,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "array([1, 0, 1, ..., 0, 1, 0], dtype=uint8)"
            ]
          },
          "metadata": {},
          "execution_count": 73
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "model = Sequential([\n",
        "    Flatten(input_shape=(28, 28, )),\n",
        "    Dense(10, activation='relu'),\n",
        "    Dense(1, activation='sigmoid')\n",
        "])"
      ],
      "metadata": {
        "id": "pO-ueJujOenR"
      },
      "execution_count": 74,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "model.summary()"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "Slh6fXZbRZVH",
        "outputId": "bddec096-0042-4570-926a-1013244102a4"
      },
      "execution_count": 75,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Model: \"sequential_8\"\n",
            "_________________________________________________________________\n",
            " Layer (type)                Output Shape              Param #   \n",
            "=================================================================\n",
            " flatten_5 (Flatten)         (None, 784)               0         \n",
            "                                                                 \n",
            " dense_16 (Dense)            (None, 10)                7850      \n",
            "                                                                 \n",
            " dense_17 (Dense)            (None, 1)                 11        \n",
            "                                                                 \n",
            "=================================================================\n",
            "Total params: 7,861\n",
            "Trainable params: 7,861\n",
            "Non-trainable params: 0\n",
            "_________________________________________________________________\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "plot_model(model,\n",
        "      show_shapes=True,\n",
        "      show_layer_names=True,\n",
        "      dpi=96,\n",
        "      show_layer_activations=True,)"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 422
        },
        "id": "6wtSWd-NWSEQ",
        "outputId": "f08d0850-110a-4430-bef8-d9f976005930"
      },
      "execution_count": 85,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "image/png": "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\n",
            "text/plain": [
              "<IPython.core.display.Image object>"
            ]
          },
          "metadata": {},
          "execution_count": 85
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])"
      ],
      "metadata": {
        "id": "901NLvRTRcyo"
      },
      "execution_count": 77,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "history = model.fit(x_train, y_train, epochs=10, batch_size=10, verbose=True, validation_split=0.2)"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "Fa0wS3JES0dY",
        "outputId": "c3f43ad4-a76d-4c75-ac55-99d0d106671d"
      },
      "execution_count": 78,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Epoch 1/10\n",
            "4800/4800 [==============================] - 11s 2ms/step - loss: 0.1912 - accuracy: 0.9266 - val_loss: 0.1157 - val_accuracy: 0.9585\n",
            "Epoch 2/10\n",
            "4800/4800 [==============================] - 12s 2ms/step - loss: 0.1049 - accuracy: 0.9632 - val_loss: 0.0977 - val_accuracy: 0.9676\n",
            "Epoch 3/10\n",
            "4800/4800 [==============================] - 10s 2ms/step - loss: 0.0876 - accuracy: 0.9694 - val_loss: 0.0915 - val_accuracy: 0.9687\n",
            "Epoch 4/10\n",
            "4800/4800 [==============================] - 11s 2ms/step - loss: 0.0779 - accuracy: 0.9728 - val_loss: 0.0938 - val_accuracy: 0.9690\n",
            "Epoch 5/10\n",
            "4800/4800 [==============================] - 10s 2ms/step - loss: 0.0725 - accuracy: 0.9739 - val_loss: 0.0845 - val_accuracy: 0.9718\n",
            "Epoch 6/10\n",
            "4800/4800 [==============================] - 12s 2ms/step - loss: 0.0672 - accuracy: 0.9766 - val_loss: 0.0808 - val_accuracy: 0.9722\n",
            "Epoch 7/10\n",
            "4800/4800 [==============================] - 11s 2ms/step - loss: 0.0629 - accuracy: 0.9781 - val_loss: 0.0825 - val_accuracy: 0.9743\n",
            "Epoch 8/10\n",
            "4800/4800 [==============================] - 12s 2ms/step - loss: 0.0601 - accuracy: 0.9784 - val_loss: 0.0817 - val_accuracy: 0.9745\n",
            "Epoch 9/10\n",
            "4800/4800 [==============================] - 11s 2ms/step - loss: 0.0574 - accuracy: 0.9798 - val_loss: 0.0859 - val_accuracy: 0.9744\n",
            "Epoch 10/10\n",
            "4800/4800 [==============================] - 11s 2ms/step - loss: 0.0548 - accuracy: 0.9802 - val_loss: 0.0892 - val_accuracy: 0.9724\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "train_loss = history.history['loss'][-1]\n",
        "train_accuracy = history.history['accuracy'][-1]\n",
        "val_loss = history.history['val_loss'][-1]\n",
        "val_accuracy = history.history['val_accuracy'][-1]\n",
        "test_loss, test_accuracy = model.evaluate(x_test,y_test)"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "YjZVh2isgFVF",
        "outputId": "6b34ede1-ec41-4edd-ac00-6445b56fbb7e"
      },
      "execution_count": 80,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "313/313 [==============================] - 1s 1ms/step - loss: 0.0881 - accuracy: 0.9727\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "print('Train_loss:\\t', train_loss)\n",
        "print('Train_accuracy:\\t', train_accuracy)\n",
        "print('Val_loss:\\t', val_loss)\n",
        "print('Val_accuracy:\\t', val_accuracy)\n",
        "print('Test loss:\\t', test_loss)\n",
        "print('Test accuracy:\\t', test_accuracy)"
      ],
      "metadata": {
        "id": "FUmrUgNgY1L3",
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "outputId": "001437e9-adf7-4595-a3b5-09e52f079ea7"
      },
      "execution_count": 81,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Train_loss:\t 0.054842568933963776\n",
            "Train_accuracy:\t 0.9802291393280029\n",
            "Val_loss:\t 0.08922852575778961\n",
            "Val_accuracy:\t 0.9724166393280029\n",
            "Test loss:\t 0.0881127342581749\n",
            "Test accuracy:\t 0.9726999998092651\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "model.save('keras_model',)"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "Yj5d7bm9k_Ct",
        "outputId": "ea9e9d35-117f-4f25-904c-90873500cc4c"
      },
      "execution_count": 86,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "WARNING:absl:Found untraced functions such as _update_step_xla while saving (showing 1 of 1). These functions will not be directly callable after loading.\n"
          ]
        }
      ]
    }
  ]
}