Igor2004 commited on
Commit
36e23e9
·
1 Parent(s): bd0b706

Upload Zadanie4_Semenov_II_DRPK47.ipynb

Browse files
Files changed (1) hide show
  1. Zadanie4_Semenov_II_DRPK47.ipynb +233 -0
Zadanie4_Semenov_II_DRPK47.ipynb ADDED
@@ -0,0 +1,233 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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": "code",
19
+ "execution_count": 9,
20
+ "metadata": {
21
+ "id": "nvCz0Ivjhvdu"
22
+ },
23
+ "outputs": [],
24
+ "source": [
25
+ "import numpy as np\n",
26
+ "import matplotlib.pyplot as plt\n",
27
+ "import tensorflow.keras as keras\n",
28
+ "import tensorflow.keras.datasets\n",
29
+ "from tensorflow.keras.datasets import fashion_mnist\n",
30
+ "from tensorflow.keras.layers import Input, Dense"
31
+ ]
32
+ },
33
+ {
34
+ "cell_type": "code",
35
+ "source": [
36
+ "(train_x, train_y), (test_x, test_y) = fashion_mnist.load_data()\n",
37
+ "\n",
38
+ "train_x = train_x / 255\n",
39
+ "test_x = test_x / 255\n",
40
+ "\n",
41
+ "train_x = np.reshape(train_x, (len(train_x), 28 * 28))\n",
42
+ "test_x = np.reshape(test_x, (len(test_x), 28 * 28))"
43
+ ],
44
+ "metadata": {
45
+ "id": "qVz8ST8QIO-F",
46
+ "colab": {
47
+ "base_uri": "https://localhost:8080/"
48
+ },
49
+ "outputId": "9cb3f511-1e6f-4496-a198-0b90597c49b4"
50
+ },
51
+ "execution_count": 10,
52
+ "outputs": [
53
+ {
54
+ "output_type": "stream",
55
+ "name": "stdout",
56
+ "text": [
57
+ "Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/train-labels-idx1-ubyte.gz\n",
58
+ "29515/29515 [==============================] - 0s 0us/step\n",
59
+ "Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/train-images-idx3-ubyte.gz\n",
60
+ "26421880/26421880 [==============================] - 0s 0us/step\n",
61
+ "Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/t10k-labels-idx1-ubyte.gz\n",
62
+ "5148/5148 [==============================] - 0s 0us/step\n",
63
+ "Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/t10k-images-idx3-ubyte.gz\n",
64
+ "4422102/4422102 [==============================] - 0s 0us/step\n"
65
+ ]
66
+ }
67
+ ]
68
+ },
69
+ {
70
+ "cell_type": "code",
71
+ "source": [
72
+ "inputs = Input(shape = (28*28, ))\n",
73
+ "x = Dense(150, activation = 'relu')(inputs)\n",
74
+ "x = Dense(400, activation = 'relu')(x)\n",
75
+ "x = Dense(10, activation = 'relu')(x)\n",
76
+ "encoder = Dense(3, activation = 'linear')(x)\n",
77
+ "\n",
78
+ "\n",
79
+ "inputs_dec = Input(shape = (3, ))\n",
80
+ "x = Dense(10, activation = 'relu')(inputs_dec)\n",
81
+ "x = Dense(40, activation = 'relu')(x)\n",
82
+ "x = Dense(150, activation = 'relu')(x)\n",
83
+ "decoder = Dense(28*28, activation = 'relu')(x)"
84
+ ],
85
+ "metadata": {
86
+ "id": "GPlnoZRcKkLr"
87
+ },
88
+ "execution_count": 11,
89
+ "outputs": []
90
+ },
91
+ {
92
+ "cell_type": "code",
93
+ "source": [
94
+ "encoder_model = keras.Model(inputs, encoder)\n",
95
+ "decoder_model = keras.Model(inputs_dec, decoder)\n",
96
+ "autoenc = keras.Model(inputs, decoder_model(encoder_model(inputs)))"
97
+ ],
98
+ "metadata": {
99
+ "id": "Bwn5HLpmMw2a"
100
+ },
101
+ "execution_count": 12,
102
+ "outputs": []
103
+ },
104
+ {
105
+ "cell_type": "code",
106
+ "source": [
107
+ "autoenc.compile(optimizer='adam', loss='mean_squared_error', metrics = ['accuracy'])"
108
+ ],
109
+ "metadata": {
110
+ "id": "2nijZHIrPBWy"
111
+ },
112
+ "execution_count": 13,
113
+ "outputs": []
114
+ },
115
+ {
116
+ "cell_type": "code",
117
+ "source": [
118
+ "autoenc.fit(train_x, train_x, epochs = 20, batch_size=50)"
119
+ ],
120
+ "metadata": {
121
+ "colab": {
122
+ "base_uri": "https://localhost:8080/"
123
+ },
124
+ "id": "eS6_3HpQP8oD",
125
+ "outputId": "b299a4cb-0f46-4af6-baf4-c26509ce93b7"
126
+ },
127
+ "execution_count": 35,
128
+ "outputs": [
129
+ {
130
+ "output_type": "stream",
131
+ "name": "stdout",
132
+ "text": [
133
+ "Epoch 1/20\n",
134
+ "1200/1200 [==============================] - 8s 6ms/step - loss: 0.0253 - accuracy: 0.0177\n",
135
+ "Epoch 2/20\n",
136
+ "1200/1200 [==============================] - 8s 7ms/step - loss: 0.0249 - accuracy: 0.0181\n",
137
+ "Epoch 3/20\n",
138
+ "1200/1200 [==============================] - 8s 7ms/step - loss: 0.0246 - accuracy: 0.0188\n",
139
+ "Epoch 4/20\n",
140
+ "1200/1200 [==============================] - 8s 6ms/step - loss: 0.0243 - accuracy: 0.0200\n",
141
+ "Epoch 5/20\n",
142
+ "1200/1200 [==============================] - 9s 7ms/step - loss: 0.0241 - accuracy: 0.0203\n",
143
+ "Epoch 6/20\n",
144
+ "1200/1200 [==============================] - 9s 7ms/step - loss: 0.0240 - accuracy: 0.0205\n",
145
+ "Epoch 7/20\n",
146
+ "1200/1200 [==============================] - 8s 7ms/step - loss: 0.0239 - accuracy: 0.0210\n",
147
+ "Epoch 8/20\n",
148
+ "1200/1200 [==============================] - 8s 7ms/step - loss: 0.0238 - accuracy: 0.0213\n",
149
+ "Epoch 9/20\n",
150
+ "1200/1200 [==============================] - 8s 7ms/step - loss: 0.0236 - accuracy: 0.0221\n",
151
+ "Epoch 10/20\n",
152
+ "1200/1200 [==============================] - 8s 7ms/step - loss: 0.0234 - accuracy: 0.0220\n",
153
+ "Epoch 11/20\n",
154
+ "1200/1200 [==============================] - 8s 7ms/step - loss: 0.0233 - accuracy: 0.0223\n",
155
+ "Epoch 12/20\n",
156
+ "1200/1200 [==============================] - 9s 7ms/step - loss: 0.0233 - accuracy: 0.0224\n",
157
+ "Epoch 13/20\n",
158
+ "1200/1200 [==============================] - 9s 7ms/step - loss: 0.0231 - accuracy: 0.0230\n",
159
+ "Epoch 14/20\n",
160
+ "1200/1200 [==============================] - 8s 7ms/step - loss: 0.0230 - accuracy: 0.0223\n",
161
+ "Epoch 15/20\n",
162
+ "1200/1200 [==============================] - 9s 7ms/step - loss: 0.0231 - accuracy: 0.0222\n",
163
+ "Epoch 16/20\n",
164
+ "1200/1200 [==============================] - 8s 7ms/step - loss: 0.0230 - accuracy: 0.0225\n",
165
+ "Epoch 17/20\n",
166
+ "1200/1200 [==============================] - 8s 7ms/step - loss: 0.0229 - accuracy: 0.0234\n",
167
+ "Epoch 18/20\n",
168
+ "1200/1200 [==============================] - 8s 6ms/step - loss: 0.0228 - accuracy: 0.0225\n",
169
+ "Epoch 19/20\n",
170
+ "1200/1200 [==============================] - 8s 7ms/step - loss: 0.0228 - accuracy: 0.0231\n",
171
+ "Epoch 20/20\n",
172
+ "1200/1200 [==============================] - 8s 7ms/step - loss: 0.0228 - accuracy: 0.0233\n"
173
+ ]
174
+ },
175
+ {
176
+ "output_type": "execute_result",
177
+ "data": {
178
+ "text/plain": [
179
+ "<keras.callbacks.History at 0x7f56add3add0>"
180
+ ]
181
+ },
182
+ "metadata": {},
183
+ "execution_count": 35
184
+ }
185
+ ]
186
+ },
187
+ {
188
+ "cell_type": "code",
189
+ "source": [
190
+ "y = autoenc.predict(test_x[:12])\n",
191
+ "plt.imshow(y[5].reshape(28, 28), cmap = 'gray')"
192
+ ],
193
+ "metadata": {
194
+ "colab": {
195
+ "base_uri": "https://localhost:8080/",
196
+ "height": 467
197
+ },
198
+ "id": "cURfG8wfQgZX",
199
+ "outputId": "b16778e5-e72c-498c-aa43-7751c995c8f8"
200
+ },
201
+ "execution_count": 58,
202
+ "outputs": [
203
+ {
204
+ "output_type": "stream",
205
+ "name": "stdout",
206
+ "text": [
207
+ "1/1 [==============================] - 0s 19ms/step\n"
208
+ ]
209
+ },
210
+ {
211
+ "output_type": "execute_result",
212
+ "data": {
213
+ "text/plain": [
214
+ "<matplotlib.image.AxesImage at 0x7f56a8f3d060>"
215
+ ]
216
+ },
217
+ "metadata": {},
218
+ "execution_count": 58
219
+ },
220
+ {
221
+ "output_type": "display_data",
222
+ "data": {
223
+ "text/plain": [
224
+ "<Figure size 640x480 with 1 Axes>"
225
+ ],
226
+ "image/png": "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bfX19Zf0+QAAw4OvX0RdtWqV3nvvPe3cuVPjx48PPZ6dna2enh41NzeH3QU1NTUpOzt7wM8VCAQUCAT8jAEAGMac7oA8z9OqVau0efNm7dixQ/n5+WHPz549W/Hx8dq+fXvoserqah07dkyFhYWRmRgAMCI43QGVlJRo48aN2rp1q1JTU0M/10lLS1NSUpLS0tL00EMPqbS0VBkZGRo9erQeeeQRFRYW8go4AEAYpwJat26dJGnevHlhj69fv17Lli2TJP3hD39QbGyslixZou7ubi1cuFB//OMfIzIsAGDkcCogz/Muuk9iYqIqKipUUVHheyiMXJWVlc4ZPy/NT05Ods5IUlxcnHNmypQpzpl//etfzhk//C5G2tfX55yJjXV/TVNnZ6dzpre31zmD6MRacAAAExQQAMAEBQQAMEEBAQBMUEAAABMUEADABAUEADBBAQEATFBAAAATFBAAwAQFBAAwQQEBAExQQAAAE77eERXw69SpU86Zw4cPO2f8vgFifHy8c+aGG25wzvz1r391zgyl/31H4+8qKSkp8oMM4Lusyo/hgTsgAIAJCggAYIICAgCYoIAAACYoIACACQoIAGCCAgIAmKCAAAAmKCAAgAkKCABgggICAJiggAAAJliMFFHvs88+c87cdtttvo7lZzHSvLw8X8caCikpKb5yHR0dQ3Ks3t5e50xPT49zBtGJOyAAgAkKCABgggICAJiggAAAJiggAIAJCggAYIICAgCYoIAAACYoIACACQoIAGCCAgIAmKCAAAAmWIwUUa++vt458/XXX/s61qhR7v9LJCcnO2cSExOdM11dXc4Zv/wsRuon09ra6pzx898I0Yk7IACACQoIAGCCAgIAmKCAAAAmKCAAgAkKCABgggICAJiggAAAJiggAIAJCggAYIICAgCYoIAAACZY1Q9R7+jRo86Z3bt3+zrW1KlTnTPd3d3OmYKCAudMVVWVc6a9vd05I0lffPGFc8bPAquff/65c+bMmTPOGUQn7oAAACYoIACACacCKi8v10033aTU1FSNGzdOixcvVnV1ddg+8+bNU0xMTNi2cuXKiA4NABj+nAqoqqpKJSUl2r17t95//3319vZqwYIF53yfefny5WpoaAhta9eujejQAIDhz+lFCNu2bQv7eMOGDRo3bpz27dunuXPnhh5PTk5WdnZ2ZCYEAIxI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m2uA6+NckyZNUmZm5oi8PlatWqX33ntPH374Ydjbt2RnZ6unp0fNzc1h+4/U6+F852EgBQUFkhRV10PUF1BCQoJmz56t7du3hx7r7+/X9u3bVVhYaDiZvba2NtXW1ionJ8d6FDP5+fnKzs4Ouz6CwaD27Nlz2V8fx48f1+nTp0fU9eF5nlatWqXNmzdrx44dys/PD3t+9uzZio+PD7seqqurdezYsRF1PVzsPAzkwIEDkhRd14P1qyC+i02bNnmBQMDbsGGD95///MdbsWKFl56e7jU2NlqPNqR++ctfepWVlV5dXZ33z3/+0ysqKvIyMzO9kydPWo82qFpbW739+/d7+/fv9yR5L7zwgrd//37viy++8DzP8373u9956enp3tatW72DBw96d955p5efn+91dnYaTx5ZFzoPra2t3mOPPebt2rXLq6ur8z744APve9/7njdlyhSvq6vLevSIefjhh720tDSvsrLSa2hoCG0dHR2hfVauXOlNmDDB27Fjh7d3716vsLDQKywsNJw68i52HmpqarznnnvO27t3r1dXV+dt3brVmzRpkjd37lzjycMNiwLyPM97+eWXvQkTJngJCQnenDlzvN27d1uPNOTuueceLycnx0tISPCuuuoq75577vFqamqsxxp0H374oSfpnG3p0qWe5519KfZTTz3lZWVleYFAwJs/f75XXV1tO/QguNB56Ojo8BYsWOCNHTvWi4+P9yZOnOgtX758xH2RNtDfX5K3fv360D6dnZ3ez3/+c+/KK6/0kpOTvbvuustraGiwG3oQXOw8HDt2zJs7d66XkZHhBQIB75prrvF+9atfeS0tLbaDfwtvxwAAMBH1PwMCAIxMFBAAwAQFBAAwQQEBAExQQAAAExQQAMAEBQQAMEEBAQBMUEAAABMUEADABAUEADBBAQEATPw/ZymUpTooJE0AAAAASUVORK5CYII=\n"
227
+ },
228
+ "metadata": {}
229
+ }
230
+ ]
231
+ }
232
+ ]
233
+ }