Amazing-Python-Scripts

Форк
0
/
Fashion_MNIST_MultiClass_Image_Classification_(CNN).ipynb 
645 строк · 74.5 Кб
1
{
2
  "nbformat": 4,
3
  "nbformat_minor": 0,
4
  "metadata": {
5
    "colab": {
6
      "provenance": []
7
    },
8
    "kernelspec": {
9
      "name": "python3",
10
      "display_name": "Python 3"
11
    },
12
    "language_info": {
13
      "name": "python"
14
    }
15
  },
16
  "cells": [
17
    {
18
      "cell_type": "markdown",
19
      "source": [
20
        "Libraries"
21
      ],
22
      "metadata": {
23
        "id": "X1g131LkMs2l"
24
      }
25
    },
26
    {
27
      "cell_type": "code",
28
      "execution_count": 47,
29
      "metadata": {
30
        "id": "H579zGsgDeBv"
31
      },
32
      "outputs": [],
33
      "source": [
34
        "import tensorflow as tf\n",
35
        "import pandas as pd\n",
36
        "import numpy as np\n",
37
        "from google.colab import files\n",
38
        "import matplotlib.pyplot as plt\n",
39
        "from keras.preprocessing import image"
40
      ]
41
    },
42
    {
43
      "cell_type": "code",
44
      "source": [
45
        "dataset=tf.keras.datasets.fashion_mnist\n",
46
        "(train,train_labels),(test,test_labels)=dataset.load_data()"
47
      ],
48
      "metadata": {
49
        "id": "r2pdmx2FM7MJ"
50
      },
51
      "execution_count": 8,
52
      "outputs": []
53
    },
54
    {
55
      "cell_type": "code",
56
      "source": [
57
        "train.shape"
58
      ],
59
      "metadata": {
60
        "colab": {
61
          "base_uri": "https://localhost:8080/"
62
        },
63
        "id": "rmMBgOUeODHu",
64
        "outputId": "71ae9891-afd6-4b53-aa39-e4327cf3b2e3"
65
      },
66
      "execution_count": 9,
67
      "outputs": [
68
        {
69
          "output_type": "execute_result",
70
          "data": {
71
            "text/plain": [
72
              "(60000, 28, 28)"
73
            ]
74
          },
75
          "metadata": {},
76
          "execution_count": 9
77
        }
78
      ]
79
    },
80
    {
81
      "cell_type": "code",
82
      "source": [
83
        "test.shape"
84
      ],
85
      "metadata": {
86
        "colab": {
87
          "base_uri": "https://localhost:8080/"
88
        },
89
        "id": "QmTbWMRxOK--",
90
        "outputId": "b21820ac-2a2f-4f62-8f2e-016f9db19fd5"
91
      },
92
      "execution_count": 10,
93
      "outputs": [
94
        {
95
          "output_type": "execute_result",
96
          "data": {
97
            "text/plain": [
98
              "(10000, 28, 28)"
99
            ]
100
          },
101
          "metadata": {},
102
          "execution_count": 10
103
        }
104
      ]
105
    },
106
    {
107
      "cell_type": "markdown",
108
      "source": [
109
        "Image Preprocessing"
110
      ],
111
      "metadata": {
112
        "id": "VbqyMa3dN9l1"
113
      }
114
    },
115
    {
116
      "cell_type": "code",
117
      "source": [
118
        "train=train.reshape(60000,28,28,1)\n",
119
        "train=train/255"
120
      ],
121
      "metadata": {
122
        "id": "k2AdnnteNzI8"
123
      },
124
      "execution_count": 12,
125
      "outputs": []
126
    },
127
    {
128
      "cell_type": "code",
129
      "source": [
130
        "test=test.reshape(10000,28,28,1)\n",
131
        "test=test/255"
132
      ],
133
      "metadata": {
134
        "id": "w89GRl4YOcti"
135
      },
136
      "execution_count": 14,
137
      "outputs": []
138
    },
139
    {
140
      "cell_type": "markdown",
141
      "source": [
142
        "CNN"
143
      ],
144
      "metadata": {
145
        "id": "m1XWcdo7QAXK"
146
      }
147
    },
148
    {
149
      "cell_type": "code",
150
      "source": [
151
        "cnn=tf.keras.models.Sequential([\n",
152
        "    tf.keras.layers.Conv2D(64,(3,3),activation=\"relu\",padding=\"same\",input_shape=(28,28,1)),\n",
153
        "    tf.keras.layers.MaxPooling2D(2,2),\n",
154
        "     tf.keras.layers.Conv2D(32,(3,3),activation=\"relu\",padding=\"same\"),\n",
155
        "     tf.keras.layers.MaxPooling2D(2,2),\n",
156
        "     tf.keras.layers.Flatten(),\n",
157
        "    tf.keras.layers.Dense(128,activation=\"relu\"),\n",
158
        "    tf.keras.layers.Dense(64,activation=\"relu\"),\n",
159
        "    tf.keras.layers.Dense(10,activation=\"softmax\")\n",
160
        "])\n",
161
        "\n",
162
        "cnn.summary()"
163
      ],
164
      "metadata": {
165
        "colab": {
166
          "base_uri": "https://localhost:8080/"
167
        },
168
        "id": "BWJJK4-qOktf",
169
        "outputId": "8c0d251c-0add-477e-959f-752997d6e76e"
170
      },
171
      "execution_count": 18,
172
      "outputs": [
173
        {
174
          "output_type": "stream",
175
          "name": "stdout",
176
          "text": [
177
            "Model: \"sequential_1\"\n",
178
            "_________________________________________________________________\n",
179
            " Layer (type)                Output Shape              Param #   \n",
180
            "=================================================================\n",
181
            " conv2d_2 (Conv2D)           (None, 28, 28, 64)        640       \n",
182
            "                                                                 \n",
183
            " max_pooling2d_2 (MaxPooling  (None, 14, 14, 64)       0         \n",
184
            " 2D)                                                             \n",
185
            "                                                                 \n",
186
            " conv2d_3 (Conv2D)           (None, 14, 14, 32)        18464     \n",
187
            "                                                                 \n",
188
            " max_pooling2d_3 (MaxPooling  (None, 7, 7, 32)         0         \n",
189
            " 2D)                                                             \n",
190
            "                                                                 \n",
191
            " flatten_1 (Flatten)         (None, 1568)              0         \n",
192
            "                                                                 \n",
193
            " dense_3 (Dense)             (None, 128)               200832    \n",
194
            "                                                                 \n",
195
            " dense_4 (Dense)             (None, 64)                8256      \n",
196
            "                                                                 \n",
197
            " dense_5 (Dense)             (None, 10)                650       \n",
198
            "                                                                 \n",
199
            "=================================================================\n",
200
            "Total params: 228,842\n",
201
            "Trainable params: 228,842\n",
202
            "Non-trainable params: 0\n",
203
            "_________________________________________________________________\n"
204
          ]
205
        }
206
      ]
207
    },
208
    {
209
      "cell_type": "code",
210
      "source": [
211
        "cnn.compile(optimizer=\"adam\",loss=\"sparse_categorical_crossentropy\",metrics=[\"accuracy\"])"
212
      ],
213
      "metadata": {
214
        "id": "hj6WRNLUQHp_"
215
      },
216
      "execution_count": 19,
217
      "outputs": []
218
    },
219
    {
220
      "cell_type": "code",
221
      "source": [
222
        "model=cnn.fit(train,train_labels,epochs=10)"
223
      ],
224
      "metadata": {
225
        "colab": {
226
          "base_uri": "https://localhost:8080/"
227
        },
228
        "id": "7LIcK4A5QWYa",
229
        "outputId": "7609a3e0-9e5c-4859-aa3a-422d70de872a"
230
      },
231
      "execution_count": 20,
232
      "outputs": [
233
        {
234
          "output_type": "stream",
235
          "name": "stdout",
236
          "text": [
237
            "Epoch 1/10\n",
238
            "1875/1875 [==============================] - 134s 71ms/step - loss: 0.4358 - accuracy: 0.8425\n",
239
            "Epoch 2/10\n",
240
            "1875/1875 [==============================] - 128s 68ms/step - loss: 0.2832 - accuracy: 0.8957\n",
241
            "Epoch 3/10\n",
242
            "1875/1875 [==============================] - 124s 66ms/step - loss: 0.2402 - accuracy: 0.9115\n",
243
            "Epoch 4/10\n",
244
            "1875/1875 [==============================] - 133s 71ms/step - loss: 0.2101 - accuracy: 0.9212\n",
245
            "Epoch 5/10\n",
246
            "1875/1875 [==============================] - 124s 66ms/step - loss: 0.1834 - accuracy: 0.9311\n",
247
            "Epoch 6/10\n",
248
            "1875/1875 [==============================] - 120s 64ms/step - loss: 0.1645 - accuracy: 0.9382\n",
249
            "Epoch 7/10\n",
250
            "1875/1875 [==============================] - 122s 65ms/step - loss: 0.1472 - accuracy: 0.9445\n",
251
            "Epoch 8/10\n",
252
            "1875/1875 [==============================] - 124s 66ms/step - loss: 0.1311 - accuracy: 0.9505\n",
253
            "Epoch 9/10\n",
254
            "1875/1875 [==============================] - 122s 65ms/step - loss: 0.1148 - accuracy: 0.9565\n",
255
            "Epoch 10/10\n",
256
            "1875/1875 [==============================] - 121s 65ms/step - loss: 0.1023 - accuracy: 0.9611\n"
257
          ]
258
        }
259
      ]
260
    },
261
    {
262
      "cell_type": "code",
263
      "source": [
264
        "train_labels"
265
      ],
266
      "metadata": {
267
        "colab": {
268
          "base_uri": "https://localhost:8080/"
269
        },
270
        "id": "wkar6_fjc_aB",
271
        "outputId": "336628f0-eacb-4bc4-d0dd-906b313e81ff"
272
      },
273
      "execution_count": 45,
274
      "outputs": [
275
        {
276
          "output_type": "execute_result",
277
          "data": {
278
            "text/plain": [
279
              "array([9, 0, 0, ..., 3, 0, 5], dtype=uint8)"
280
            ]
281
          },
282
          "metadata": {},
283
          "execution_count": 45
284
        }
285
      ]
286
    },
287
    {
288
      "cell_type": "code",
289
      "source": [
290
        "plt.plot(range(1, 11), model.history['accuracy'], marker='o')\n",
291
        "plt.xlabel('Epochs')\n",
292
        "plt.ylabel('Accuracy')\n",
293
        "plt.title('Training Accuracy over Epochs')"
294
      ],
295
      "metadata": {
296
        "colab": {
297
          "base_uri": "https://localhost:8080/",
298
          "height": 489
299
        },
300
        "id": "OKqilKpDXv3D",
301
        "outputId": "31ef7d1b-99b4-48b7-d3f6-a953b23d92d7"
302
      },
303
      "execution_count": 30,
304
      "outputs": [
305
        {
306
          "output_type": "execute_result",
307
          "data": {
308
            "text/plain": [
309
              "Text(0.5, 1.0, 'Training Accuracy over Epochs')"
310
            ]
311
          },
312
          "metadata": {},
313
          "execution_count": 30
314
        },
315
        {
316
          "output_type": "display_data",
317
          "data": {
318
            "text/plain": [
319
              "<Figure size 640x480 with 1 Axes>"
320
            ],
321
            "image/png": "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\n"
322
          },
323
          "metadata": {}
324
        }
325
      ]
326
    },
327
    {
328
      "cell_type": "code",
329
      "source": [
330
        "testing_accuracy = []\n",
331
        "for epoch in range(10):\n",
332
        "    testing_results = cnn.evaluate(test, test_labels, verbose=0)\n",
333
        "    testing_accuracy.append(testing_results[1])"
334
      ],
335
      "metadata": {
336
        "id": "LXtuThIBYFIn"
337
      },
338
      "execution_count": 31,
339
      "outputs": []
340
    },
341
    {
342
      "cell_type": "code",
343
      "source": [
344
        "plt.plot(range(1, 11), testing_accuracy, marker='o', label='Testing Accuracy')"
345
      ],
346
      "metadata": {
347
        "colab": {
348
          "base_uri": "https://localhost:8080/",
349
          "height": 447
350
        },
351
        "id": "ubNSWfTgYTX7",
352
        "outputId": "397ee654-720e-40f5-9583-d38fdd15d8cd"
353
      },
354
      "execution_count": 32,
355
      "outputs": [
356
        {
357
          "output_type": "execute_result",
358
          "data": {
359
            "text/plain": [
360
              "[<matplotlib.lines.Line2D at 0x7ca5b90c8b80>]"
361
            ]
362
          },
363
          "metadata": {},
364
          "execution_count": 32
365
        },
366
        {
367
          "output_type": "display_data",
368
          "data": {
369
            "text/plain": [
370
              "<Figure size 640x480 with 1 Axes>"
371
            ],
372
            "image/png": "iVBORw0KGgoAAAANSUhEUgAAAiwAAAGdCAYAAAAxCSikAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAf5klEQVR4nO3de3DU9f3v8VcuJrtCsiiQhYRFAodpBDQBElKgtZ0xx1SUAsMoHrHQOKPFJgjElgkQLqIQtZoJAnIbbRkiR5xy8dIah0kVjdIEE3D0h1wsjmQCCeBPsxCbANn9/WFdTw4JshHcN5vnY2bHyTff73c/bxfd5+x+d4nw+/1+AQAAGBYZ6gUAAAB8H4IFAACYR7AAAADzCBYAAGAewQIAAMwjWAAAgHkECwAAMI9gAQAA5kWHegGXi8/n07FjxxQXF6eIiIhQLwcAAFwCv9+v06dPKzExUZGRHb+OEjbBcuzYMXk8nlAvAwAAdEJtba369evX4e/DJlji4uIkfTNwfHx8iFcDAAAuhdfrlcfjCTyPdyRsguXbt4Hi4+MJFgAArjLfdzkHF90CAADzCBYAAGAewQIAAMwjWAAAgHkECwAAMI9gAQAA5hEsAADAPIIFAACYR7AAAADzCBYAAGAewQIAAMwjWAAAgHkECwAAMI9gAQAA5hEsAADAPIIFAACYR7AAAADzCBYAAGAewQIAAMwjWAAAgHkECwAAMI9gAQAA5hEsAADAPIIFAACYR7AAAADzCBYAAGAewQIAAMwjWAAAgHkECwAAMI9gAQAA5nUqWFavXq0BAwbI4XAoMzNTVVVVHe577tw5LV26VIMGDZLD4VBqaqrKysou2K+urk733XefevbsKafTqZtuukkffPBBZ5YHAADCTNDBsmXLFuXn52vx4sWqqalRamqqsrOzdeLEiXb3Lyws1Lp167Ry5Urt379fM2bM0KRJk7R3797APl9++aXGjh2ra665Rm+88Yb279+vZ555Rtddd13nJwMAAGEjwu/3+4M5IDMzUxkZGVq1apUkyefzyePxaObMmSooKLhg/8TERC1YsEC5ubmBbZMnT5bT6VRpaakkqaCgQO+9957efffdTg/i9XrlcrnU2Nio+Pj4Tp8HAAD8eC71+TuoV1jOnj2r6upqZWVlfXeCyEhlZWVp9+7d7R7T0tIih8PRZpvT6VRFRUXg51dffVXp6em66667lJCQoOHDh2vDhg0XXUtLS4u8Xm+bGwAACE9BBcupU6fU2toqt9vdZrvb7VZ9fX27x2RnZ6u4uFiHDx+Wz+fTzp07tW3bNh0/fjywz5EjR7RmzRoNHjxYb775ph566CE9/PDD2rhxY4drKSoqksvlCtw8Hk8wowAAgKvIFf+U0IoVKzR48GClpKQoJiZGeXl5ysnJUWTkd3ft8/k0YsQILV++XMOHD9eDDz6oBx54QGvXru3wvPPmzVNjY2PgVltbe6VHAQAAIRJUsPTq1UtRUVFqaGhos72hoUF9+vRp95jevXtrx44dampq0ueff64DBw6oe/fuGjhwYGCfvn37asiQIW2Ou/HGG3X06NEO1xIbG6v4+Pg2NwAAEJ6CCpaYmBiNHDlS5eXlgW0+n0/l5eUaPXr0RY91OBxKSkrS+fPntXXrVk2YMCHwu7Fjx+rgwYNt9j906JBuuOGGYJYHAADCVHSwB+Tn52v69OlKT0/XqFGjVFJSoqamJuXk5EiSpk2bpqSkJBUVFUmSKisrVVdXp7S0NNXV1WnJkiXy+XyaO3du4Jxz5szRmDFjtHz5ct19992qqqrS+vXrtX79+ss0JgAAuJoFHSxTpkzRyZMntWjRItXX1ystLU1lZWWBC3GPHj3a5vqU5uZmFRYW6siRI+revbvGjRunTZs2qUePHoF9MjIytH37ds2bN09Lly5VcnKySkpKNHXq1B8+IQAAuOoF/T0sVvE9LAAAXH2uyPewAAAAhALBAgAAzCNYAACAeQQLAAAwj2ABAADmESwAAMA8ggUAAJhHsAAAAPMIFgAAYB7BAgAAzCNYAACAeQQLAAAwj2ABAADmESwAAMA8ggUAAJhHsAAAAPMIFgAAYB7BAgAAzCNYAACAeQQLAAAwj2ABAADmESwAAMA8ggUAAJhHsAAAAPMIFgAAYB7BAgAAzCNYAACAeQQLAAAwj2ABAADmESwAAMA8ggUAAJhHsAAAAPMIFgAAYB7BAgAAzCNYAACAeQQLAAAwj2ABAADmESwAAMA8ggUAAJhHsAAAAPMIFgAAYB7BAgAAzCNYAACAeQQLAAAwj2ABAADmESwAAMA8ggUAAJhHsAAAAPMIFgAAYB7BAgAAzCNYAACAeQQLAAAwj2ABAADmESwAAMA8ggUAAJhHsAAAAPMIFgAAYB7BAgAAzCNYAACAeQQLAAAwj2ABAADmESwAAMC8TgXL6tWrNWDAADkcDmVmZqqqqqrDfc+dO6elS5dq0KBBcjgcSk1NVVlZWYf7P/HEE4qIiNDs2bM7szQAABCGgg6WLVu2KD8/X4sXL1ZNTY1SU1OVnZ2tEydOtLt/YWGh1q1bp5UrV2r//v2aMWOGJk2apL17916w7549e7Ru3TrdfPPNwU8CAADCVtDBUlxcrAceeEA5OTkaMmSI1q5dq2uvvVYvvPBCu/tv2rRJ8+fP17hx4zRw4EA99NBDGjdunJ555pk2+505c0ZTp07Vhg0bdN1113VuGgAAEJaCCpazZ8+qurpaWVlZ350gMlJZWVnavXt3u8e0tLTI4XC02eZ0OlVRUdFmW25uru644442576YlpYWeb3eNjcAABCeggqWU6dOqbW1VW63u812t9ut+vr6do/Jzs5WcXGxDh8+LJ/Pp507d2rbtm06fvx4YJ+XXnpJNTU1KioquuS1FBUVyeVyBW4ejyeYUQAAwFXkin9KaMWKFRo8eLBSUlIUExOjvLw85eTkKDLym7uura3VrFmz9OKLL17wSszFzJs3T42NjYFbbW3tlRoBAACEWFDB0qtXL0VFRamhoaHN9oaGBvXp06fdY3r37q0dO3aoqalJn3/+uQ4cOKDu3btr4MCBkqTq6mqdOHFCI0aMUHR0tKKjo7Vr1y49++yzio6OVmtra7vnjY2NVXx8fJsbAAAIT0EFS0xMjEaOHKny8vLANp/Pp/Lyco0ePfqixzocDiUlJen8+fPaunWrJkyYIEm69dZb9dFHH2nfvn2BW3p6uqZOnap9+/YpKiqqE2MBAIBwEh3sAfn5+Zo+fbrS09M1atQolZSUqKmpSTk5OZKkadOmKSkpKXA9SmVlperq6pSWlqa6ujotWbJEPp9Pc+fOlSTFxcVp2LBhbe6jW7du6tmz5wXbAQBA1xR0sEyZMkUnT57UokWLVF9fr7S0NJWVlQUuxD169Gjg+hRJam5uVmFhoY4cOaLu3btr3Lhx2rRpk3r06HHZhgAAAOEtwu/3+0O9iMvB6/XK5XKpsbGR61kAALhKXOrzN3+XEAAAMI9gAQAA5hEsAADAPIIFAACYR7AAAADzCBYAAGAewQIAAMwjWAAAgHkECwAAMI9gAQAA5hEsAADAPIIFAACYR7AAAADzCBYAAGAewQIAAMwjWAAAgHkECwAAMI9gAQAA5hEsAADAPIIFAACYR7AAAADzCBYAAGAewQIAAMwjWAAAgHkECwAAMI9gAQAA5hEsAADAPIIFAACYR7AAAADzCBYAAGAewQIAAMwjWAAAgHkECwAAMI9gAQAA5hEsAADAPIIFAACYR7AAAADzCBYAAGAewQIAAMwjWAAAgHkECwAAMI9gAQAA5hEsAADAPIIFAACYR7AAAADzCBYAAGAewQIAAMwjWAAAgHkECwAAMI9gAQAA5hEsAADAPIIFAACYR7AAAADzCBYAAGAewQIAAMwjWAAAgHkECwAAMI9gAQAA5hEsAADAPIIFAACYR7AAAADzCBYAAGBep4Jl9erVGjBggBwOhzIzM1VVVdXhvufOndPSpUs1aNAgORwOpaamqqysrM0+RUVFysjIUFxcnBISEjRx4kQdPHiwM0u7rFp9fu3+1xd6ZV+ddv/rC7X6/KFeUqcwhy3hMocUPrMwhy3MYYuVOaKDPWDLli3Kz8/X2rVrlZmZqZKSEmVnZ+vgwYNKSEi4YP/CwkKVlpZqw4YNSklJ0ZtvvqlJkybp/fff1/DhwyVJu3btUm5urjIyMnT+/HnNnz9ft912m/bv369u3br98Ck7oezj43r0tf063tgc2NbX5dDi8UP0q2F9Q7KmzmAOW8JlDil8ZmEOW5jDFktzRPj9/qBSKTMzUxkZGVq1apUkyefzyePxaObMmSooKLhg/8TERC1YsEC5ubmBbZMnT5bT6VRpaWm793Hy5EklJCRo165duuWWWy5pXV6vVy6XS42NjYqPjw9mpAuUfXxcD5XW6P//FxPxn3+uuW/EVfEHjjlsCZc5pPCZhTlsYQ5bfqw5LvX5O6hXWM6ePavq6mrNmzcvsC0yMlJZWVnavXt3u8e0tLTI4XC02eZ0OlVRUdHh/TQ2NkqSrr/++g73aWlpUUtLS+Bnr9d7STN8n1afX4++tv+CB0iS/PrmgVry6n6N/V+9FBUZ0c5eNrT6/Fr86n8xhxHhMocUPrMwhy3MYculzPHoa/v1v4f0+dHmCOoVlmPHjikpKUnvv/++Ro8eHdg+d+5c7dq1S5WVlRccc++99+rDDz/Ujh07NGjQIJWXl2vChAlqbW1tExzf8vl8+vWvf62vvvrqolGzZMkSPfrooxds/6GvsOz+1xf6Pxv+2enjAQDoKv7vAz/V6EE9f9A5LvUVliv+KaEVK1Zo8ODBSklJUUxMjPLy8pSTk6PIyPbvOjc3Vx9//LFeeumli5533rx5amxsDNxqa2svy3pPnG7+/p0AAMCP+pwZ1FtCvXr1UlRUlBoaGtpsb2hoUJ8+fdo9pnfv3tqxY4eam5v1xRdfKDExUQUFBRo4cOAF++bl5en111/XO++8o379+l10LbGxsYqNjQ1m+ZckIc7x/TtJ+ktOhkYld/yWVahVffbf+u2f93zvfszx4wiXOaTwmYU5bGEOWy51jkt9zrwcggqWmJgYjRw5UuXl5Zo4caKkb97CKS8vV15e3kWPdTgcSkpK0rlz57R161bdfffdgd/5/X7NnDlT27dv19tvv63k5OTgJ7lMRiVfr74uh+obm9t97y5CUh+XQz8f3Nv0+48/H9ybOQwJlzmk8JmFOWxhDlsudY4fM7qCfksoPz9fGzZs0MaNG/XJJ5/ooYceUlNTk3JyciRJ06ZNa3NRbmVlpbZt26YjR47o3Xff1a9+9Sv5fD7NnTs3sE9ubq5KS0u1efNmxcXFqb6+XvX19fr3v/99GUYMTlRkhBaPHyLpuyuhv/Xtz4vHDzH9B01iDmvCZQ4pfGZhDluYwxaLcwQdLFOmTNHTTz+tRYsWKS0tTfv27VNZWZncbrck6ejRozp+/Hhg/+bmZhUWFmrIkCGaNGmSkpKSVFFRoR49egT2WbNmjRobG/XLX/5Sffv2Ddy2bNnywyfshF8N66s1941QH1fbl7r6uBxXzcfRJOawJlzmkMJnFuawhTlssTZH0N/DYtXl/B6Wb7X6/Kr67L914nSzEuK+eenLehW3hzlsCZc5pPCZhTlsYQ5brvQcl/r8TbAAAICQMfOxZgAAgB+KYAEAAOYRLAAAwDyCBQAAmEewAAAA8wgWAABgHsECAADMI1gAAIB5BAsAADCPYAEAAOYRLAAAwDyCBQAAmEewAAAA8wgWAABgHsECAADMI1gAAIB5BAsAADCPYAEAAOYRLAAAwDyCBQAAmEewAAAA8wgWAABgHsECAADMI1gAAIB5BAsAADCPYAEAAOYRLAAAwDyCBQAAmEewAAAA8wgWAABgHsECAADMI1gAAIB5BAsAADCPYAEAAOYRLAAAwDyCBQAAmEewAAAA8wgWAABgHsECAADMI1gAAIB5BAsAADCPYAEAAOYRLAAAwDyCBQAAmEewAAAA8wgWAABgHsECAADMI1gAAIB5BAsAADCPYAEAAOYRLAAAwDyCBQAAmEewAAAA8wgWAABgHsECAADMI1gAAIB5BAsAADCPYAEAAOYRLAAAwDyCBQAAmEewAAAA8zoVLKtXr9aAAQPkcDiUmZmpqqqqDvc9d+6cli5dqkGDBsnhcCg1NVVlZWU/6JwAAKBrCTpYtmzZovz8fC1evFg1NTVKTU1Vdna2Tpw40e7+hYWFWrdunVauXKn9+/drxowZmjRpkvbu3dvpcwIAgK4lwu/3+4M5IDMzUxkZGVq1apUkyefzyePxaObMmSooKLhg/8TERC1YsEC5ubmBbZMnT5bT6VRpaWmnztker9crl8ulxsZGxcfHBzMSAAAIkUt9/g7qFZazZ8+qurpaWVlZ350gMlJZWVnavXt3u8e0tLTI4XC02eZ0OlVRUdHpc357Xq/X2+YGAADCU1DBcurUKbW2tsrtdrfZ7na7VV9f3+4x2dnZKi4u1uHDh+Xz+bRz505t27ZNx48f7/Q5JamoqEgulytw83g8wYwCAACuIlf8U0IrVqzQ4MGDlZKSopiYGOXl5SknJ0eRkT/srufNm6fGxsbArba29jKtGAAAWBNUNfTq1UtRUVFqaGhos72hoUF9+vRp95jevXtrx44dampq0ueff64DBw6oe/fuGjhwYKfPKUmxsbGKj49vcwMAAOEpqGCJiYnRyJEjVV5eHtjm8/lUXl6u0aNHX/RYh8OhpKQknT9/Xlu3btWECRN+8DkBAEDXEB3sAfn5+Zo+fbrS09M1atQolZSUqKmpSTk5OZKkadOmKSkpSUVFRZKkyspK1dXVKS0tTXV1dVqyZIl8Pp/mzp17yecEAABdW9DBMmXKFJ08eVKLFi1SfX290tLSVFZWFrho9ujRo22uT2lublZhYaGOHDmi7t27a9y4cdq0aZN69OhxyecEAABdW9Dfw2IV38MCAMDV54p8DwsAAEAoECwAAMA8ggUAAJhHsAAAAPMIFgAAYB7BAgAAzCNYAACAeQQLAAAwj2ABAADmESwAAMA8ggUAAJhHsAAAAPMIFgAAYB7BAgAAzCNYAACAeQQLAAAwj2ABAADmESwAAMA8ggUAAJhHsAAAAPMIFgAAYB7BAgAAzCNYAACAeQQLAAAwj2ABAADmESwAAMA8ggUAAJhHsAAAAPMIFgAAYB7BAgAAzCNYAACAeQQLAAAwj2ABAADmESwAAMA8ggUAAJhHsAAAAPMIFgAAYB7BAgAAzCNYAACAeQQLAAAwj2ABAADmESwAAMA8ggUAAJhHsAAAAPMIFgAAYB7BAgAAzCNYAACAeQQLAAAwj2ABAADmESwAAMA8ggUAAJhHsAAAAPMIFgAAYB7BAgAAzCNYAACAeQQLAAAwj2ABAADmESwAAMA8ggUAAJhHsAAAAPMIFgAAYB7BAgAAzOtUsKxevVoDBgyQw+FQZmamqqqqLrp/SUmJfvKTn8jpdMrj8WjOnDlqbm4O/L61tVULFy5UcnKynE6nBg0apMcee0x+v78zywMAAGEmOtgDtmzZovz8fK1du1aZmZkqKSlRdna2Dh48qISEhAv237x5swoKCvTCCy9ozJgxOnTokH77298qIiJCxcXFkqQnn3xSa9as0caNGzV06FB98MEHysnJkcvl0sMPP/zDpwQAAFe1CH+QL2NkZmYqIyNDq1atkiT5fD55PB7NnDlTBQUFF+yfl5enTz75ROXl5YFtjzzyiCorK1VRUSFJuvPOO+V2u/X8888H9pk8ebKcTqdKS0svaV1er1cul0uNjY2Kj48PZiQAABAil/r8HdRbQmfPnlV1dbWysrK+O0FkpLKysrR79+52jxkzZoyqq6sDbxsdOXJEf//73zVu3Lg2+5SXl+vQoUOSpA8//FAVFRW6/fbbg1keAAAIU0G9JXTq1Cm1trbK7Xa32e52u3XgwIF2j7n33nt16tQp/exnP5Pf79f58+c1Y8YMzZ8/P7BPQUGBvF6vUlJSFBUVpdbWVi1btkxTp07tcC0tLS1qaWkJ/Oz1eoMZBQAAXEWu+KeE3n77bS1fvlzPPfecampqtG3bNv3tb3/TY489Ftjn5Zdf1osvvqjNmzerpqZGGzdu1NNPP62NGzd2eN6ioiK5XK7AzePxXOlRAABAiAR1DcvZs2d17bXX6q9//asmTpwY2D59+nR99dVXeuWVVy445uc//7l++tOf6k9/+lNgW2lpqR588EGdOXNGkZGR8ng8KigoUG5ubmCfxx9/XKWlpR2+ctPeKywej4drWAAAuIpckWtYYmJiNHLkyDYX0Pp8PpWXl2v06NHtHvP1118rMrLt3URFRUlS4GPLHe3j8/k6XEtsbKzi4+Pb3AAAQHgK+mPN+fn5mj59utLT0zVq1CiVlJSoqalJOTk5kqRp06YpKSlJRUVFkqTx48eruLhYw4cPV2Zmpj799FMtXLhQ48ePD4TL+PHjtWzZMvXv319Dhw7V3r17VVxcrPvvv/8yjgoAAK5WQQfLlClTdPLkSS1atEj19fVKS0tTWVlZ4ELco0ePtnm1pLCwUBERESosLFRdXZ169+4dCJRvrVy5UgsXLtTvf/97nThxQomJifrd736nRYsWXYYRAQDA1S7o72Gxiu9hAQDg6nNFrmEBAAAIBYIFAACYR7AAAADzCBYAAGAewQIAAMwjWAAAgHkECwAAMI9gAQAA5hEsAADAPIIFAACYR7AAAADzCBYAAGAewQIAAMwjWAAAgHkECwAAMI9gAQAA5hEsAADAPIIFAACYR7AAAADzCBYAAGAewQIAAMwjWAAAgHkECwAAMI9gAQAA5hEsAADAPIIFAACYR7AAAADzCBYAAGAewQIAAMwjWAAAgHkECwAAMI9gAQAA5kWHegGXi9/vlyR5vd4QrwQAAFyqb5+3v30e70jYBMvp06clSR6PJ8QrAQAAwTp9+rRcLleHv4/wf1/SXCV8Pp+OHTumuLg4RUREhHo55ni9Xnk8HtXW1io+Pj7Uy+nyeDzs4TGxhcfDliv5ePj9fp0+fVqJiYmKjOz4SpWweYUlMjJS/fr1C/UyzIuPj+c/fkN4POzhMbGFx8OWK/V4XOyVlW9x0S0AADCPYAEAAOYRLF1EbGysFi9erNjY2FAvBeLxsIjHxBYeD1ssPB5hc9EtAAAIX7zCAgAAzCNYAACAeQQLAAAwj2ABAADmESxhrqioSBkZGYqLi1NCQoImTpyogwcPhnpZ+I8nnnhCERERmj17dqiX0mXV1dXpvvvuU8+ePeV0OnXTTTfpgw8+CPWyuqTW1lYtXLhQycnJcjqdGjRokB577LHv/TtmcPm88847Gj9+vBITExUREaEdO3a0+b3f79eiRYvUt29fOZ1OZWVl6fDhwz/K2giWMLdr1y7l5ubqn//8p3bu3Klz587ptttuU1NTU6iX1uXt2bNH69at08033xzqpXRZX375pcaOHatrrrlGb7zxhvbv369nnnlG1113XaiX1iU9+eSTWrNmjVatWqVPPvlETz75pJ566imtXLky1EvrMpqampSamqrVq1e3+/unnnpKzz77rNauXavKykp169ZN2dnZam5uvuJr42PNXczJkyeVkJCgXbt26ZZbbgn1crqsM2fOaMSIEXruuef0+OOPKy0tTSUlJaFeVpdTUFCg9957T++++26olwJJd955p9xut55//vnAtsmTJ8vpdKq0tDSEK+uaIiIitH37dk2cOFHSN6+uJCYm6pFHHtEf/vAHSVJjY6Pcbrf+8pe/6J577rmi6+EVli6msbFRknT99deHeCVdW25uru644w5lZWWFeild2quvvqr09HTdddddSkhI0PDhw7Vhw4ZQL6vLGjNmjMrLy3Xo0CFJ0ocffqiKigrdfvvtIV4ZJOmzzz5TfX19m/9vuVwuZWZmavfu3Vf8/sPmLz/E9/P5fJo9e7bGjh2rYcOGhXo5XdZLL72kmpoa7dmzJ9RL6fKOHDmiNWvWKD8/X/Pnz9eePXv08MMPKyYmRtOnTw/18rqcgoICeb1epaSkKCoqSq2trVq2bJmmTp0a6qVBUn19vSTJ7Xa32e52uwO/u5IIli4kNzdXH3/8sSoqKkK9lC6rtrZWs2bN0s6dO+VwOEK9nC7P5/MpPT1dy5cvlyQNHz5cH3/8sdauXUuwhMDLL7+sF198UZs3b9bQoUO1b98+zZ49W4mJiTwe4C2hriIvL0+vv/663nrrLfXr1y/Uy+myqqurdeLECY0YMULR0dGKjo7Wrl279Oyzzyo6Olqtra2hXmKX0rdvXw0ZMqTNthtvvFFHjx4N0Yq6tj/+8Y8qKCjQPffco5tuukm/+c1vNGfOHBUVFYV6aZDUp08fSVJDQ0Ob7Q0NDYHfXUkES5jz+/3Ky8vT9u3b9Y9//EPJycmhXlKXduutt+qjjz7Svn37Arf09HRNnTpV+/btU1RUVKiX2KWMHTv2go/5Hzp0SDfccEOIVtS1ff3114qMbPu0FBUVJZ/PF6IV4f+VnJysPn36qLy8PLDN6/WqsrJSo0ePvuL3z1tCYS43N1ebN2/WK6+8ori4uMD7jC6XS06nM8Sr63ri4uIuuH6oW7du6tmzJ9cVhcCcOXM0ZswYLV++XHfffbeqqqq0fv16rV+/PtRL65LGjx+vZcuWqX///ho6dKj27t2r4uJi3X///aFeWpdx5swZffrpp4GfP/vsM+3bt0/XX3+9+vfvr9mzZ+vxxx/X4MGDlZycrIULFyoxMTHwSaIryo+wJqnd25///OdQLw3/8Ytf/MI/a9asUC+jy3rttdf8w4YN88fGxvpTUlL869evD/WSuiyv1+ufNWuWv3///n6Hw+EfOHCgf8GCBf6WlpZQL63LeOutt9p9zpg+fbrf7/f7fT6ff+HChX632+2PjY3133rrrf6DBw/+KGvje1gAAIB5XMMCAADMI1gAAIB5BAsAADCPYAEAAOYRLAAAwDyCBQAAmEewAAAA8wgWAABgHsECAADMI1gAAIB5BAsAADCPYAEAAOb9D5CHMJDnx8WRAAAAAElFTkSuQmCC\n"
373
          },
374
          "metadata": {}
375
        }
376
      ]
377
    },
378
    {
379
      "cell_type": "code",
380
      "source": [
381
        "uploaded_file = files.upload()\n",
382
        "uploaded_image_path = list(uploaded_file.keys())[0]"
383
      ],
384
      "metadata": {
385
        "colab": {
386
          "base_uri": "https://localhost:8080/",
387
          "height": 73
388
        },
389
        "id": "uHpMx4y2RzxQ",
390
        "outputId": "81089118-b052-409f-c5f6-1168a474244a"
391
      },
392
      "execution_count": 23,
393
      "outputs": [
394
        {
395
          "output_type": "display_data",
396
          "data": {
397
            "text/plain": [
398
              "<IPython.core.display.HTML object>"
399
            ],
400
            "text/html": [
401
              "\n",
402
              "     <input type=\"file\" id=\"files-9fee1ebd-772a-4401-be69-08f68113fd98\" name=\"files[]\" multiple disabled\n",
403
              "        style=\"border:none\" />\n",
404
              "     <output id=\"result-9fee1ebd-772a-4401-be69-08f68113fd98\">\n",
405
              "      Upload widget is only available when the cell has been executed in the\n",
406
              "      current browser session. Please rerun this cell to enable.\n",
407
              "      </output>\n",
408
              "      <script>// Copyright 2017 Google LLC\n",
409
              "//\n",
410
              "// Licensed under the Apache License, Version 2.0 (the \"License\");\n",
411
              "// you may not use this file except in compliance with the License.\n",
412
              "// You may obtain a copy of the License at\n",
413
              "//\n",
414
              "//      http://www.apache.org/licenses/LICENSE-2.0\n",
415
              "//\n",
416
              "// Unless required by applicable law or agreed to in writing, software\n",
417
              "// distributed under the License is distributed on an \"AS IS\" BASIS,\n",
418
              "// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n",
419
              "// See the License for the specific language governing permissions and\n",
420
              "// limitations under the License.\n",
421
              "\n",
422
              "/**\n",
423
              " * @fileoverview Helpers for google.colab Python module.\n",
424
              " */\n",
425
              "(function(scope) {\n",
426
              "function span(text, styleAttributes = {}) {\n",
427
              "  const element = document.createElement('span');\n",
428
              "  element.textContent = text;\n",
429
              "  for (const key of Object.keys(styleAttributes)) {\n",
430
              "    element.style[key] = styleAttributes[key];\n",
431
              "  }\n",
432
              "  return element;\n",
433
              "}\n",
434
              "\n",
435
              "// Max number of bytes which will be uploaded at a time.\n",
436
              "const MAX_PAYLOAD_SIZE = 100 * 1024;\n",
437
              "\n",
438
              "function _uploadFiles(inputId, outputId) {\n",
439
              "  const steps = uploadFilesStep(inputId, outputId);\n",
440
              "  const outputElement = document.getElementById(outputId);\n",
441
              "  // Cache steps on the outputElement to make it available for the next call\n",
442
              "  // to uploadFilesContinue from Python.\n",
443
              "  outputElement.steps = steps;\n",
444
              "\n",
445
              "  return _uploadFilesContinue(outputId);\n",
446
              "}\n",
447
              "\n",
448
              "// This is roughly an async generator (not supported in the browser yet),\n",
449
              "// where there are multiple asynchronous steps and the Python side is going\n",
450
              "// to poll for completion of each step.\n",
451
              "// This uses a Promise to block the python side on completion of each step,\n",
452
              "// then passes the result of the previous step as the input to the next step.\n",
453
              "function _uploadFilesContinue(outputId) {\n",
454
              "  const outputElement = document.getElementById(outputId);\n",
455
              "  const steps = outputElement.steps;\n",
456
              "\n",
457
              "  const next = steps.next(outputElement.lastPromiseValue);\n",
458
              "  return Promise.resolve(next.value.promise).then((value) => {\n",
459
              "    // Cache the last promise value to make it available to the next\n",
460
              "    // step of the generator.\n",
461
              "    outputElement.lastPromiseValue = value;\n",
462
              "    return next.value.response;\n",
463
              "  });\n",
464
              "}\n",
465
              "\n",
466
              "/**\n",
467
              " * Generator function which is called between each async step of the upload\n",
468
              " * process.\n",
469
              " * @param {string} inputId Element ID of the input file picker element.\n",
470
              " * @param {string} outputId Element ID of the output display.\n",
471
              " * @return {!Iterable<!Object>} Iterable of next steps.\n",
472
              " */\n",
473
              "function* uploadFilesStep(inputId, outputId) {\n",
474
              "  const inputElement = document.getElementById(inputId);\n",
475
              "  inputElement.disabled = false;\n",
476
              "\n",
477
              "  const outputElement = document.getElementById(outputId);\n",
478
              "  outputElement.innerHTML = '';\n",
479
              "\n",
480
              "  const pickedPromise = new Promise((resolve) => {\n",
481
              "    inputElement.addEventListener('change', (e) => {\n",
482
              "      resolve(e.target.files);\n",
483
              "    });\n",
484
              "  });\n",
485
              "\n",
486
              "  const cancel = document.createElement('button');\n",
487
              "  inputElement.parentElement.appendChild(cancel);\n",
488
              "  cancel.textContent = 'Cancel upload';\n",
489
              "  const cancelPromise = new Promise((resolve) => {\n",
490
              "    cancel.onclick = () => {\n",
491
              "      resolve(null);\n",
492
              "    };\n",
493
              "  });\n",
494
              "\n",
495
              "  // Wait for the user to pick the files.\n",
496
              "  const files = yield {\n",
497
              "    promise: Promise.race([pickedPromise, cancelPromise]),\n",
498
              "    response: {\n",
499
              "      action: 'starting',\n",
500
              "    }\n",
501
              "  };\n",
502
              "\n",
503
              "  cancel.remove();\n",
504
              "\n",
505
              "  // Disable the input element since further picks are not allowed.\n",
506
              "  inputElement.disabled = true;\n",
507
              "\n",
508
              "  if (!files) {\n",
509
              "    return {\n",
510
              "      response: {\n",
511
              "        action: 'complete',\n",
512
              "      }\n",
513
              "    };\n",
514
              "  }\n",
515
              "\n",
516
              "  for (const file of files) {\n",
517
              "    const li = document.createElement('li');\n",
518
              "    li.append(span(file.name, {fontWeight: 'bold'}));\n",
519
              "    li.append(span(\n",
520
              "        `(${file.type || 'n/a'}) - ${file.size} bytes, ` +\n",
521
              "        `last modified: ${\n",
522
              "            file.lastModifiedDate ? file.lastModifiedDate.toLocaleDateString() :\n",
523
              "                                    'n/a'} - `));\n",
524
              "    const percent = span('0% done');\n",
525
              "    li.appendChild(percent);\n",
526
              "\n",
527
              "    outputElement.appendChild(li);\n",
528
              "\n",
529
              "    const fileDataPromise = new Promise((resolve) => {\n",
530
              "      const reader = new FileReader();\n",
531
              "      reader.onload = (e) => {\n",
532
              "        resolve(e.target.result);\n",
533
              "      };\n",
534
              "      reader.readAsArrayBuffer(file);\n",
535
              "    });\n",
536
              "    // Wait for the data to be ready.\n",
537
              "    let fileData = yield {\n",
538
              "      promise: fileDataPromise,\n",
539
              "      response: {\n",
540
              "        action: 'continue',\n",
541
              "      }\n",
542
              "    };\n",
543
              "\n",
544
              "    // Use a chunked sending to avoid message size limits. See b/62115660.\n",
545
              "    let position = 0;\n",
546
              "    do {\n",
547
              "      const length = Math.min(fileData.byteLength - position, MAX_PAYLOAD_SIZE);\n",
548
              "      const chunk = new Uint8Array(fileData, position, length);\n",
549
              "      position += length;\n",
550
              "\n",
551
              "      const base64 = btoa(String.fromCharCode.apply(null, chunk));\n",
552
              "      yield {\n",
553
              "        response: {\n",
554
              "          action: 'append',\n",
555
              "          file: file.name,\n",
556
              "          data: base64,\n",
557
              "        },\n",
558
              "      };\n",
559
              "\n",
560
              "      let percentDone = fileData.byteLength === 0 ?\n",
561
              "          100 :\n",
562
              "          Math.round((position / fileData.byteLength) * 100);\n",
563
              "      percent.textContent = `${percentDone}% done`;\n",
564
              "\n",
565
              "    } while (position < fileData.byteLength);\n",
566
              "  }\n",
567
              "\n",
568
              "  // All done.\n",
569
              "  yield {\n",
570
              "    response: {\n",
571
              "      action: 'complete',\n",
572
              "    }\n",
573
              "  };\n",
574
              "}\n",
575
              "\n",
576
              "scope.google = scope.google || {};\n",
577
              "scope.google.colab = scope.google.colab || {};\n",
578
              "scope.google.colab._files = {\n",
579
              "  _uploadFiles,\n",
580
              "  _uploadFilesContinue,\n",
581
              "};\n",
582
              "})(self);\n",
583
              "</script> "
584
            ]
585
          },
586
          "metadata": {}
587
        },
588
        {
589
          "output_type": "stream",
590
          "name": "stdout",
591
          "text": [
592
            "Saving pngwing.com (3).png to pngwing.com (3).png\n"
593
          ]
594
        }
595
      ]
596
    },
597
    {
598
      "cell_type": "code",
599
      "source": [
600
        "test_image = test[0]\n",
601
        "test_image = np.expand_dims(test_image, axis=0)\n",
602
        "test_image = test_image / 255.0\n",
603
        "\n",
604
        "predicted_label = cnn.predict(test_image)\n",
605
        "predicted_label = np.argmax(predicted_label)\n",
606
        "\n",
607
        "class_names = ['T-shirt/top', 'Trouser', 'Pullover', 'Dress', 'Coat', 'Sandal', 'Shirt', 'Sneaker', 'Bag', 'Ankle boot']\n",
608
        "predicted_class = class_names[predicted_label]\n",
609
        "\n",
610
        "plt.imshow(test[0].reshape(28, 28), cmap='gray')\n",
611
        "plt.title(f\"Predicted Class: {predicted_class}\")\n",
612
        "plt.axis('off')\n",
613
        "plt.show()\n"
614
      ],
615
      "metadata": {
616
        "colab": {
617
          "base_uri": "https://localhost:8080/",
618
          "height": 445
619
        },
620
        "id": "vWQp4SSDcT4Z",
621
        "outputId": "a6e4a2a2-affd-4b6c-a957-f3f601f073b0"
622
      },
623
      "execution_count": 46,
624
      "outputs": [
625
        {
626
          "output_type": "stream",
627
          "name": "stdout",
628
          "text": [
629
            "1/1 [==============================] - 0s 25ms/step\n"
630
          ]
631
        },
632
        {
633
          "output_type": "display_data",
634
          "data": {
635
            "text/plain": [
636
              "<Figure size 640x480 with 1 Axes>"
637
            ],
638
            "image/png": "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\n"
639
          },
640
          "metadata": {}
641
        }
642
      ]
643
    }
644
  ]
645
}

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.