фрфррф
Browse files- Untitled0_(2).ipynb +208 -0
Untitled0_(2).ipynb
ADDED
|
@@ -0,0 +1,208 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 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 |
+
"#Энкодер"
|
| 21 |
+
],
|
| 22 |
+
"metadata": {
|
| 23 |
+
"id": "oHA0mAwVHTxj"
|
| 24 |
+
}
|
| 25 |
+
},
|
| 26 |
+
{
|
| 27 |
+
"cell_type": "code",
|
| 28 |
+
"execution_count": null,
|
| 29 |
+
"metadata": {
|
| 30 |
+
"id": "Q4nxvuyjHHzY"
|
| 31 |
+
},
|
| 32 |
+
"outputs": [],
|
| 33 |
+
"source": [
|
| 34 |
+
"import numpy as np\n",
|
| 35 |
+
"import matplotlib.pyplot as plt\n",
|
| 36 |
+
"from tensorflow.keras.datasets import mnist # библиотека базы выборок Mnist\n",
|
| 37 |
+
"from tensorflow import keras\n",
|
| 38 |
+
"from tensorflow.keras.layers import Dense, Flatten, Reshape, Input, Lambda\n",
|
| 39 |
+
"import keras.backend as K"
|
| 40 |
+
]
|
| 41 |
+
},
|
| 42 |
+
{
|
| 43 |
+
"cell_type": "code",
|
| 44 |
+
"source": [
|
| 45 |
+
"#print(mnist.load_data())\n",
|
| 46 |
+
"(train_x, train_y), (test_x, test_y) = mnist.load_data()\n",
|
| 47 |
+
"\n",
|
| 48 |
+
"train_x = train_x / 255\n",
|
| 49 |
+
"test_x = test_x / 255\n",
|
| 50 |
+
"\n",
|
| 51 |
+
"\n",
|
| 52 |
+
"train_x = np.reshape(train_x, (len(train_x), 28*28))\n",
|
| 53 |
+
"test_x = np.reshape(test_x, (len(test_x), 28*28))\n",
|
| 54 |
+
"\n"
|
| 55 |
+
],
|
| 56 |
+
"metadata": {
|
| 57 |
+
"id": "yXlYmFIRH93a"
|
| 58 |
+
},
|
| 59 |
+
"execution_count": null,
|
| 60 |
+
"outputs": []
|
| 61 |
+
},
|
| 62 |
+
{
|
| 63 |
+
"cell_type": "code",
|
| 64 |
+
"source": [
|
| 65 |
+
"inputs = Input(shape = (28*28, ))\n",
|
| 66 |
+
"x = Dense(150, activation='relu')(inputs)\n",
|
| 67 |
+
"x = Dense(40, activation='relu')(x)\n",
|
| 68 |
+
"x = Dense(10, activation='relu')(x)\n",
|
| 69 |
+
"encoder = Dense(3, activation='linear')(x)\n",
|
| 70 |
+
"\n",
|
| 71 |
+
"inputs_dec = Input(shape = (3, ))\n",
|
| 72 |
+
"x = Dense(10, activation='relu')(inputs_dec)\n",
|
| 73 |
+
"x = Dense(40, activation='relu')(x)\n",
|
| 74 |
+
"x = Dense(150, activation='relu')(x)\n",
|
| 75 |
+
"decoder = Dense(28*28, activation = 'relu')(x)\n"
|
| 76 |
+
],
|
| 77 |
+
"metadata": {
|
| 78 |
+
"id": "hMBakqR4LTqk"
|
| 79 |
+
},
|
| 80 |
+
"execution_count": null,
|
| 81 |
+
"outputs": []
|
| 82 |
+
},
|
| 83 |
+
{
|
| 84 |
+
"cell_type": "code",
|
| 85 |
+
"source": [
|
| 86 |
+
"encoder_model = keras.Model(inputs, encoder)\n",
|
| 87 |
+
"decoder_model = keras.Model(inputs_dec, decoder)\n",
|
| 88 |
+
"autoenc = keras.Model(inputs, decoder_model(encoder_model(inputs)))"
|
| 89 |
+
],
|
| 90 |
+
"metadata": {
|
| 91 |
+
"id": "KrjUSjORNKwM"
|
| 92 |
+
},
|
| 93 |
+
"execution_count": null,
|
| 94 |
+
"outputs": []
|
| 95 |
+
},
|
| 96 |
+
{
|
| 97 |
+
"cell_type": "code",
|
| 98 |
+
"source": [
|
| 99 |
+
"autoenc.compile(optimizer='adam', loss='mean_squared_error', metrics=['accuracy'])"
|
| 100 |
+
],
|
| 101 |
+
"metadata": {
|
| 102 |
+
"id": "HS4B9jtaPCVh"
|
| 103 |
+
},
|
| 104 |
+
"execution_count": null,
|
| 105 |
+
"outputs": []
|
| 106 |
+
},
|
| 107 |
+
{
|
| 108 |
+
"cell_type": "code",
|
| 109 |
+
"source": [
|
| 110 |
+
"autoenc.fit(train_x, train_x, epochs=5, batch_size=100)"
|
| 111 |
+
],
|
| 112 |
+
"metadata": {
|
| 113 |
+
"colab": {
|
| 114 |
+
"base_uri": "https://localhost:8080/"
|
| 115 |
+
},
|
| 116 |
+
"id": "vp9Hnsp0QCGg",
|
| 117 |
+
"outputId": "07d3794b-bc5c-4615-aff7-09a90c37175e"
|
| 118 |
+
},
|
| 119 |
+
"execution_count": null,
|
| 120 |
+
"outputs": [
|
| 121 |
+
{
|
| 122 |
+
"output_type": "stream",
|
| 123 |
+
"name": "stdout",
|
| 124 |
+
"text": [
|
| 125 |
+
"Epoch 1/5\n",
|
| 126 |
+
"600/600 [==============================] - 7s 10ms/step - loss: 0.0332 - accuracy: 0.0110\n",
|
| 127 |
+
"Epoch 2/5\n",
|
| 128 |
+
"600/600 [==============================] - 7s 11ms/step - loss: 0.0330 - accuracy: 0.0095\n",
|
| 129 |
+
"Epoch 3/5\n",
|
| 130 |
+
"600/600 [==============================] - 6s 11ms/step - loss: 0.0328 - accuracy: 0.0102\n",
|
| 131 |
+
"Epoch 4/5\n",
|
| 132 |
+
"600/600 [==============================] - 7s 11ms/step - loss: 0.0327 - accuracy: 0.0105\n",
|
| 133 |
+
"Epoch 5/5\n",
|
| 134 |
+
"600/600 [==============================] - 7s 11ms/step - loss: 0.0326 - accuracy: 0.0106\n"
|
| 135 |
+
]
|
| 136 |
+
},
|
| 137 |
+
{
|
| 138 |
+
"output_type": "execute_result",
|
| 139 |
+
"data": {
|
| 140 |
+
"text/plain": [
|
| 141 |
+
"<keras.callbacks.History at 0x7f6a0c99f130>"
|
| 142 |
+
]
|
| 143 |
+
},
|
| 144 |
+
"metadata": {},
|
| 145 |
+
"execution_count": 64
|
| 146 |
+
}
|
| 147 |
+
]
|
| 148 |
+
},
|
| 149 |
+
{
|
| 150 |
+
"cell_type": "code",
|
| 151 |
+
"source": [
|
| 152 |
+
"n = 5\n",
|
| 153 |
+
"m = 105\n",
|
| 154 |
+
"imgs = test_x[m:n+m]\n",
|
| 155 |
+
"decoded_imgs = autoenc.predict(test_x[:n], batch_size=n)\n",
|
| 156 |
+
"\n",
|
| 157 |
+
"plt.figure(figsize=(2*n, 2*2))\n",
|
| 158 |
+
"for i in range(n):\n",
|
| 159 |
+
" ax = plt.subplot(2, n, i+1)\n",
|
| 160 |
+
" plt.imshow(imgs[i].reshape(28, 28), cmap='gray')\n",
|
| 161 |
+
" ax.get_xaxis().set_visible(False)\n",
|
| 162 |
+
" ax.get_yaxis().set_visible(False)\n",
|
| 163 |
+
"\n",
|
| 164 |
+
" ax2 = plt.subplot(2, n, i+n+1)\n",
|
| 165 |
+
" plt.imshow(decoded_imgs[i].reshape(28, 28), cmap='gray')\n",
|
| 166 |
+
" ax2.get_xaxis().set_visible(False)\n",
|
| 167 |
+
" ax2.get_yaxis().set_visible(False)"
|
| 168 |
+
],
|
| 169 |
+
"metadata": {
|
| 170 |
+
"colab": {
|
| 171 |
+
"base_uri": "https://localhost:8080/",
|
| 172 |
+
"height": 355
|
| 173 |
+
},
|
| 174 |
+
"id": "ddNWbMcrQccC",
|
| 175 |
+
"outputId": "67e55d35-d8f3-42f4-eefc-21688709b4e6"
|
| 176 |
+
},
|
| 177 |
+
"execution_count": null,
|
| 178 |
+
"outputs": [
|
| 179 |
+
{
|
| 180 |
+
"output_type": "stream",
|
| 181 |
+
"name": "stdout",
|
| 182 |
+
"text": [
|
| 183 |
+
"1/1 [==============================] - 0s 24ms/step\n"
|
| 184 |
+
]
|
| 185 |
+
},
|
| 186 |
+
{
|
| 187 |
+
"output_type": "display_data",
|
| 188 |
+
"data": {
|
| 189 |
+
"text/plain": [
|
| 190 |
+
"<Figure size 1000x400 with 10 Axes>"
|
| 191 |
+
],
|
| 192 |
+
"image/png": "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\n"
|
| 193 |
+
},
|
| 194 |
+
"metadata": {}
|
| 195 |
+
}
|
| 196 |
+
]
|
| 197 |
+
},
|
| 198 |
+
{
|
| 199 |
+
"cell_type": "code",
|
| 200 |
+
"source": [],
|
| 201 |
+
"metadata": {
|
| 202 |
+
"id": "_vPponn-Q1Xu"
|
| 203 |
+
},
|
| 204 |
+
"execution_count": null,
|
| 205 |
+
"outputs": []
|
| 206 |
+
}
|
| 207 |
+
]
|
| 208 |
+
}
|