├── LICENSE ├── README.md ├── week2 ├── Autoencoder_Example_Preprocessing.ipynb └── NLP_Example.ipynb ├── week1 ├── TensorflowExample.ipynb └── KerasExample.ipynb └── week4 └── Project Model.ipynb /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 ahmetmeleq 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Applied-AI-Study-Group 2 | 3 | This is the repository for the content of inzva 2019-July Applied AI Study Group, guided by Ahmet Melek. 4 | 5 | In the group we have worked on these subjects: 6 | 7 | * Frameworks: Tensorflow, Keras, SystemML, DL4J, Apache Spark 8 | 9 | * Problems: Image Classification, Image Generation (Image Restoration/Inpainting), Anomaly Detection, Timeseries Future Prediction, NLP Embedding, NLP Sentence Sentiment Classification 10 | 11 | * Architectures - Methods: Multilayer Perceptron (Fully-Connected Neural Networks), Convolutional Neural Networks (CNN), Long-Short Term Memory (LSTM), Autoencoders, Embedding Layers 12 | 13 | * Environments: Google Colab, IBM Watson Studio, Jupyter Notebook (Local) 14 | 15 | ## Weekly Summaries 16 | 17 | ### Week1 18 | 19 | We have worked on three problems: 20 | 21 | * Image Classification with MNIST dataset on tensorflow, using Fully-Connected Neural Networks. 22 | 23 | * Image Classification with MNIST dataset on keras, using Convolutional Neural Networks. 24 | 25 | * Image Generation with aligned UTK dataset on keras, using Deep Convolutional Generative Adverserial Networks (DCGAN Autoencoder). 26 | 27 | For all examples in Week1, we have worked on Google Colab. 28 | 29 | ### Week2 30 | 31 | We have worked on three problems: 32 | 33 | * Anomaly Detection with Bearing Data Center Seeded Fault Test dataset on keras, using LSTM autoencoders. 34 | 35 | * Timeseries future prediction with Federal Reserve Economic Data Crude Oil Prices Chart on keras, using LSTM Networks. 36 | 37 | * NLP Embedding and Classification with a custom mini-dataset on keras, using perceptrons, Fully-Connected Neural Networks and Embedding layers. 38 | 39 | For all examples in Week2, we have worked on Google Colab. 40 | 41 | ### Week3 42 | 43 | We have worked on two problems: 44 | 45 | * Converting Keras models to DL4J models. Converting DL4J models to Apache Spark models via SystemML. After that, making classification with Iris dataset on Apache Spark using Fully-Connected Neural Networks. Worked on IBM watson studio. 46 | 47 | * Converting Keras models directly to Apache Spark models via SystemML. After that, making image generation with aligned UTK dataset on keras, using multilayer perceptrons. Worked on Google Colab. In this example, we have failed due to the complications with setting up Google Colab's environment. 48 | 49 | ### Week4 50 | 51 | We have worked on the solution of the project assignment which we had assigned in Week2. 52 | 53 | Problem was detecting joint coordinates of a hand (knuckle coordinates), using images taken with webcams. We have assumed that the coordinates of the hand itself is already detected, and we have tried to predict the knuckle coordinates. 54 | 55 | * Trained with the "Large-scale Multiview 3D Hand Pose Dataset" by Rovit. 56 | 57 | 58 | * Used Convolutional Neural Networks on keras. 59 | 60 | 61 | 62 | 63 | 64 | 65 | -------------------------------------------------------------------------------- /week2/Autoencoder_Example_Preprocessing.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "nbformat": 4, 3 | "nbformat_minor": 0, 4 | "metadata": { 5 | "colab": { 6 | "name": "Autoencoder Example Preprocessing.ipynb", 7 | "version": "0.3.2", 8 | "provenance": [], 9 | "collapsed_sections": [] 10 | }, 11 | "language_info": { 12 | "codemirror_mode": { 13 | "name": "ipython", 14 | "version": 3 15 | }, 16 | "file_extension": ".py", 17 | "mimetype": "text/x-python", 18 | "name": "python", 19 | "nbconvert_exporter": "python", 20 | "pygments_lexer": "ipython3", 21 | "version": "3.5.5" 22 | }, 23 | "kernelspec": { 24 | "name": "python3", 25 | "display_name": "Python 3" 26 | }, 27 | "accelerator": "GPU" 28 | }, 29 | "cells": [ 30 | { 31 | "cell_type": "code", 32 | "metadata": { 33 | "id": "tyetER06AC2y", 34 | "colab_type": "code", 35 | "colab": {} 36 | }, 37 | "source": [ 38 | "import numpy as np\n", 39 | "import pandas as pd\n", 40 | "import scipy.io as sio\n", 41 | "import os" 42 | ], 43 | "execution_count": 0, 44 | "outputs": [] 45 | }, 46 | { 47 | "cell_type": "code", 48 | "metadata": { 49 | "id": "VHlGT28SAC3B", 50 | "colab_type": "code", 51 | "outputId": "aff3ff30-087f-4b25-8260-7bcc18993dbe", 52 | "colab": { 53 | "base_uri": "https://localhost:8080/", 54 | "height": 830 55 | } 56 | }, 57 | "source": [ 58 | "!wget http://csegroups.case.edu/sites/default/files/bearingdatacenter/files/Datafiles/97.mat\n", 59 | "!wget http://csegroups.case.edu/sites/default/files/bearingdatacenter/files/Datafiles/98.mat\n", 60 | "!wget http://csegroups.case.edu/sites/default/files/bearingdatacenter/files/Datafiles/99.mat\n", 61 | "!wget http://csegroups.case.edu/sites/default/files/bearingdatacenter/files/Datafiles/100.mat" 62 | ], 63 | "execution_count": 0, 64 | "outputs": [ 65 | { 66 | "output_type": "stream", 67 | "text": [ 68 | "--2019-07-13 02:07:13-- http://csegroups.case.edu/sites/default/files/bearingdatacenter/files/Datafiles/97.mat\n", 69 | "Resolving csegroups.case.edu (csegroups.case.edu)... 129.22.25.84\n", 70 | "Connecting to csegroups.case.edu (csegroups.case.edu)|129.22.25.84|:80... connected.\n", 71 | "HTTP request sent, awaiting response... 200 OK\n", 72 | "Length: 3903344 (3.7M)\n", 73 | "Saving to: ‘97.mat’\n", 74 | "\n", 75 | "\r97.mat 0%[ ] 0 --.-KB/s \r97.mat 23%[===> ] 908.86K 4.44MB/s \r97.mat 100%[===================>] 3.72M 11.4MB/s in 0.3s \n", 76 | "\n", 77 | "2019-07-13 02:07:14 (11.4 MB/s) - ‘97.mat’ saved [3903344/3903344]\n", 78 | "\n", 79 | "--2019-07-13 02:07:15-- http://csegroups.case.edu/sites/default/files/bearingdatacenter/files/Datafiles/98.mat\n", 80 | "Resolving csegroups.case.edu (csegroups.case.edu)... 129.22.25.84\n", 81 | "Connecting to csegroups.case.edu (csegroups.case.edu)|129.22.25.84|:80... connected.\n", 82 | "HTTP request sent, awaiting response... 200 OK\n", 83 | "Length: 7742720 (7.4M)\n", 84 | "Saving to: ‘98.mat’\n", 85 | "\n", 86 | "98.mat 100%[===================>] 7.38M 19.2MB/s in 0.4s \n", 87 | "\n", 88 | "2019-07-13 02:07:15 (19.2 MB/s) - ‘98.mat’ saved [7742720/7742720]\n", 89 | "\n", 90 | "--2019-07-13 02:07:16-- http://csegroups.case.edu/sites/default/files/bearingdatacenter/files/Datafiles/99.mat\n", 91 | "Resolving csegroups.case.edu (csegroups.case.edu)... 129.22.25.84\n", 92 | "Connecting to csegroups.case.edu (csegroups.case.edu)|129.22.25.84|:80... connected.\n", 93 | "HTTP request sent, awaiting response... 200 OK\n", 94 | "Length: 15503928 (15M)\n", 95 | "Saving to: ‘99.mat’\n", 96 | "\n", 97 | "99.mat 100%[===================>] 14.79M 13.0MB/s in 1.1s \n", 98 | "\n", 99 | "2019-07-13 02:07:18 (13.0 MB/s) - ‘99.mat’ saved [15503928/15503928]\n", 100 | "\n", 101 | "--2019-07-13 02:07:19-- http://csegroups.case.edu/sites/default/files/bearingdatacenter/files/Datafiles/100.mat\n", 102 | "Resolving csegroups.case.edu (csegroups.case.edu)... 129.22.25.84\n", 103 | "Connecting to csegroups.case.edu (csegroups.case.edu)|129.22.25.84|:80... connected.\n", 104 | "HTTP request sent, awaiting response... 200 OK\n", 105 | "Length: 7770624 (7.4M)\n", 106 | "Saving to: ‘100.mat’\n", 107 | "\n", 108 | "100.mat 100%[===================>] 7.41M 10.6MB/s in 0.7s \n", 109 | "\n", 110 | "2019-07-13 02:07:19 (10.6 MB/s) - ‘100.mat’ saved [7770624/7770624]\n", 111 | "\n" 112 | ], 113 | "name": "stdout" 114 | } 115 | ] 116 | }, 117 | { 118 | "cell_type": "code", 119 | "metadata": { 120 | "id": "WZceMZCYAC3H", 121 | "colab_type": "code", 122 | "colab": {} 123 | }, 124 | "source": [ 125 | "!mkdir cwr_healthy" 126 | ], 127 | "execution_count": 0, 128 | "outputs": [] 129 | }, 130 | { 131 | "cell_type": "code", 132 | "metadata": { 133 | "id": "RWBjip6uAC3M", 134 | "colab_type": "code", 135 | "colab": {} 136 | }, 137 | "source": [ 138 | "!mv *.mat cwr_healthy/" 139 | ], 140 | "execution_count": 0, 141 | "outputs": [] 142 | }, 143 | { 144 | "cell_type": "code", 145 | "metadata": { 146 | "id": "KVqGb2DIAC3T", 147 | "colab_type": "code", 148 | "colab": {} 149 | }, 150 | "source": [ 151 | "def read_folder(folder):\n", 152 | " data = 'dummy'\n", 153 | " skip = False\n", 154 | " for file in os.listdir(folder):\n", 155 | " file_id = file[:-4]\n", 156 | " mat_file_dict = sio.loadmat(folder+file)\n", 157 | " del data\n", 158 | " for key, value in mat_file_dict.items():\n", 159 | " if 'DE_time' in key or 'FE_time' in key:\n", 160 | " a = np.array(mat_file_dict[key])\n", 161 | " try:\n", 162 | " data\n", 163 | " except NameError:\n", 164 | " data = a\n", 165 | " else:\n", 166 | " if (data.shape[0] != a.shape[0]):\n", 167 | " print('skipping ' + file_id)\n", 168 | " skip = True\n", 169 | " continue\n", 170 | " data = np.hstack((data,a))\n", 171 | " if skip:\n", 172 | " skip=False\n", 173 | " continue\n", 174 | " id = np.repeat(file_id,data.shape[0])\n", 175 | " id.shape = (id.shape[0],1)\n", 176 | " data = np.hstack((id,data))\n", 177 | " if data.shape[1] == 2:\n", 178 | " zeros = np.repeat(float(0),data.shape[0])\n", 179 | " zeros.shape =(data.shape[0],1)\n", 180 | " data = np.hstack((data,zeros))\n", 181 | " try:\n", 182 | " result\n", 183 | " except NameError:\n", 184 | " result = data\n", 185 | " else:\n", 186 | " result = np.vstack((result,data))\n", 187 | " return result" 188 | ], 189 | "execution_count": 0, 190 | "outputs": [] 191 | }, 192 | { 193 | "cell_type": "code", 194 | "metadata": { 195 | "id": "Rl17npvNAC3X", 196 | "colab_type": "code", 197 | "outputId": "d5b8fefd-c2ba-47b8-e398-85ca40a61971", 198 | "colab": { 199 | "base_uri": "https://localhost:8080/", 200 | "height": 54 201 | } 202 | }, 203 | "source": [ 204 | "result_healthy = read_folder('./cwr_healthy/')" 205 | ], 206 | "execution_count": 0, 207 | "outputs": [ 208 | { 209 | "output_type": "stream", 210 | "text": [ 211 | "skipping 99\n", 212 | "skipping 99\n" 213 | ], 214 | "name": "stdout" 215 | } 216 | ] 217 | }, 218 | { 219 | "cell_type": "code", 220 | "metadata": { 221 | "id": "lHtUtMlIAC3b", 222 | "colab_type": "code", 223 | "colab": {} 224 | }, 225 | "source": [ 226 | "pdf = pd.DataFrame(result_healthy)" 227 | ], 228 | "execution_count": 0, 229 | "outputs": [] 230 | }, 231 | { 232 | "cell_type": "code", 233 | "metadata": { 234 | "id": "K1pXV_1EAC3h", 235 | "colab_type": "code", 236 | "colab": {} 237 | }, 238 | "source": [ 239 | "pdf.to_csv('result_healthy_pandas.csv', header=False, index=True)" 240 | ], 241 | "execution_count": 0, 242 | "outputs": [] 243 | }, 244 | { 245 | "cell_type": "code", 246 | "metadata": { 247 | "id": "fhBFRz_cAC3m", 248 | "colab_type": "code", 249 | "colab": {} 250 | }, 251 | "source": [ 252 | "#!for url in `curl -s csegroups.case.edu/bearingdatacenter/pages/12k-drive-end-bearing-fault-data |grep mat |grep http |awk -F'href=\"' '{print $2}' |awk -F'\">' '{print $1}'`; do wget $url; done\n", 253 | "#!for url in `curl -s csegroups.case.edu/bearingdatacenter/pages/48k-drive-end-bearing-fault-data |grep mat |grep http |awk -F'href=\"' '{print $2}' |awk -F'\">' '{print $1}'`; do wget $url; done\n", 254 | "#!for url in `curl -s csegroups.case.edu/bearingdatacenter/pages/12k-fan-end-bearing-fault-data |grep mat |grep http |awk -F'href=\"' '{print $2}' |awk -F'\">' '{print $1}'`; do wget $url; done\n", 255 | "#!mkdir cwr_faulty\n", 256 | "#!mv *.mat cwr_faulty/" 257 | ], 258 | "execution_count": 0, 259 | "outputs": [] 260 | }, 261 | { 262 | "cell_type": "code", 263 | "metadata": { 264 | "id": "ECRD4upzAC3q", 265 | "colab_type": "code", 266 | "outputId": "8969afcd-ee03-46be-debd-62925e5a1450", 267 | "colab": { 268 | "base_uri": "https://localhost:8080/", 269 | "height": 830 270 | } 271 | }, 272 | "source": [ 273 | "!wget http://csegroups.case.edu/sites/default/files/bearingdatacenter/files/Datafiles/105.mat\n", 274 | "!wget http://csegroups.case.edu/sites/default/files/bearingdatacenter/files/Datafiles/106.mat\n", 275 | "!wget http://csegroups.case.edu/sites/default/files/bearingdatacenter/files/Datafiles/107.mat\n", 276 | "!wget http://csegroups.case.edu/sites/default/files/bearingdatacenter/files/Datafiles/108.mat" 277 | ], 278 | "execution_count": 0, 279 | "outputs": [ 280 | { 281 | "output_type": "stream", 282 | "text": [ 283 | "--2019-07-13 02:07:31-- http://csegroups.case.edu/sites/default/files/bearingdatacenter/files/Datafiles/105.mat\n", 284 | "Resolving csegroups.case.edu (csegroups.case.edu)... 129.22.25.84\n", 285 | "Connecting to csegroups.case.edu (csegroups.case.edu)|129.22.25.84|:80... connected.\n", 286 | "HTTP request sent, awaiting response... 200 OK\n", 287 | "Length: 2910768 (2.8M)\n", 288 | "Saving to: ‘105.mat’\n", 289 | "\n", 290 | "105.mat 100%[===================>] 2.78M 2.68MB/s in 1.0s \n", 291 | "\n", 292 | "2019-07-13 02:07:32 (2.68 MB/s) - ‘105.mat’ saved [2910768/2910768]\n", 293 | "\n", 294 | "--2019-07-13 02:07:33-- http://csegroups.case.edu/sites/default/files/bearingdatacenter/files/Datafiles/106.mat\n", 295 | "Resolving csegroups.case.edu (csegroups.case.edu)... 129.22.25.84\n", 296 | "Connecting to csegroups.case.edu (csegroups.case.edu)|129.22.25.84|:80... connected.\n", 297 | "HTTP request sent, awaiting response... 200 OK\n", 298 | "Length: 2928192 (2.8M)\n", 299 | "Saving to: ‘106.mat’\n", 300 | "\n", 301 | "106.mat 100%[===================>] 2.79M 4.10MB/s in 0.7s \n", 302 | "\n", 303 | "2019-07-13 02:07:34 (4.10 MB/s) - ‘106.mat’ saved [2928192/2928192]\n", 304 | "\n", 305 | "--2019-07-13 02:07:35-- http://csegroups.case.edu/sites/default/files/bearingdatacenter/files/Datafiles/107.mat\n", 306 | "Resolving csegroups.case.edu (csegroups.case.edu)... 129.22.25.84\n", 307 | "Connecting to csegroups.case.edu (csegroups.case.edu)|129.22.25.84|:80... connected.\n", 308 | "HTTP request sent, awaiting response... 200 OK\n", 309 | "Length: 2931672 (2.8M)\n", 310 | "Saving to: ‘107.mat’\n", 311 | "\n", 312 | "107.mat 100%[===================>] 2.79M 3.81MB/s in 0.7s \n", 313 | "\n", 314 | "2019-07-13 02:07:36 (3.81 MB/s) - ‘107.mat’ saved [2931672/2931672]\n", 315 | "\n", 316 | "--2019-07-13 02:07:37-- http://csegroups.case.edu/sites/default/files/bearingdatacenter/files/Datafiles/108.mat\n", 317 | "Resolving csegroups.case.edu (csegroups.case.edu)... 129.22.25.84\n", 318 | "Connecting to csegroups.case.edu (csegroups.case.edu)|129.22.25.84|:80... connected.\n", 319 | "HTTP request sent, awaiting response... 200 OK\n", 320 | "Length: 2950416 (2.8M)\n", 321 | "Saving to: ‘108.mat’\n", 322 | "\n", 323 | "108.mat 100%[===================>] 2.81M 4.77MB/s in 0.6s \n", 324 | "\n", 325 | "2019-07-13 02:07:37 (4.77 MB/s) - ‘108.mat’ saved [2950416/2950416]\n", 326 | "\n" 327 | ], 328 | "name": "stdout" 329 | } 330 | ] 331 | }, 332 | { 333 | "cell_type": "code", 334 | "metadata": { 335 | "id": "J8EgRtlKAC33", 336 | "colab_type": "code", 337 | "colab": {} 338 | }, 339 | "source": [ 340 | "!mkdir cwr_faulty\n", 341 | "!mv *.mat cwr_faulty/" 342 | ], 343 | "execution_count": 0, 344 | "outputs": [] 345 | }, 346 | { 347 | "cell_type": "code", 348 | "metadata": { 349 | "id": "70ZNHDbCAC39", 350 | "colab_type": "code", 351 | "outputId": "618a9a8d-509f-4e52-f28c-f4802b72a898", 352 | "colab": { 353 | "base_uri": "https://localhost:8080/", 354 | "height": 35 355 | } 356 | }, 357 | "source": [ 358 | "!ls cwr_faulty/" 359 | ], 360 | "execution_count": 0, 361 | "outputs": [ 362 | { 363 | "output_type": "stream", 364 | "text": [ 365 | "105.mat 106.mat 107.mat 108.mat\n" 366 | ], 367 | "name": "stdout" 368 | } 369 | ] 370 | }, 371 | { 372 | "cell_type": "code", 373 | "metadata": { 374 | "id": "vVm04ImqAC4E", 375 | "colab_type": "code", 376 | "colab": {} 377 | }, 378 | "source": [ 379 | "result_faulty = read_folder('./cwr_faulty/')" 380 | ], 381 | "execution_count": 0, 382 | "outputs": [] 383 | }, 384 | { 385 | "cell_type": "code", 386 | "metadata": { 387 | "id": "HJcGfRK-AC4I", 388 | "colab_type": "code", 389 | "colab": {} 390 | }, 391 | "source": [ 392 | "pdf = pd.DataFrame(result_faulty)" 393 | ], 394 | "execution_count": 0, 395 | "outputs": [] 396 | }, 397 | { 398 | "cell_type": "code", 399 | "metadata": { 400 | "id": "uAMtly6RAC4M", 401 | "colab_type": "code", 402 | "colab": {} 403 | }, 404 | "source": [ 405 | "pdf.to_csv('result_faulty_pandas.csv', header=False, index=True)" 406 | ], 407 | "execution_count": 0, 408 | "outputs": [] 409 | }, 410 | { 411 | "cell_type": "code", 412 | "metadata": { 413 | "id": "TmHU9jOEASS3", 414 | "colab_type": "code", 415 | "outputId": "cdfb89c0-5395-47a6-af06-921653cd72c9", 416 | "colab": { 417 | "base_uri": "https://localhost:8080/", 418 | "height": 35 419 | } 420 | }, 421 | "source": [ 422 | "!pwd" 423 | ], 424 | "execution_count": 0, 425 | "outputs": [ 426 | { 427 | "output_type": "stream", 428 | "text": [ 429 | "/content\n" 430 | ], 431 | "name": "stdout" 432 | } 433 | ] 434 | }, 435 | { 436 | "cell_type": "code", 437 | "metadata": { 438 | "id": "BuBB1l4rFmJL", 439 | "colab_type": "code", 440 | "colab": {} 441 | }, 442 | "source": [ 443 | "" 444 | ], 445 | "execution_count": 0, 446 | "outputs": [] 447 | } 448 | ] 449 | } -------------------------------------------------------------------------------- /week1/TensorflowExample.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "nbformat": 4, 3 | "nbformat_minor": 0, 4 | "metadata": { 5 | "colab": { 6 | "name": "TensorflowExample.ipynb", 7 | "version": "0.3.2", 8 | "provenance": [] 9 | }, 10 | "kernelspec": { 11 | "name": "python3", 12 | "display_name": "Python 3" 13 | } 14 | }, 15 | "cells": [ 16 | { 17 | "cell_type": "code", 18 | "metadata": { 19 | "id": "ty1ZYplUQD6q", 20 | "colab_type": "code", 21 | "colab": {} 22 | }, 23 | "source": [ 24 | "import tensorflow as tf" 25 | ], 26 | "execution_count": 0, 27 | "outputs": [] 28 | }, 29 | { 30 | "cell_type": "code", 31 | "metadata": { 32 | "id": "jpFpRslVZc6r", 33 | "colab_type": "code", 34 | "colab": { 35 | "base_uri": "https://localhost:8080/", 36 | "height": 445 37 | }, 38 | "outputId": "a87a687d-5e42-4cb2-d174-af607c0a3b35" 39 | }, 40 | "source": [ 41 | "from tensorflow.examples.tutorials.mnist import input_data\n", 42 | "mnist = input_data.read_data_sets(\"MNIST_data/\", one_hot = True)" 43 | ], 44 | "execution_count": 2, 45 | "outputs": [ 46 | { 47 | "output_type": "stream", 48 | "text": [ 49 | "WARNING: Logging before flag parsing goes to stderr.\n", 50 | "W0706 09:42:43.479120 140150589425536 deprecation.py:323] From :2: read_data_sets (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n", 51 | "Instructions for updating:\n", 52 | "Please use alternatives such as official/mnist/dataset.py from tensorflow/models.\n", 53 | "W0706 09:42:43.481033 140150589425536 deprecation.py:323] From /usr/local/lib/python3.6/dist-packages/tensorflow/contrib/learn/python/learn/datasets/mnist.py:260: maybe_download (from tensorflow.contrib.learn.python.learn.datasets.base) is deprecated and will be removed in a future version.\n", 54 | "Instructions for updating:\n", 55 | "Please write your own downloading logic.\n", 56 | "W0706 09:42:43.482201 140150589425536 deprecation.py:323] From /usr/local/lib/python3.6/dist-packages/tensorflow/contrib/learn/python/learn/datasets/mnist.py:262: extract_images (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n", 57 | "Instructions for updating:\n", 58 | "Please use tf.data to implement this functionality.\n" 59 | ], 60 | "name": "stderr" 61 | }, 62 | { 63 | "output_type": "stream", 64 | "text": [ 65 | "Extracting MNIST_data/train-images-idx3-ubyte.gz\n" 66 | ], 67 | "name": "stdout" 68 | }, 69 | { 70 | "output_type": "stream", 71 | "text": [ 72 | "W0706 09:42:43.780765 140150589425536 deprecation.py:323] From /usr/local/lib/python3.6/dist-packages/tensorflow/contrib/learn/python/learn/datasets/mnist.py:267: extract_labels (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n", 73 | "Instructions for updating:\n", 74 | "Please use tf.data to implement this functionality.\n", 75 | "W0706 09:42:43.783689 140150589425536 deprecation.py:323] From /usr/local/lib/python3.6/dist-packages/tensorflow/contrib/learn/python/learn/datasets/mnist.py:110: dense_to_one_hot (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n", 76 | "Instructions for updating:\n", 77 | "Please use tf.one_hot on tensors.\n", 78 | "W0706 09:42:43.844627 140150589425536 deprecation.py:323] From /usr/local/lib/python3.6/dist-packages/tensorflow/contrib/learn/python/learn/datasets/mnist.py:290: DataSet.__init__ (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n", 79 | "Instructions for updating:\n", 80 | "Please use alternatives such as official/mnist/dataset.py from tensorflow/models.\n" 81 | ], 82 | "name": "stderr" 83 | }, 84 | { 85 | "output_type": "stream", 86 | "text": [ 87 | "Extracting MNIST_data/train-labels-idx1-ubyte.gz\n", 88 | "Extracting MNIST_data/t10k-images-idx3-ubyte.gz\n", 89 | "Extracting MNIST_data/t10k-labels-idx1-ubyte.gz\n" 90 | ], 91 | "name": "stdout" 92 | } 93 | ] 94 | }, 95 | { 96 | "cell_type": "code", 97 | "metadata": { 98 | "id": "ksBf8QRQZvkr", 99 | "colab_type": "code", 100 | "colab": {} 101 | }, 102 | "source": [ 103 | "import matplotlib.pyplot as plt\n", 104 | "import numpy as np" 105 | ], 106 | "execution_count": 0, 107 | "outputs": [] 108 | }, 109 | { 110 | "cell_type": "code", 111 | "metadata": { 112 | "id": "M9Bxcn3XZ3QD", 113 | "colab_type": "code", 114 | "colab": { 115 | "base_uri": "https://localhost:8080/", 116 | "height": 286 117 | }, 118 | "outputId": "f959593c-0b51-4491-c486-583ec59bc0bd" 119 | }, 120 | "source": [ 121 | "inp_batch, target_batch = mnist.train.next_batch(10)\n", 122 | "x, y = inp_batch[0] , target_batch[0]\n", 123 | "x = np.reshape(x,(28,28))\n", 124 | "plt.imshow(x, cmap = \"gray\")\n", 125 | "print(y)" 126 | ], 127 | "execution_count": 4, 128 | "outputs": [ 129 | { 130 | "output_type": "stream", 131 | "text": [ 132 | "[0. 0. 0. 0. 0. 0. 0. 1. 0. 0.]\n" 133 | ], 134 | "name": "stdout" 135 | }, 136 | { 137 | "output_type": "display_data", 138 | "data": { 139 | "image/png": "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\nJDXoIbr/JukvM54vLqYNo2HtbVj7kuitX3X29h+9zjjQm3w+tnF717B+t9+w9jasfUn01q+2euO0\nH0iK8ANJtR3+iZa3X2ZYexvWviR661crvbX6mh9Ae9o+8gNoSSvht73K9j7bB23f30YPndg+YnuP\n7d1tDzFWDIN2wvbeGdMW2X7K9oHi96zDpLXU2wbbx4p9t9v2zS31tsz2722/Yvtl298rpre670r6\namW/Dfy03/YFkvZLuknSpKTnJa2NiFcG2kgHto9IGouI1q8J275B0ruSHomIq4ppGyWdjIgHi3+c\nCyPiB0PS2wZJ77Y9cnMxoMySmSNLS7pF0rfV4r4r6es2tbDf2jjyXyvpYEQcjoh/SPqlpNUt9DH0\nIuJpSSfPmbxa0pbi8RZN//EMXIfehkJETEXEi8XjdySdHVm61X1X0lcr2gj/UklHZzyf1HAN+R2S\nfmf7BdvjbTczi5Fi2HRJelPSSJvNzKLryM2DdM7I0kOz7/oZ8bpuvOH3cddHxBclfV3Sd4vT26EU\n06/ZhulyTU8jNw/KLCNLf6jNfdfviNd1ayP8xyQtm/H8s8W0oRARx4rfJyRt0/CNPnz87CCpxe8T\nLffzoWEauXm2kaU1BPtumEa8biP8z0u63PbnbM+T9E1J21vo42NsX1y8ESPbF0v6moZv9OHtktYV\nj9dJerzFXj5iWEZu7jSytFred0M34nVEDPxH0s2afsf/kKT/bqOHDn39p6Q/Fz8vt92bpEc1fRr4\nT02/N3KXpE9L2inpgKQdkhYNUW+/kLRH0kuaDtqSlnq7XtOn9C9J2l383Nz2vivpq5X9xh1+QFK8\n4QckRfiBpAg/kBThB5Ii/EBShB9IivADSRF+IKn/B4ibCuP0TMa1AAAAAElFTkSuQmCC\n", 140 | "text/plain": [ 141 | "
" 142 | ] 143 | }, 144 | "metadata": { 145 | "tags": [] 146 | } 147 | } 148 | ] 149 | }, 150 | { 151 | "cell_type": "code", 152 | "metadata": { 153 | "id": "WHMw-oYoaWCP", 154 | "colab_type": "code", 155 | "colab": { 156 | "base_uri": "https://localhost:8080/", 157 | "height": 90 158 | }, 159 | "outputId": "0e2d5e99-885c-432f-e529-f7db7ae8e00d" 160 | }, 161 | "source": [ 162 | "inp_tensor = tf.placeholder(tf.float32, (None, 784))\n", 163 | "W1 = tf.Variable(tf.zeros((784,10)))\n", 164 | "b1 = tf.Variable(tf.zeros((10))) \n", 165 | "pred = tf.nn.softmax(tf.matmul(inp_tensor,W1)+b1)\n", 166 | "\n", 167 | "label_tensor = tf.placeholder(tf.float32,(None,10))\n", 168 | "\n", 169 | "#dont forget the minus!\n", 170 | "loss = tf.reduce_mean(tf.reduce_sum(-tf.log(tf.clip_by_value(pred,1e-10,1)) * label_tensor, reduction_indices = [1]))\n", 171 | "\n", 172 | "opt = tf.train.GradientDescentOptimizer(0.5).minimize(loss)\n", 173 | "\n", 174 | "sess = tf.Session()\n", 175 | "\n", 176 | "tf.global_variables_initializer().run(session = sess)\n", 177 | "\n", 178 | "\n", 179 | "\n" 180 | ], 181 | "execution_count": 5, 182 | "outputs": [ 183 | { 184 | "output_type": "stream", 185 | "text": [ 186 | "W0706 09:42:44.569021 140150589425536 deprecation.py:323] From /usr/local/lib/python3.6/dist-packages/tensorflow/python/ops/math_grad.py:1250: add_dispatch_support..wrapper (from tensorflow.python.ops.array_ops) is deprecated and will be removed in a future version.\n", 187 | "Instructions for updating:\n", 188 | "Use tf.where in 2.0, which has the same broadcast rule as np.where\n" 189 | ], 190 | "name": "stderr" 191 | } 192 | ] 193 | }, 194 | { 195 | "cell_type": "code", 196 | "metadata": { 197 | "id": "IwcwBymSdGaL", 198 | "colab_type": "code", 199 | "colab": { 200 | "base_uri": "https://localhost:8080/", 201 | "height": 105 202 | }, 203 | "outputId": "1074b8ec-c22c-4fd0-b960-f58a712a95c8" 204 | }, 205 | "source": [ 206 | "for i in range(100):\n", 207 | " inp_batch , label_batch = mnist.train.next_batch(128)\n", 208 | " sess.run(opt, feed_dict = {inp_tensor: inp_batch, label_tensor: label_batch})\n", 209 | " \n", 210 | " test_inp_batch, test_label_batch = mnist.test.images , mnist.test.labels\n", 211 | " \n", 212 | " train_loss = sess.run(loss, feed_dict = {inp_tensor: inp_batch, label_tensor : label_batch})\n", 213 | " test_loss = sess.run(loss, feed_dict = {inp_tensor: test_inp_batch, label_tensor : test_label_batch})\n", 214 | " \n", 215 | " \n", 216 | " correct_pred = tf.equal(tf.argmax(pred,1), tf.argmax(label_tensor,1))\n", 217 | " acc = tf.reduce_mean(tf.cast(correct_pred, tf.float32))\n", 218 | " \n", 219 | " \n", 220 | " \n", 221 | " test_accuracy = sess.run(acc, feed_dict = {inp_tensor: mnist.test.images, label_tensor: mnist.test.labels})\n", 222 | " \n", 223 | " if(i%20 == 0):\n", 224 | " print(\"Iteration: {0} Train Loss: {1} Test Loss: {2} Accuracy: {3}\".format(i,train_loss,test_loss,test_accuracy))\n", 225 | " \n" 226 | ], 227 | "execution_count": 6, 228 | "outputs": [ 229 | { 230 | "output_type": "stream", 231 | "text": [ 232 | "Iteration: 0 Train Loss: 1.6819040775299072 Test Loss: 1.9604308605194092 Accuracy: 0.29910001158714294\n", 233 | "Iteration: 20 Train Loss: 0.5398341417312622 Test Loss: 0.6169247627258301 Accuracy: 0.8303999900817871\n", 234 | "Iteration: 40 Train Loss: 0.44561585783958435 Test Loss: 0.4777100682258606 Accuracy: 0.8741999864578247\n", 235 | "Iteration: 60 Train Loss: 0.4636496603488922 Test Loss: 0.4178853929042816 Accuracy: 0.8877999782562256\n", 236 | "Iteration: 80 Train Loss: 0.3715023994445801 Test Loss: 0.4207342267036438 Accuracy: 0.8812000155448914\n" 237 | ], 238 | "name": "stdout" 239 | } 240 | ] 241 | }, 242 | { 243 | "cell_type": "markdown", 244 | "metadata": { 245 | "id": "Y_UlO_eSuSal", 246 | "colab_type": "text" 247 | }, 248 | "source": [ 249 | "" 250 | ] 251 | }, 252 | { 253 | "cell_type": "markdown", 254 | "metadata": { 255 | "id": "lFTn-UDquSVe", 256 | "colab_type": "text" 257 | }, 258 | "source": [ 259 | "" 260 | ] 261 | }, 262 | { 263 | "cell_type": "code", 264 | "metadata": { 265 | "id": "Mdne1vIOdGXM", 266 | "colab_type": "code", 267 | "colab": { 268 | "base_uri": "https://localhost:8080/", 269 | "height": 416 270 | }, 271 | "outputId": "919c3964-7657-4cfd-c409-97831f725530" 272 | }, 273 | "source": [ 274 | "#Conf Matrix\n", 275 | "\n", 276 | "\n", 277 | "preds = sess.run(pred, feed_dict = {inp_tensor: mnist.test.images, label_tensor: mnist.test.labels})\n", 278 | "\n", 279 | "print(np.shape(preds))\n", 280 | "print(np.shape(mnist.test.labels))\n", 281 | "\n", 282 | "print(np.shape([np.where(r==1) for r in preds]))\n", 283 | "numeric_pred = [np.where(r==1)[0][0] for r in preds]\n", 284 | "numeric_lab = [np.where(r==1) for r in mnist.test.labels]\n", 285 | "\n", 286 | "\n", 287 | "print(np.shape(numeric_pred))\n", 288 | "print(np.shape(numeric_lab))\n", 289 | "\n", 290 | "numeric_pred = np.reshape(numeric_pred,(10000))\n", 291 | "numeric_lab = np.reshape(numeric_lab,(10000))\n", 292 | "\n", 293 | "\n", 294 | "tf.math.confusion_matrix(numeric_lab, numeric_pred,dtype = tf.dtypes.float32, num_classes = 10)" 295 | ], 296 | "execution_count": 18, 297 | "outputs": [ 298 | { 299 | "output_type": "stream", 300 | "text": [ 301 | "(10000, 10)\n", 302 | "(10000, 10)\n", 303 | "(10000, 1, 0)\n" 304 | ], 305 | "name": "stdout" 306 | }, 307 | { 308 | "output_type": "error", 309 | "ename": "IndexError", 310 | "evalue": "ignored", 311 | "traceback": [ 312 | "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", 313 | "\u001b[0;31mIndexError\u001b[0m Traceback (most recent call last)", 314 | "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 6\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 7\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mshape\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mwhere\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mr\u001b[0m\u001b[0;34m==\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mr\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mpreds\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 8\u001b[0;31m \u001b[0mnumeric_pred\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mwhere\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mr\u001b[0m\u001b[0;34m==\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mr\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mpreds\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 9\u001b[0m \u001b[0mnumeric_lab\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mwhere\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mr\u001b[0m\u001b[0;34m==\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mr\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mmnist\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtest\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mlabels\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 10\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", 315 | "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m(.0)\u001b[0m\n\u001b[1;32m 6\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 7\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mshape\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mwhere\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mr\u001b[0m\u001b[0;34m==\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mr\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mpreds\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 8\u001b[0;31m \u001b[0mnumeric_pred\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mwhere\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mr\u001b[0m\u001b[0;34m==\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mr\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mpreds\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 9\u001b[0m \u001b[0mnumeric_lab\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mwhere\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mr\u001b[0m\u001b[0;34m==\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mr\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mmnist\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtest\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mlabels\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 10\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", 316 | "\u001b[0;31mIndexError\u001b[0m: index 0 is out of bounds for axis 0 with size 0" 317 | ] 318 | } 319 | ] 320 | }, 321 | { 322 | "cell_type": "code", 323 | "metadata": { 324 | "id": "lDFONSAmqDTJ", 325 | "colab_type": "code", 326 | "colab": {} 327 | }, 328 | "source": [ 329 | "" 330 | ], 331 | "execution_count": 0, 332 | "outputs": [] 333 | } 334 | ] 335 | } -------------------------------------------------------------------------------- /week1/KerasExample.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "nbformat": 4, 3 | "nbformat_minor": 0, 4 | "metadata": { 5 | "colab": { 6 | "name": "KerasExample.ipynb", 7 | "version": "0.3.2", 8 | "provenance": [] 9 | }, 10 | "kernelspec": { 11 | "name": "python3", 12 | "display_name": "Python 3" 13 | }, 14 | "accelerator": "GPU" 15 | }, 16 | "cells": [ 17 | { 18 | "cell_type": "code", 19 | "metadata": { 20 | "id": "Bm8tMXW901_F", 21 | "colab_type": "code", 22 | "colab": { 23 | "base_uri": "https://localhost:8080/", 24 | "height": 34 25 | }, 26 | "outputId": "99663bef-5bd0-485d-fb45-37e27fd4fe19" 27 | }, 28 | "source": [ 29 | "import keras\n", 30 | "\n", 31 | "from keras.datasets import mnist\n", 32 | "\n", 33 | "from keras.models import Sequential\n", 34 | "\n", 35 | "from keras.layers import Dense, Dropout, Flatten, Conv2D, MaxPooling2D" 36 | ], 37 | "execution_count": 1, 38 | "outputs": [ 39 | { 40 | "output_type": "stream", 41 | "text": [ 42 | "Using TensorFlow backend.\n" 43 | ], 44 | "name": "stderr" 45 | } 46 | ] 47 | }, 48 | { 49 | "cell_type": "code", 50 | "metadata": { 51 | "id": "jP3LwAxE6IA0", 52 | "colab_type": "code", 53 | "colab": { 54 | "base_uri": "https://localhost:8080/", 55 | "height": 52 56 | }, 57 | "outputId": "86f13cb4-2448-44fc-fc60-6d97619a50d6" 58 | }, 59 | "source": [ 60 | "num_of_classes = 10\n", 61 | "\n", 62 | "(x_train, y_train) , (x_test,y_test) = mnist.load_data()\n", 63 | "\n", 64 | "y_train = keras.utils.to_categorical(y_train, num_of_classes)\n", 65 | "y_test = keras.utils.to_categorical(y_test, num_of_classes)\n", 66 | "\n" 67 | ], 68 | "execution_count": 2, 69 | "outputs": [ 70 | { 71 | "output_type": "stream", 72 | "text": [ 73 | "Downloading data from https://s3.amazonaws.com/img-datasets/mnist.npz\n", 74 | "11493376/11490434 [==============================] - 2s 0us/step\n" 75 | ], 76 | "name": "stdout" 77 | } 78 | ] 79 | }, 80 | { 81 | "cell_type": "code", 82 | "metadata": { 83 | "id": "hwaIwMRQ6c5k", 84 | "colab_type": "code", 85 | "colab": { 86 | "base_uri": "https://localhost:8080/", 87 | "height": 286 88 | }, 89 | "outputId": "7f6a39a7-aa74-4e69-99b6-ea54d31f71c4" 90 | }, 91 | "source": [ 92 | "import matplotlib.pyplot as plt\n", 93 | "import random\n", 94 | "\n", 95 | "i = random.randint(0,40000)\n", 96 | "\n", 97 | "plt.imshow(x_train[i], cmap = \"gray\")\n", 98 | "print(y_train[i])" 99 | ], 100 | "execution_count": 3, 101 | "outputs": [ 102 | { 103 | "output_type": "stream", 104 | "text": [ 105 | "[0. 0. 0. 0. 0. 0. 1. 0. 0. 0.]\n" 106 | ], 107 | "name": "stdout" 108 | }, 109 | { 110 | "output_type": "display_data", 111 | "data": { 112 | "image/png": "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\n", 113 | "text/plain": [ 114 | "
" 115 | ] 116 | }, 117 | "metadata": { 118 | "tags": [] 119 | } 120 | } 121 | ] 122 | }, 123 | { 124 | "cell_type": "code", 125 | "metadata": { 126 | "id": "q9FuBNo97AXq", 127 | "colab_type": "code", 128 | "colab": { 129 | "base_uri": "https://localhost:8080/", 130 | "height": 52 131 | }, 132 | "outputId": "14fc4173-cfe2-4269-ac4f-884ac9f094a6" 133 | }, 134 | "source": [ 135 | "x_train = x_train.reshape(60000, 28,28,1).astype(\"float32\")\n", 136 | "x_test = x_test.reshape(10000,28,28,1).astype(\"float32\")\n", 137 | "\n", 138 | "x_train /= 255\n", 139 | "x_test /= 255\n", 140 | "\n", 141 | "print(x_train.shape[0])\n", 142 | "print(x_test.shape[0])\n", 143 | "\n", 144 | "\n", 145 | "\n" 146 | ], 147 | "execution_count": 4, 148 | "outputs": [ 149 | { 150 | "output_type": "stream", 151 | "text": [ 152 | "60000\n", 153 | "10000\n" 154 | ], 155 | "name": "stdout" 156 | } 157 | ] 158 | }, 159 | { 160 | "cell_type": "code", 161 | "metadata": { 162 | "id": "KPfBtfWL8VLU", 163 | "colab_type": "code", 164 | "colab": { 165 | "base_uri": "https://localhost:8080/", 166 | "height": 285 167 | }, 168 | "outputId": "4b5d4f64-c4f9-434b-952a-92c05f7aa58e" 169 | }, 170 | "source": [ 171 | "model = Sequential()\n", 172 | "\n", 173 | "model.add(Conv2D(32, kernel_size = [3,3], input_shape = [28,28,1], activation = \"relu\"))\n", 174 | "model.add(Conv2D(64, kernel_size = [3,3], activation = \"relu\"))\n", 175 | "model.add(MaxPooling2D(pool_size =3))\n", 176 | "model.add(Dropout(0.25))\n", 177 | "model.add(Flatten())\n", 178 | "model.add(Dense(128,activation = \"relu\"))\n", 179 | "model.add(Dropout(0.5))\n", 180 | "model.add(Dense(10,activation = \"relu\"))\n", 181 | "model.add(keras.layers.Activation(\"softmax\"))\n", 182 | "\n" 183 | ], 184 | "execution_count": 5, 185 | "outputs": [ 186 | { 187 | "output_type": "stream", 188 | "text": [ 189 | "WARNING: Logging before flag parsing goes to stderr.\n", 190 | "W0706 11:44:41.833690 140437456574336 deprecation_wrapper.py:119] From /usr/local/lib/python3.6/dist-packages/keras/backend/tensorflow_backend.py:74: The name tf.get_default_graph is deprecated. Please use tf.compat.v1.get_default_graph instead.\n", 191 | "\n", 192 | "W0706 11:44:41.885864 140437456574336 deprecation_wrapper.py:119] From /usr/local/lib/python3.6/dist-packages/keras/backend/tensorflow_backend.py:517: The name tf.placeholder is deprecated. Please use tf.compat.v1.placeholder instead.\n", 193 | "\n", 194 | "W0706 11:44:41.895900 140437456574336 deprecation_wrapper.py:119] From /usr/local/lib/python3.6/dist-packages/keras/backend/tensorflow_backend.py:4138: The name tf.random_uniform is deprecated. Please use tf.random.uniform instead.\n", 195 | "\n", 196 | "W0706 11:44:41.951021 140437456574336 deprecation_wrapper.py:119] From /usr/local/lib/python3.6/dist-packages/keras/backend/tensorflow_backend.py:3976: The name tf.nn.max_pool is deprecated. Please use tf.nn.max_pool2d instead.\n", 197 | "\n", 198 | "W0706 11:44:41.954980 140437456574336 deprecation_wrapper.py:119] From /usr/local/lib/python3.6/dist-packages/keras/backend/tensorflow_backend.py:133: The name tf.placeholder_with_default is deprecated. Please use tf.compat.v1.placeholder_with_default instead.\n", 199 | "\n", 200 | "W0706 11:44:41.966881 140437456574336 deprecation.py:506] From /usr/local/lib/python3.6/dist-packages/keras/backend/tensorflow_backend.py:3445: calling dropout (from tensorflow.python.ops.nn_ops) with keep_prob is deprecated and will be removed in a future version.\n", 201 | "Instructions for updating:\n", 202 | "Please use `rate` instead of `keep_prob`. Rate should be set to `rate = 1 - keep_prob`.\n" 203 | ], 204 | "name": "stderr" 205 | } 206 | ] 207 | }, 208 | { 209 | "cell_type": "code", 210 | "metadata": { 211 | "id": "BoF4UYYMAvha", 212 | "colab_type": "code", 213 | "colab": { 214 | "base_uri": "https://localhost:8080/", 215 | "height": 107 216 | }, 217 | "outputId": "5048c7a1-955a-4d5b-9637-c2ba4e9898b7" 218 | }, 219 | "source": [ 220 | "model.compile(loss = keras.losses.categorical_crossentropy,\n", 221 | " optimizer = keras.optimizers.Adadelta(),\n", 222 | " metrics = [\"accuracy\"])" 223 | ], 224 | "execution_count": 6, 225 | "outputs": [ 226 | { 227 | "output_type": "stream", 228 | "text": [ 229 | "W0706 11:44:43.120586 140437456574336 deprecation_wrapper.py:119] From /usr/local/lib/python3.6/dist-packages/keras/optimizers.py:790: The name tf.train.Optimizer is deprecated. Please use tf.compat.v1.train.Optimizer instead.\n", 230 | "\n", 231 | "W0706 11:44:43.132202 140437456574336 deprecation_wrapper.py:119] From /usr/local/lib/python3.6/dist-packages/keras/backend/tensorflow_backend.py:3295: The name tf.log is deprecated. Please use tf.math.log instead.\n", 232 | "\n" 233 | ], 234 | "name": "stderr" 235 | } 236 | ] 237 | }, 238 | { 239 | "cell_type": "code", 240 | "metadata": { 241 | "id": "3AmY9VfCC0nf", 242 | "colab_type": "code", 243 | "colab": { 244 | "base_uri": "https://localhost:8080/", 245 | "height": 461 246 | }, 247 | "outputId": "5b101066-b2fd-42e7-c712-7c6f3ac7a31f" 248 | }, 249 | "source": [ 250 | "model.summary()" 251 | ], 252 | "execution_count": 7, 253 | "outputs": [ 254 | { 255 | "output_type": "stream", 256 | "text": [ 257 | "_________________________________________________________________\n", 258 | "Layer (type) Output Shape Param # \n", 259 | "=================================================================\n", 260 | "conv2d_1 (Conv2D) (None, 26, 26, 32) 320 \n", 261 | "_________________________________________________________________\n", 262 | "conv2d_2 (Conv2D) (None, 24, 24, 64) 18496 \n", 263 | "_________________________________________________________________\n", 264 | "max_pooling2d_1 (MaxPooling2 (None, 8, 8, 64) 0 \n", 265 | "_________________________________________________________________\n", 266 | "dropout_1 (Dropout) (None, 8, 8, 64) 0 \n", 267 | "_________________________________________________________________\n", 268 | "flatten_1 (Flatten) (None, 4096) 0 \n", 269 | "_________________________________________________________________\n", 270 | "dense_1 (Dense) (None, 128) 524416 \n", 271 | "_________________________________________________________________\n", 272 | "dropout_2 (Dropout) (None, 128) 0 \n", 273 | "_________________________________________________________________\n", 274 | "dense_2 (Dense) (None, 10) 1290 \n", 275 | "_________________________________________________________________\n", 276 | "activation_1 (Activation) (None, 10) 0 \n", 277 | "=================================================================\n", 278 | "Total params: 544,522\n", 279 | "Trainable params: 544,522\n", 280 | "Non-trainable params: 0\n", 281 | "_________________________________________________________________\n" 282 | ], 283 | "name": "stdout" 284 | } 285 | ] 286 | }, 287 | { 288 | "cell_type": "code", 289 | "metadata": { 290 | "id": "acFJ8oUgDAe_", 291 | "colab_type": "code", 292 | "colab": { 293 | "base_uri": "https://localhost:8080/", 294 | "height": 70 295 | }, 296 | "outputId": "a6fc4ffc-e48c-4ee9-f48b-6c9fb3cea7fe" 297 | }, 298 | "source": [ 299 | "from tensorboardcolab import TensorBoardColab, TensorBoardColabCallback\n", 300 | "\n", 301 | "\n", 302 | "tbc = TensorBoardColab()\n" 303 | ], 304 | "execution_count": 11, 305 | "outputs": [ 306 | { 307 | "output_type": "stream", 308 | "text": [ 309 | "Wait for 8 seconds...\n", 310 | "TensorBoard link:\n", 311 | "https://d076dbbd.ngrok.io\n" 312 | ], 313 | "name": "stdout" 314 | } 315 | ] 316 | }, 317 | { 318 | "cell_type": "code", 319 | "metadata": { 320 | "id": "GOFz1IwqEgUJ", 321 | "colab_type": "code", 322 | "colab": { 323 | "base_uri": "https://localhost:8080/", 324 | "height": 1000 325 | }, 326 | "outputId": "b9efc34d-9b85-4cb1-a3dd-42abed9a0743" 327 | }, 328 | "source": [ 329 | "my_batch_size = 128\n", 330 | "model.fit(x_train, y_train,\n", 331 | " batch_size = my_batch_size,\n", 332 | " epochs = 100,\n", 333 | " verbose = 1,\n", 334 | " validation_data = (x_test,y_test),\n", 335 | " callbacks = [TensorBoardColabCallback(tbc)])\n", 336 | "\n", 337 | "score = model.evaluate(x_test, y_test, verbose = 0)\n", 338 | "print(\"Test loss {0}\".format(score[0]))\n", 339 | "print(\"Test accuracy {0}\".format(score[1]))" 340 | ], 341 | "execution_count": 12, 342 | "outputs": [ 343 | { 344 | "output_type": "stream", 345 | "text": [ 346 | "Train on 60000 samples, validate on 10000 samples\n", 347 | "Epoch 1/100\n", 348 | "60000/60000 [==============================] - 8s 131us/step - loss: 0.0457 - acc: 0.9869 - val_loss: 0.0285 - val_acc: 0.9907\n", 349 | "Epoch 2/100\n", 350 | "60000/60000 [==============================] - 8s 130us/step - loss: 0.0409 - acc: 0.9872 - val_loss: 0.0284 - val_acc: 0.9913\n", 351 | "Epoch 3/100\n", 352 | "60000/60000 [==============================] - 8s 131us/step - loss: 0.0372 - acc: 0.9889 - val_loss: 0.0279 - val_acc: 0.9908\n", 353 | "Epoch 4/100\n", 354 | "60000/60000 [==============================] - 8s 131us/step - loss: 0.0340 - acc: 0.9903 - val_loss: 0.0250 - val_acc: 0.9920\n", 355 | "Epoch 5/100\n", 356 | "60000/60000 [==============================] - 8s 130us/step - loss: 0.0331 - acc: 0.9902 - val_loss: 0.0246 - val_acc: 0.9920\n", 357 | "Epoch 6/100\n", 358 | "60000/60000 [==============================] - 8s 129us/step - loss: 0.0315 - acc: 0.9906 - val_loss: 0.0264 - val_acc: 0.9922\n", 359 | "Epoch 7/100\n", 360 | "60000/60000 [==============================] - 8s 130us/step - loss: 0.0294 - acc: 0.9911 - val_loss: 0.0258 - val_acc: 0.9918\n", 361 | "Epoch 8/100\n", 362 | "60000/60000 [==============================] - 8s 130us/step - loss: 0.0288 - acc: 0.9913 - val_loss: 0.0273 - val_acc: 0.9922\n", 363 | "Epoch 9/100\n", 364 | "60000/60000 [==============================] - 8s 129us/step - loss: 0.0269 - acc: 0.9914 - val_loss: 0.0264 - val_acc: 0.9924\n", 365 | "Epoch 10/100\n", 366 | "60000/60000 [==============================] - 8s 129us/step - loss: 0.0288 - acc: 0.9917 - val_loss: 0.0282 - val_acc: 0.9917\n", 367 | "Epoch 11/100\n", 368 | "60000/60000 [==============================] - 8s 133us/step - loss: 0.0253 - acc: 0.9919 - val_loss: 0.0263 - val_acc: 0.9924\n", 369 | "Epoch 12/100\n", 370 | "60000/60000 [==============================] - 8s 130us/step - loss: 0.0257 - acc: 0.9923 - val_loss: 0.0274 - val_acc: 0.9916\n", 371 | "Epoch 13/100\n", 372 | "60000/60000 [==============================] - 8s 130us/step - loss: 0.0244 - acc: 0.9922 - val_loss: 0.0272 - val_acc: 0.9921\n", 373 | "Epoch 14/100\n", 374 | "60000/60000 [==============================] - 8s 129us/step - loss: 0.0239 - acc: 0.9926 - val_loss: 0.0247 - val_acc: 0.9927\n", 375 | "Epoch 15/100\n", 376 | "60000/60000 [==============================] - 8s 130us/step - loss: 0.0234 - acc: 0.9928 - val_loss: 0.0240 - val_acc: 0.9930\n", 377 | "Epoch 16/100\n", 378 | "60000/60000 [==============================] - 8s 129us/step - loss: 0.0219 - acc: 0.9933 - val_loss: 0.0280 - val_acc: 0.9923\n", 379 | "Epoch 17/100\n", 380 | "60000/60000 [==============================] - 8s 129us/step - loss: 0.0232 - acc: 0.9930 - val_loss: 0.0270 - val_acc: 0.9923\n", 381 | "Epoch 18/100\n", 382 | "60000/60000 [==============================] - 8s 130us/step - loss: 0.0212 - acc: 0.9933 - val_loss: 0.0250 - val_acc: 0.9930\n", 383 | "Epoch 19/100\n", 384 | "60000/60000 [==============================] - 8s 130us/step - loss: 0.0217 - acc: 0.9937 - val_loss: 0.0285 - val_acc: 0.9925\n", 385 | "Epoch 20/100\n", 386 | "60000/60000 [==============================] - 8s 130us/step - loss: 0.0214 - acc: 0.9935 - val_loss: 0.0276 - val_acc: 0.9923\n", 387 | "Epoch 21/100\n", 388 | "60000/60000 [==============================] - 8s 129us/step - loss: 0.0220 - acc: 0.9934 - val_loss: 0.0238 - val_acc: 0.9930\n", 389 | "Epoch 22/100\n", 390 | "60000/60000 [==============================] - 8s 129us/step - loss: 0.0219 - acc: 0.9935 - val_loss: 0.0256 - val_acc: 0.9929\n", 391 | "Epoch 23/100\n", 392 | "60000/60000 [==============================] - 8s 130us/step - loss: 0.0204 - acc: 0.9939 - val_loss: 0.0276 - val_acc: 0.9933\n", 393 | "Epoch 24/100\n", 394 | "60000/60000 [==============================] - 8s 129us/step - loss: 0.0208 - acc: 0.9938 - val_loss: 0.0257 - val_acc: 0.9927\n", 395 | "Epoch 25/100\n", 396 | "60000/60000 [==============================] - 8s 129us/step - loss: 0.0222 - acc: 0.9932 - val_loss: 0.0237 - val_acc: 0.9928\n", 397 | "Epoch 26/100\n", 398 | "60000/60000 [==============================] - 8s 129us/step - loss: 0.0221 - acc: 0.9939 - val_loss: 0.0261 - val_acc: 0.9926\n", 399 | "Epoch 27/100\n", 400 | "60000/60000 [==============================] - 8s 130us/step - loss: 0.0207 - acc: 0.9939 - val_loss: 0.0247 - val_acc: 0.9924\n", 401 | "Epoch 28/100\n", 402 | "60000/60000 [==============================] - 8s 130us/step - loss: 0.0209 - acc: 0.9933 - val_loss: 0.0249 - val_acc: 0.9924\n", 403 | "Epoch 29/100\n", 404 | "60000/60000 [==============================] - 8s 129us/step - loss: 0.0208 - acc: 0.9935 - val_loss: 0.0280 - val_acc: 0.9938\n", 405 | "Epoch 30/100\n", 406 | "60000/60000 [==============================] - 8s 130us/step - loss: 0.0202 - acc: 0.9938 - val_loss: 0.0277 - val_acc: 0.9923\n", 407 | "Epoch 31/100\n", 408 | "60000/60000 [==============================] - 8s 130us/step - loss: 0.0192 - acc: 0.9944 - val_loss: 0.0229 - val_acc: 0.9931\n", 409 | "Epoch 32/100\n", 410 | "60000/60000 [==============================] - 8s 129us/step - loss: 0.0184 - acc: 0.9944 - val_loss: 0.0264 - val_acc: 0.9930\n", 411 | "Epoch 33/100\n", 412 | "60000/60000 [==============================] - 8s 128us/step - loss: 0.0181 - acc: 0.9945 - val_loss: 0.0315 - val_acc: 0.9922\n", 413 | "Epoch 34/100\n", 414 | "60000/60000 [==============================] - 8s 130us/step - loss: 0.0193 - acc: 0.9943 - val_loss: 0.0282 - val_acc: 0.9929\n", 415 | "Epoch 35/100\n", 416 | "60000/60000 [==============================] - 8s 130us/step - loss: 0.0177 - acc: 0.9949 - val_loss: 0.0253 - val_acc: 0.9930\n", 417 | "Epoch 36/100\n", 418 | "60000/60000 [==============================] - 8s 130us/step - loss: 0.0200 - acc: 0.9939 - val_loss: 0.0253 - val_acc: 0.9940\n", 419 | "Epoch 37/100\n", 420 | "60000/60000 [==============================] - 8s 129us/step - loss: 0.0181 - acc: 0.9945 - val_loss: 0.0310 - val_acc: 0.9927\n", 421 | "Epoch 38/100\n", 422 | "60000/60000 [==============================] - 8s 129us/step - loss: 0.0185 - acc: 0.9947 - val_loss: 0.0279 - val_acc: 0.9931\n", 423 | "Epoch 39/100\n", 424 | "60000/60000 [==============================] - 8s 130us/step - loss: 0.0189 - acc: 0.9943 - val_loss: 0.0272 - val_acc: 0.9929\n", 425 | "Epoch 40/100\n", 426 | "60000/60000 [==============================] - 8s 129us/step - loss: 0.0178 - acc: 0.9947 - val_loss: 0.0278 - val_acc: 0.9933\n", 427 | "Epoch 41/100\n", 428 | "60000/60000 [==============================] - 8s 129us/step - loss: 0.0184 - acc: 0.9944 - val_loss: 0.0271 - val_acc: 0.9933\n", 429 | "Epoch 42/100\n", 430 | "60000/60000 [==============================] - 8s 130us/step - loss: 0.0181 - acc: 0.9943 - val_loss: 0.0259 - val_acc: 0.9932\n", 431 | "Epoch 43/100\n", 432 | "60000/60000 [==============================] - 8s 131us/step - loss: 0.0190 - acc: 0.9943 - val_loss: 0.0258 - val_acc: 0.9931\n", 433 | "Epoch 44/100\n", 434 | "60000/60000 [==============================] - 8s 129us/step - loss: 0.0185 - acc: 0.9943 - val_loss: 0.0279 - val_acc: 0.9925\n", 435 | "Epoch 45/100\n", 436 | "60000/60000 [==============================] - 8s 129us/step - loss: 0.0181 - acc: 0.9944 - val_loss: 0.0278 - val_acc: 0.9927\n", 437 | "Epoch 46/100\n", 438 | "60000/60000 [==============================] - 8s 130us/step - loss: 0.0161 - acc: 0.9949 - val_loss: 0.0277 - val_acc: 0.9933\n", 439 | "Epoch 47/100\n", 440 | "60000/60000 [==============================] - 8s 130us/step - loss: 0.0164 - acc: 0.9952 - val_loss: 0.0263 - val_acc: 0.9933\n", 441 | "Epoch 48/100\n", 442 | "60000/60000 [==============================] - 8s 129us/step - loss: 0.0174 - acc: 0.9950 - val_loss: 0.0252 - val_acc: 0.9940\n", 443 | "Epoch 49/100\n", 444 | "60000/60000 [==============================] - 8s 129us/step - loss: 0.0172 - acc: 0.9947 - val_loss: 0.0279 - val_acc: 0.9930\n", 445 | "Epoch 50/100\n", 446 | "60000/60000 [==============================] - 8s 130us/step - loss: 0.0172 - acc: 0.9949 - val_loss: 0.0283 - val_acc: 0.9930\n", 447 | "Epoch 51/100\n", 448 | "60000/60000 [==============================] - 8s 133us/step - loss: 0.0165 - acc: 0.9950 - val_loss: 0.0277 - val_acc: 0.9927\n", 449 | "Epoch 52/100\n", 450 | "60000/60000 [==============================] - 8s 130us/step - loss: 0.0176 - acc: 0.9947 - val_loss: 0.0254 - val_acc: 0.9926\n", 451 | "Epoch 53/100\n", 452 | "60000/60000 [==============================] - 8s 129us/step - loss: 0.0163 - acc: 0.9952 - val_loss: 0.0254 - val_acc: 0.9933\n", 453 | "Epoch 54/100\n", 454 | "60000/60000 [==============================] - 8s 130us/step - loss: 0.0173 - acc: 0.9951 - val_loss: 0.0247 - val_acc: 0.9936\n", 455 | "Epoch 55/100\n", 456 | "60000/60000 [==============================] - 8s 129us/step - loss: 0.0166 - acc: 0.9949 - val_loss: 0.0250 - val_acc: 0.9937\n", 457 | "Epoch 56/100\n", 458 | "60000/60000 [==============================] - 8s 129us/step - loss: 0.0147 - acc: 0.9955 - val_loss: 0.0276 - val_acc: 0.9931\n", 459 | "Epoch 57/100\n", 460 | "60000/60000 [==============================] - 8s 129us/step - loss: 0.0154 - acc: 0.9954 - val_loss: 0.0285 - val_acc: 0.9935\n", 461 | "Epoch 58/100\n", 462 | "60000/60000 [==============================] - 8s 129us/step - loss: 0.0163 - acc: 0.9949 - val_loss: 0.0263 - val_acc: 0.9935\n", 463 | "Epoch 59/100\n", 464 | "60000/60000 [==============================] - 8s 129us/step - loss: 0.0145 - acc: 0.9956 - val_loss: 0.0287 - val_acc: 0.9922\n", 465 | "Epoch 60/100\n", 466 | "60000/60000 [==============================] - 8s 129us/step - loss: 0.0158 - acc: 0.9953 - val_loss: 0.0264 - val_acc: 0.9938\n", 467 | "Epoch 61/100\n", 468 | "60000/60000 [==============================] - 8s 130us/step - loss: 0.0150 - acc: 0.9954 - val_loss: 0.0301 - val_acc: 0.9936\n", 469 | "Epoch 62/100\n", 470 | "60000/60000 [==============================] - 8s 130us/step - loss: 0.0152 - acc: 0.9955 - val_loss: 0.0254 - val_acc: 0.9936\n", 471 | "Epoch 63/100\n", 472 | "60000/60000 [==============================] - 8s 129us/step - loss: 0.0161 - acc: 0.9953 - val_loss: 0.0306 - val_acc: 0.9937\n", 473 | "Epoch 64/100\n", 474 | "60000/60000 [==============================] - 8s 129us/step - loss: 0.0151 - acc: 0.9955 - val_loss: 0.0318 - val_acc: 0.9929\n", 475 | "Epoch 65/100\n", 476 | "60000/60000 [==============================] - 8s 130us/step - loss: 0.0147 - acc: 0.9955 - val_loss: 0.0276 - val_acc: 0.9935\n", 477 | "Epoch 66/100\n", 478 | "60000/60000 [==============================] - 8s 130us/step - loss: 0.0145 - acc: 0.9958 - val_loss: 0.0299 - val_acc: 0.9921\n", 479 | "Epoch 67/100\n", 480 | "60000/60000 [==============================] - 8s 129us/step - loss: 0.0147 - acc: 0.9959 - val_loss: 0.0288 - val_acc: 0.9938\n", 481 | "Epoch 68/100\n", 482 | "60000/60000 [==============================] - 8s 130us/step - loss: 0.0156 - acc: 0.9957 - val_loss: 0.0307 - val_acc: 0.9937\n", 483 | "Epoch 69/100\n", 484 | "60000/60000 [==============================] - 8s 130us/step - loss: 0.0142 - acc: 0.9953 - val_loss: 0.0282 - val_acc: 0.9931\n", 485 | "Epoch 70/100\n", 486 | "60000/60000 [==============================] - 8s 130us/step - loss: 0.0159 - acc: 0.9953 - val_loss: 0.0290 - val_acc: 0.9932\n", 487 | "Epoch 71/100\n", 488 | "60000/60000 [==============================] - 8s 130us/step - loss: 0.0144 - acc: 0.9956 - val_loss: 0.0323 - val_acc: 0.9937\n", 489 | "Epoch 72/100\n", 490 | "60000/60000 [==============================] - 8s 129us/step - loss: 0.0133 - acc: 0.9957 - val_loss: 0.0280 - val_acc: 0.9933\n", 491 | "Epoch 73/100\n", 492 | "60000/60000 [==============================] - 8s 130us/step - loss: 0.0146 - acc: 0.9955 - val_loss: 0.0322 - val_acc: 0.9933\n", 493 | "Epoch 74/100\n", 494 | "60000/60000 [==============================] - 8s 128us/step - loss: 0.0126 - acc: 0.9962 - val_loss: 0.0320 - val_acc: 0.9926\n", 495 | "Epoch 75/100\n", 496 | "60000/60000 [==============================] - 8s 129us/step - loss: 0.0151 - acc: 0.9954 - val_loss: 0.0329 - val_acc: 0.9932\n", 497 | "Epoch 76/100\n", 498 | "60000/60000 [==============================] - 8s 129us/step - loss: 0.0148 - acc: 0.9957 - val_loss: 0.0263 - val_acc: 0.9933\n", 499 | "Epoch 77/100\n", 500 | "60000/60000 [==============================] - 8s 129us/step - loss: 0.0149 - acc: 0.9956 - val_loss: 0.0334 - val_acc: 0.9935\n", 501 | "Epoch 78/100\n", 502 | "60000/60000 [==============================] - 8s 130us/step - loss: 0.0128 - acc: 0.9962 - val_loss: 0.0294 - val_acc: 0.9938\n", 503 | "Epoch 79/100\n", 504 | "60000/60000 [==============================] - 8s 130us/step - loss: 0.0128 - acc: 0.9962 - val_loss: 0.0295 - val_acc: 0.9936\n", 505 | "Epoch 80/100\n", 506 | "60000/60000 [==============================] - 8s 130us/step - loss: 0.0138 - acc: 0.9960 - val_loss: 0.0296 - val_acc: 0.9928\n", 507 | "Epoch 81/100\n", 508 | "60000/60000 [==============================] - 8s 129us/step - loss: 0.0132 - acc: 0.9958 - val_loss: 0.0308 - val_acc: 0.9928\n", 509 | "Epoch 82/100\n", 510 | "60000/60000 [==============================] - 8s 131us/step - loss: 0.0123 - acc: 0.9961 - val_loss: 0.0356 - val_acc: 0.9938\n", 511 | "Epoch 83/100\n", 512 | "60000/60000 [==============================] - 8s 129us/step - loss: 0.0127 - acc: 0.9962 - val_loss: 0.0305 - val_acc: 0.9943\n", 513 | "Epoch 84/100\n", 514 | "60000/60000 [==============================] - 8s 128us/step - loss: 0.0128 - acc: 0.9964 - val_loss: 0.0286 - val_acc: 0.9944\n", 515 | "Epoch 85/100\n", 516 | "60000/60000 [==============================] - 8s 129us/step - loss: 0.0137 - acc: 0.9963 - val_loss: 0.0305 - val_acc: 0.9944\n", 517 | "Epoch 86/100\n", 518 | "60000/60000 [==============================] - 8s 129us/step - loss: 0.0131 - acc: 0.9961 - val_loss: 0.0272 - val_acc: 0.9937\n", 519 | "Epoch 87/100\n", 520 | "60000/60000 [==============================] - 8s 129us/step - loss: 0.0107 - acc: 0.9965 - val_loss: 0.0304 - val_acc: 0.9937\n", 521 | "Epoch 88/100\n", 522 | "60000/60000 [==============================] - 8s 129us/step - loss: 0.0122 - acc: 0.9965 - val_loss: 0.0283 - val_acc: 0.9941\n", 523 | "Epoch 89/100\n", 524 | "60000/60000 [==============================] - 9s 153us/step - loss: 0.0131 - acc: 0.9960 - val_loss: 0.0285 - val_acc: 0.9936\n", 525 | "Epoch 90/100\n", 526 | "60000/60000 [==============================] - 8s 133us/step - loss: 0.0130 - acc: 0.9966 - val_loss: 0.0270 - val_acc: 0.9942\n", 527 | "Epoch 91/100\n", 528 | "60000/60000 [==============================] - 8s 136us/step - loss: 0.0118 - acc: 0.9963 - val_loss: 0.0270 - val_acc: 0.9942\n", 529 | "Epoch 92/100\n", 530 | "60000/60000 [==============================] - 8s 132us/step - loss: 0.0120 - acc: 0.9962 - val_loss: 0.0348 - val_acc: 0.9929\n", 531 | "Epoch 93/100\n", 532 | "60000/60000 [==============================] - 8s 133us/step - loss: 0.0122 - acc: 0.9964 - val_loss: 0.0310 - val_acc: 0.9932\n", 533 | "Epoch 94/100\n", 534 | "60000/60000 [==============================] - 8s 132us/step - loss: 0.0128 - acc: 0.9964 - val_loss: 0.0292 - val_acc: 0.9938\n", 535 | "Epoch 95/100\n", 536 | "60000/60000 [==============================] - 8s 132us/step - loss: 0.0117 - acc: 0.9966 - val_loss: 0.0345 - val_acc: 0.9930\n", 537 | "Epoch 96/100\n", 538 | "60000/60000 [==============================] - 8s 133us/step - loss: 0.0131 - acc: 0.9963 - val_loss: 0.0297 - val_acc: 0.9937\n", 539 | "Epoch 97/100\n", 540 | "60000/60000 [==============================] - 8s 133us/step - loss: 0.0119 - acc: 0.9965 - val_loss: 0.0280 - val_acc: 0.9932\n", 541 | "Epoch 98/100\n", 542 | "60000/60000 [==============================] - 8s 132us/step - loss: 0.0120 - acc: 0.9961 - val_loss: 0.0317 - val_acc: 0.9934\n", 543 | "Epoch 99/100\n", 544 | "60000/60000 [==============================] - 8s 132us/step - loss: 0.0132 - acc: 0.9960 - val_loss: 0.0287 - val_acc: 0.9935\n", 545 | "Epoch 100/100\n", 546 | "60000/60000 [==============================] - 8s 132us/step - loss: 0.0125 - acc: 0.9963 - val_loss: 0.0293 - val_acc: 0.9940\n", 547 | "Test loss 0.02929705031307781\n", 548 | "Test accuracy 0.994\n" 549 | ], 550 | "name": "stdout" 551 | } 552 | ] 553 | }, 554 | { 555 | "cell_type": "code", 556 | "metadata": { 557 | "id": "fqF8F9J9F9za", 558 | "colab_type": "code", 559 | "colab": {} 560 | }, 561 | "source": [ 562 | "" 563 | ], 564 | "execution_count": 0, 565 | "outputs": [] 566 | } 567 | ] 568 | } -------------------------------------------------------------------------------- /week2/NLP_Example.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "nbformat": 4, 3 | "nbformat_minor": 0, 4 | "metadata": { 5 | "colab": { 6 | "name": "NLP Example.ipynb", 7 | "version": "0.3.2", 8 | "provenance": [] 9 | }, 10 | "kernelspec": { 11 | "name": "python3", 12 | "display_name": "Python 3" 13 | } 14 | }, 15 | "cells": [ 16 | { 17 | "cell_type": "code", 18 | "metadata": { 19 | "id": "cezayyLr-KFG", 20 | "colab_type": "code", 21 | "colab": { 22 | "base_uri": "https://localhost:8080/", 23 | "height": 35 24 | }, 25 | "outputId": "cbbaa26e-3312-4bf4-8b59-14c46f561580" 26 | }, 27 | "source": [ 28 | "import numpy as np\n", 29 | "#np.random.seed(None)\n", 30 | "\n", 31 | "from keras.models import Sequential\n", 32 | "from keras.layers import Dense, Embedding, Flatten, Input\n", 33 | "from keras.preprocessing.text import one_hot\n", 34 | "from keras.preprocessing.sequence import pad_sequences\n", 35 | "from keras.optimizers import Adam\n", 36 | "from sklearn.preprocessing import OneHotEncoder\n", 37 | "\n", 38 | "\n" 39 | ], 40 | "execution_count": 1, 41 | "outputs": [ 42 | { 43 | "output_type": "stream", 44 | "text": [ 45 | "Using TensorFlow backend.\n" 46 | ], 47 | "name": "stderr" 48 | } 49 | ] 50 | }, 51 | { 52 | "cell_type": "code", 53 | "metadata": { 54 | "id": "W8ytBnj_-s-6", 55 | "colab_type": "code", 56 | "colab": {} 57 | }, 58 | "source": [ 59 | "docs = ['kral bir adamdir',\n", 60 | "'kral ile kralice evlenir',\n", 61 | "'kralice ile kral evlenir',\n", 62 | "'biraz gereksiz sozler',\n", 63 | "'kralice bir kadindir']\n", 64 | "\n" 65 | ], 66 | "execution_count": 0, 67 | "outputs": [] 68 | }, 69 | { 70 | "cell_type": "code", 71 | "metadata": { 72 | "id": "BlS-ASoi-2SS", 73 | "colab_type": "code", 74 | "colab": { 75 | "base_uri": "https://localhost:8080/", 76 | "height": 108 77 | }, 78 | "outputId": "3347904b-b58f-45de-b30e-de838dc05504" 79 | }, 80 | "source": [ 81 | "vocab_size = 50\n", 82 | "oh = np.array(one_hot(\"kral kralice adamdir kadindir sozler\", vocab_size)).reshape(-1,1)\n", 83 | "oh" 84 | ], 85 | "execution_count": 7, 86 | "outputs": [ 87 | { 88 | "output_type": "execute_result", 89 | "data": { 90 | "text/plain": [ 91 | "array([[ 1],\n", 92 | " [48],\n", 93 | " [10],\n", 94 | " [37],\n", 95 | " [11]])" 96 | ] 97 | }, 98 | "metadata": { 99 | "tags": [] 100 | }, 101 | "execution_count": 7 102 | } 103 | ] 104 | }, 105 | { 106 | "cell_type": "code", 107 | "metadata": { 108 | "id": "yIUSyjBh_U48", 109 | "colab_type": "code", 110 | "colab": { 111 | "base_uri": "https://localhost:8080/", 112 | "height": 474 113 | }, 114 | "outputId": "aa16d55a-0999-4ebd-d5f5-770b2219f43a" 115 | }, 116 | "source": [ 117 | "enc = OneHotEncoder()\n", 118 | "enc.fit(np.array(range(50)).reshape(-1,1))\n", 119 | "oh_enc = enc.transform(oh).toarray()\n", 120 | "oh_enc" 121 | ], 122 | "execution_count": 8, 123 | "outputs": [ 124 | { 125 | "output_type": "stream", 126 | "text": [ 127 | "/usr/local/lib/python3.6/dist-packages/sklearn/preprocessing/_encoders.py:415: FutureWarning: The handling of integer data will change in version 0.22. Currently, the categories are determined based on the range [0, max(values)], while in the future they will be determined based on the unique values.\n", 128 | "If you want the future behaviour and silence this warning, you can specify \"categories='auto'\".\n", 129 | "In case you used a LabelEncoder before this OneHotEncoder to convert the categories to integers, then you can now use the OneHotEncoder directly.\n", 130 | " warnings.warn(msg, FutureWarning)\n" 131 | ], 132 | "name": "stderr" 133 | }, 134 | { 135 | "output_type": "execute_result", 136 | "data": { 137 | "text/plain": [ 138 | "array([[0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", 139 | " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", 140 | " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", 141 | " 0., 0.],\n", 142 | " [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", 143 | " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", 144 | " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", 145 | " 1., 0.],\n", 146 | " [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0.,\n", 147 | " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", 148 | " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", 149 | " 0., 0.],\n", 150 | " [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", 151 | " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", 152 | " 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", 153 | " 0., 0.],\n", 154 | " [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0.,\n", 155 | " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", 156 | " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", 157 | " 0., 0.]])" 158 | ] 159 | }, 160 | "metadata": { 161 | "tags": [] 162 | }, 163 | "execution_count": 8 164 | } 165 | ] 166 | }, 167 | { 168 | "cell_type": "code", 169 | "metadata": { 170 | "id": "zpOVFc3dA1Pr", 171 | "colab_type": "code", 172 | "colab": { 173 | "base_uri": "https://localhost:8080/", 174 | "height": 35 175 | }, 176 | "outputId": "c51c096b-5303-424a-ee28-1c4256722808" 177 | }, 178 | "source": [ 179 | "encoded_docs = [one_hot(kelime,vocab_size) for kelime in docs]\n", 180 | "encoded_docs" 181 | ], 182 | "execution_count": 9, 183 | "outputs": [ 184 | { 185 | "output_type": "execute_result", 186 | "data": { 187 | "text/plain": [ 188 | "[[1, 40, 10], [1, 7, 48, 2], [48, 7, 1, 2], [28, 9, 11], [48, 40, 37]]" 189 | ] 190 | }, 191 | "metadata": { 192 | "tags": [] 193 | }, 194 | "execution_count": 9 195 | } 196 | ] 197 | }, 198 | { 199 | "cell_type": "code", 200 | "metadata": { 201 | "id": "kOXAIxdyBQxU", 202 | "colab_type": "code", 203 | "colab": { 204 | "base_uri": "https://localhost:8080/", 205 | "height": 199 206 | }, 207 | "outputId": "6b12ec52-09f0-4784-daa2-63ab1a071654" 208 | }, 209 | "source": [ 210 | "max_length = 24\n", 211 | "padded_docs = pad_sequences(encoded_docs, maxlen = max_length, padding = \"post\")\n", 212 | "padded_docs" 213 | ], 214 | "execution_count": 11, 215 | "outputs": [ 216 | { 217 | "output_type": "execute_result", 218 | "data": { 219 | "text/plain": [ 220 | "array([[ 1, 40, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", 221 | " 0, 0, 0, 0, 0, 0, 0, 0],\n", 222 | " [ 1, 7, 48, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", 223 | " 0, 0, 0, 0, 0, 0, 0, 0],\n", 224 | " [48, 7, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", 225 | " 0, 0, 0, 0, 0, 0, 0, 0],\n", 226 | " [28, 9, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", 227 | " 0, 0, 0, 0, 0, 0, 0, 0],\n", 228 | " [48, 40, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", 229 | " 0, 0, 0, 0, 0, 0, 0, 0]], dtype=int32)" 230 | ] 231 | }, 232 | "metadata": { 233 | "tags": [] 234 | }, 235 | "execution_count": 11 236 | } 237 | ] 238 | }, 239 | { 240 | "cell_type": "code", 241 | "metadata": { 242 | "id": "lB-tGnj2BlRr", 243 | "colab_type": "code", 244 | "colab": { 245 | "base_uri": "https://localhost:8080/", 246 | "height": 563 247 | }, 248 | "outputId": "14c89114-50c9-4266-f12a-0574564438db" 249 | }, 250 | "source": [ 251 | "tuples = np.empty((0,2))\n", 252 | "\n", 253 | "for cumle in padded_docs:\n", 254 | " length = len(cumle)\n", 255 | " for i in range(length):\n", 256 | " if cumle[i] != 0:\n", 257 | " if i0:\n", 263 | " tuples = np.append(tuples, [[cumle[i], cumle[i-1]]], axis = 0) \n", 264 | " \n", 265 | " if i>1:\n", 266 | " tuples = np.append(tuples, [[cumle[i], cumle[i-2]]], axis = 0) \n", 267 | " \n", 268 | "\n", 269 | "print(tuples.shape) \n", 270 | "tuples\n", 271 | " " 272 | ], 273 | "execution_count": 13, 274 | "outputs": [ 275 | { 276 | "output_type": "stream", 277 | "text": [ 278 | "(29, 2)\n" 279 | ], 280 | "name": "stdout" 281 | }, 282 | { 283 | "output_type": "execute_result", 284 | "data": { 285 | "text/plain": [ 286 | "array([[40., 10.],\n", 287 | " [40., 1.],\n", 288 | " [10., 40.],\n", 289 | " [10., 1.],\n", 290 | " [ 1., 7.],\n", 291 | " [ 1., 48.],\n", 292 | " [ 7., 48.],\n", 293 | " [ 7., 2.],\n", 294 | " [ 7., 1.],\n", 295 | " [48., 7.],\n", 296 | " [48., 1.],\n", 297 | " [ 2., 48.],\n", 298 | " [ 2., 7.],\n", 299 | " [48., 7.],\n", 300 | " [ 7., 48.],\n", 301 | " [ 1., 7.],\n", 302 | " [ 1., 48.],\n", 303 | " [ 2., 1.],\n", 304 | " [ 2., 7.],\n", 305 | " [28., 9.],\n", 306 | " [28., 11.],\n", 307 | " [ 9., 11.],\n", 308 | " [ 9., 28.],\n", 309 | " [11., 9.],\n", 310 | " [11., 28.],\n", 311 | " [40., 37.],\n", 312 | " [40., 48.],\n", 313 | " [37., 40.],\n", 314 | " [37., 48.]])" 315 | ] 316 | }, 317 | "metadata": { 318 | "tags": [] 319 | }, 320 | "execution_count": 13 321 | } 322 | ] 323 | }, 324 | { 325 | "cell_type": "code", 326 | "metadata": { 327 | "id": "H6uzciXbEBEh", 328 | "colab_type": "code", 329 | "colab": { 330 | "base_uri": "https://localhost:8080/", 331 | "height": 1000 332 | }, 333 | "outputId": "ee1cac7c-02ac-4426-b65b-8f7f032ca90e" 334 | }, 335 | "source": [ 336 | "onehotlabels_x = enc.transform(tuples[:,0].reshape(-1,1)).toarray()\n" 337 | ], 338 | "execution_count": 15, 339 | "outputs": [ 340 | { 341 | "output_type": "stream", 342 | "text": [ 343 | "[0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", 344 | " 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 0. 0.\n", 345 | " 0. 0.]\n", 346 | "[0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", 347 | " 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 0. 0.\n", 348 | " 0. 0.]\n", 349 | "[0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", 350 | " 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", 351 | " 0. 0.]\n", 352 | "[0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", 353 | " 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", 354 | " 0. 0.]\n", 355 | "[0. 1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", 356 | " 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", 357 | " 0. 0.]\n", 358 | "[0. 1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", 359 | " 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", 360 | " 0. 0.]\n", 361 | "[0. 0. 0. 0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", 362 | " 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", 363 | " 0. 0.]\n", 364 | "[0. 0. 0. 0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", 365 | " 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", 366 | " 0. 0.]\n", 367 | "[0. 0. 0. 0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", 368 | " 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", 369 | " 0. 0.]\n", 370 | "[0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", 371 | " 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", 372 | " 1. 0.]\n", 373 | "[0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", 374 | " 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", 375 | " 1. 0.]\n", 376 | "[0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", 377 | " 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", 378 | " 0. 0.]\n", 379 | "[0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", 380 | " 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", 381 | " 0. 0.]\n", 382 | "[0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", 383 | " 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", 384 | " 1. 0.]\n", 385 | "[0. 0. 0. 0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", 386 | " 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", 387 | " 0. 0.]\n", 388 | "[0. 1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", 389 | " 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", 390 | " 0. 0.]\n", 391 | "[0. 1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", 392 | " 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", 393 | " 0. 0.]\n", 394 | "[0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", 395 | " 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", 396 | " 0. 0.]\n", 397 | "[0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", 398 | " 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", 399 | " 0. 0.]\n", 400 | "[0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", 401 | " 0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", 402 | " 0. 0.]\n", 403 | "[0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", 404 | " 0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", 405 | " 0. 0.]\n", 406 | "[0. 0. 0. 0. 0. 0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", 407 | " 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", 408 | " 0. 0.]\n", 409 | "[0. 0. 0. 0. 0. 0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", 410 | " 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", 411 | " 0. 0.]\n", 412 | "[0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", 413 | " 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", 414 | " 0. 0.]\n", 415 | "[0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", 416 | " 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", 417 | " 0. 0.]\n", 418 | "[0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", 419 | " 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 0. 0.\n", 420 | " 0. 0.]\n", 421 | "[0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", 422 | " 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 0. 0.\n", 423 | " 0. 0.]\n", 424 | "[0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", 425 | " 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", 426 | " 0. 0.]\n", 427 | "[0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", 428 | " 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", 429 | " 0. 0.]\n" 430 | ], 431 | "name": "stdout" 432 | } 433 | ] 434 | }, 435 | { 436 | "cell_type": "code", 437 | "metadata": { 438 | "id": "gLugf5mZEYQq", 439 | "colab_type": "code", 440 | "colab": {} 441 | }, 442 | "source": [ 443 | "onehotlabels_y = enc.transform(tuples[:,1].reshape(-1,1)).toarray()\n" 444 | ], 445 | "execution_count": 0, 446 | "outputs": [] 447 | }, 448 | { 449 | "cell_type": "code", 450 | "metadata": { 451 | "id": "L-RQTyCDHvK8", 452 | "colab_type": "code", 453 | "colab": { 454 | "base_uri": "https://localhost:8080/", 455 | "height": 35 456 | }, 457 | "outputId": "50857bfa-2117-44fe-de2e-23ad782d87a2" 458 | }, 459 | "source": [ 460 | "print(onehotlabels_y.shape)" 461 | ], 462 | "execution_count": 17, 463 | "outputs": [ 464 | { 465 | "output_type": "stream", 466 | "text": [ 467 | "(29, 50)\n" 468 | ], 469 | "name": "stdout" 470 | } 471 | ] 472 | }, 473 | { 474 | "cell_type": "code", 475 | "metadata": { 476 | "id": "2l0-GAr3HyG6", 477 | "colab_type": "code", 478 | "colab": { 479 | "base_uri": "https://localhost:8080/", 480 | "height": 217 481 | }, 482 | "outputId": "90d77b7d-fe2b-47b7-c8ee-33c33a53a5a0" 483 | }, 484 | "source": [ 485 | "from keras.layers import Input\n", 486 | "model = Sequential()\n", 487 | "\n", 488 | "#model.add(Input(shape = (50)))\n", 489 | "\n", 490 | "bottleneck = Dense(2, activation = \"relu\", input_shape= (50,))\n", 491 | "\n", 492 | "model.add(bottleneck)\n", 493 | "model.add(Dense(50, activation = \"softmax\"))\n", 494 | "\n", 495 | "\n", 496 | "model.compile(optimizer = \"adam\", loss = \"binary_crossentropy\", metrics=[\"acc\"])\n", 497 | "\n", 498 | "model.summary()\n", 499 | "\n", 500 | "\n" 501 | ], 502 | "execution_count": 27, 503 | "outputs": [ 504 | { 505 | "output_type": "stream", 506 | "text": [ 507 | "_________________________________________________________________\n", 508 | "Layer (type) Output Shape Param # \n", 509 | "=================================================================\n", 510 | "dense_4 (Dense) (None, 2) 102 \n", 511 | "_________________________________________________________________\n", 512 | "dense_5 (Dense) (None, 50) 150 \n", 513 | "=================================================================\n", 514 | "Total params: 252\n", 515 | "Trainable params: 252\n", 516 | "Non-trainable params: 0\n", 517 | "_________________________________________________________________\n" 518 | ], 519 | "name": "stdout" 520 | } 521 | ] 522 | }, 523 | { 524 | "cell_type": "code", 525 | "metadata": { 526 | "id": "PeVqeB6iIv4Y", 527 | "colab_type": "code", 528 | "colab": {} 529 | }, 530 | "source": [ 531 | "hist= model.fit(onehotlabels_x,onehotlabels_y, epochs = 1000, verbose = 0)" 532 | ], 533 | "execution_count": 0, 534 | "outputs": [] 535 | }, 536 | { 537 | "cell_type": "code", 538 | "metadata": { 539 | "id": "X2z7ZsV3J510", 540 | "colab_type": "code", 541 | "colab": { 542 | "base_uri": "https://localhost:8080/", 543 | "height": 110 544 | }, 545 | "outputId": "60282fb9-6698-4b80-d4a8-2472821bc986" 546 | }, 547 | "source": [ 548 | "for key in hist.history.keys():\n", 549 | " print(key)\n", 550 | " print(hist.history[key])" 551 | ], 552 | "execution_count": 35, 553 | "outputs": [ 554 | { 555 | "output_type": "stream", 556 | "text": [ 557 | "loss\n", 558 | "[0.0909116193652153, 0.09083612263202667, 0.09075967222452164, 0.0906822606921196, 0.09060433506965637, 0.09052592515945435, 0.09044709801673889, 0.0903678759932518, 0.09028829634189606, 0.09020835906267166, 0.0901280865073204, 0.09004749357700348, 0.08996658772230148, 0.08988537639379501, 0.08980388939380646, 0.08972211182117462, 0.0896400511264801, 0.08955772966146469, 0.08947513997554779, 0.0893922820687294, 0.08930917084217072, 0.08922582119703293, 0.08914223313331604, 0.08905838429927826, 0.08897431194782257, 0.08888999372720718, 0.08880545198917389, 0.08872068673372269, 0.08863570541143417, 0.08855050057172775, 0.08846507966518402, 0.08837945014238358, 0.08829361200332642, 0.08820755779743195, 0.08812131732702255, 0.08803487569093704, 0.08794824033975601, 0.08786142617464066, 0.08777438849210739, 0.08768720179796219, 0.08759982883930206, 0.08751225471496582, 0.08742452412843704, 0.08733662217855453, 0.08724856376647949, 0.08716032654047012, 0.08707194030284882, 0.08698338270187378, 0.0868946760892868, 0.08680582791566849, 0.08671683073043823, 0.08662769943475723, 0.0865384116768837, 0.08644899725914001, 0.08635945618152618, 0.08626978099346161, 0.08617998659610748, 0.0860900729894638, 0.08600004762411118, 0.08590982854366302, 0.08581911027431488, 0.085728220641613, 0.08563202619552612, 0.08553463220596313, 0.08543634414672852, 0.0853373259305954, 0.08523759990930557, 0.0851341262459755, 0.08502954989671707, 0.0849241241812706, 0.08481801301240921, 0.08471132814884186, 0.0846041589975357, 0.08449659496545792, 0.08438868820667267, 0.08428050577640533, 0.0841720849275589, 0.08406344801187515, 0.08395465463399887, 0.08384574204683304, 0.08373670279979706, 0.08362755924463272, 0.0835183635354042, 0.08340853452682495, 0.08329428732395172, 0.08317898213863373, 0.08306291699409485, 0.0829462930560112, 0.08282919228076935, 0.08271176367998123, 0.08259402960538864, 0.08247607946395874, 0.0823579654097557, 0.08223972469568253, 0.08212138712406158, 0.08200298994779587, 0.08188457041978836, 0.08176615089178085, 0.08164773881435394, 0.08152937144041061, 0.08141104876995087, 0.08129280805587769, 0.08117463439702988, 0.08105657249689102, 0.08093860745429993, 0.08082077652215958, 0.08070306479930878, 0.08058548718690872, 0.0804680660367012, 0.08035080134868622, 0.08023368567228317, 0.08011676371097565, 0.08000000566244125, 0.07988344132900238, 0.07976707071065903, 0.0796508938074112, 0.07953492552042007, 0.07941916584968567, 0.07930363714694977, 0.07918831706047058, 0.0790732353925705, 0.07895837724208832, 0.07884377241134644, 0.07872941344976425, 0.07861529290676117, 0.07850144058465958, 0.07838784158229828, 0.07827451080083847, 0.07816146314144135, 0.0780486911535263, 0.07793618738651276, 0.07782398164272308, 0.07771206647157669, 0.07760044932365417, 0.07748912274837494, 0.07737811654806137, 0.07726740837097168, 0.07715702056884766, 0.0770469531416893, 0.07693720608949661, 0.07682778686285019, 0.07671870291233063, 0.07660994678735733, 0.07650154083967209, 0.07639347016811371, 0.07628576457500458, 0.0761784017086029, 0.07607139647006989, 0.07596474140882492, 0.0758584588766098, 0.07575254142284393, 0.07564698904752731, 0.07554182410240173, 0.0754370242357254, 0.07533261179924011, 0.07522858679294586, 0.07512493431568146, 0.07502168416976929, 0.07491882145404816, 0.07481636106967926, 0.074714295566082, 0.07461263239383698, 0.07451137155294418, 0.07441051304340363, 0.07431007921695709, 0.07421005517244339, 0.07411042600870132, 0.07401122897863388, 0.07391244918107986, 0.07381408661603928, 0.07371614873409271, 0.07361864298582077, 0.07352155447006226, 0.07342489808797836, 0.07332867383956909, 0.07323288172483444, 0.07313752174377441, 0.07304258644580841, 0.07294810563325882, 0.07285405695438385, 0.0727604478597641, 0.07266728579998016, 0.07257456332445145, 0.07248227298259735, 0.07239044457674026, 0.0722990557551384, 0.07220810651779175, 0.07211761176586151, 0.07202755659818649, 0.07193796336650848, 0.0718488097190857, 0.07176011800765991, 0.07167186588048935, 0.0715840756893158, 0.07149673253297806, 0.07140983641147614, 0.07132340222597122, 0.07123741507530212, 0.07115188241004944, 0.07106680423021317, 0.0709821879863739, 0.07089801132678986, 0.07081429660320282, 0.0707310289144516, 0.07064822316169739, 0.07056587189435959, 0.0704839751124382, 0.07040253281593323, 0.07032153010368347, 0.07024098932743073, 0.0701608955860138, 0.07008125633001328, 0.07000207155942917, 0.06992333382368088, 0.0698450431227684, 0.06976721435785294, 0.06968981772661209, 0.06961287558078766, 0.06953638046979904, 0.06946032494306564, 0.06938472390174866, 0.06930956244468689, 0.06923484057188034, 0.0691605657339096, 0.06908673048019409, 0.0690133348107338, 0.06894037127494812, 0.06886785477399826, 0.06879577785730362, 0.068724125623703, 0.06865289807319641, 0.06858211010694504, 0.06851175427436829, 0.06844183057546616, 0.06837232410907745, 0.06830324977636337, 0.06823459267616272, 0.06816636025905609, 0.06809854507446289, 0.06803114712238312, 0.06796417385339737, 0.06789761036634445, 0.06783145666122437, 0.06776571273803711, 0.06770037114620209, 0.0676354467868805, 0.06757092475891113, 0.06750679761171341, 0.06744307279586792, 0.06737974286079407, 0.06731681525707245, 0.06725428253412247, 0.06719213724136353, 0.06713037937879562, 0.06706900149583817, 0.06700801849365234, 0.06694740802049637, 0.06688718497753143, 0.06682732701301575, 0.0667678564786911, 0.0667087510228157, 0.06665001064538956, 0.06659164279699326, 0.0665336325764656, 0.06647598743438721, 0.06641869992017746, 0.06636177003383636, 0.06630519032478333, 0.06624896079301834, 0.06619308143854141, 0.06613755226135254, 0.06608236581087112, 0.06602750718593597, 0.06597299128770828, 0.06591881811618805, 0.06586497277021408, 0.06581146270036697, 0.06575827300548553, 0.06570541113615036, 0.06565286219120026, 0.06560064107179642, 0.06554873287677765, 0.06549713760614395, 0.06544585525989532, 0.06539487838745117, 0.06534420698881149, 0.06529384106397629, 0.06524377316236496, 0.06519400328397751, 0.06514453142881393, 0.06509535759687424, 0.06504645943641663, 0.06499785929918289, 0.06494953483343124, 0.06490149348974228, 0.0648537427186966, 0.0648062527179718, 0.06475904583930969, 0.06471211463212967, 0.06466544419527054, 0.0646190419793129, 0.06457290798425674, 0.06452703475952148, 0.06448142230510712, 0.06443605571985245, 0.06439095735549927, 0.06434610486030579, 0.0643015056848526, 0.06425715237855911, 0.06421304494142532, 0.06416917592287064, 0.06412554532289505, 0.06408216059207916, 0.06403900682926178, 0.0639960914850235, 0.06395339965820312, 0.06391094624996185, 0.06386870890855789, 0.06382670253515244, 0.06378491967916489, 0.06374334543943405, 0.06370200216770172, 0.0636608749628067, 0.0636199563741684, 0.0635792538523674, 0.06353875249624252, 0.06349846720695496, 0.0634583830833435, 0.06341850012540817, 0.06337882578372955, 0.06333934515714645, 0.06330006569623947, 0.06326097995042801, 0.06322208791971207, 0.06318338960409164, 0.06314487755298615, 0.06310655176639557, 0.06306841224431992, 0.06303045898675919, 0.06299269944429398, 0.0629551112651825, 0.06291768699884415, 0.06288046389818192, 0.06284340471029282, 0.06280650943517685, 0.0627698004245758, 0.0627332553267479, 0.06269687414169312, 0.06266066431999207, 0.06262461841106415, 0.06258873641490936, 0.06255301088094711, 0.062517449259758, 0.062482044100761414, 0.06244679540395737, 0.062411703169345856, 0.06237676367163658, 0.06234196946024895, 0.06230733171105385, 0.06227284297347069, 0.062238503247499466, 0.06220429763197899, 0.06217024102807045, 0.06213633343577385, 0.062102556228637695, 0.06206892803311348, 0.06203543394804001, 0.062002070248126984, 0.0619688518345356, 0.06193575635552406, 0.06190280243754387, 0.061869971454143524, 0.06183727830648422, 0.06180470436811447, 0.061772264540195465, 0.06173994764685631, 0.0617077499628067, 0.06167567893862724, 0.061643727123737335, 0.06161189079284668, 0.06158018112182617, 0.061548586934804916, 0.061517104506492615, 0.061485741287469864, 0.06145448610186577, 0.061423350125551224, 0.061392322182655334, 0.0613614022731781, 0.06133059039711952, 0.0612998865544796, 0.06126929074525833, 0.06123879924416542, 0.06120841205120087, 0.06117812544107437, 0.061147935688495636, 0.061117853969335556, 0.061087869107723236, 0.061057981103658676, 0.061028189957141876, 0.060998495668172836, 0.06096889078617096, 0.06093938648700714, 0.060909971594810486, 0.060880646109580994, 0.06085141748189926, 0.060822274535894394, 0.06079322472214699, 0.06076424568891525, 0.060735370963811874, 0.060706574469804764, 0.06067785993218422, 0.06064923107624054, 0.06062068045139313, 0.06059221178293228, 0.0605638287961483, 0.06053552031517029, 0.06050729379057884, 0.060479141771793365, 0.060451067984104156, 0.06042306870222092, 0.06039515137672424, 0.06036729738116264, 0.06033951789140701, 0.06031180918216705, 0.060284171253442764, 0.060256607830524445, 0.0602291114628315, 0.06020168587565422, 0.06017432361841202, 0.06014703959226608, 0.060119811445474625, 0.06009264662861824, 0.06006554514169693, 0.06003851816058159, 0.060011543333530426, 0.059984635561704636, 0.05995778366923332, 0.05993099883198738, 0.05990426614880562, 0.05987759679555893, 0.05985098332166672, 0.05982442945241928, 0.05979793518781662, 0.05977149307727814, 0.05974511057138443, 0.059718772768974304, 0.059692494571208954, 0.05966626852750778, 0.05964009836316109, 0.05961397662758827, 0.059587907046079636, 0.05956188589334488, 0.059535909444093704, 0.0595099963247776, 0.059484124183654785, 0.05945829674601555, 0.05943252146244049, 0.059406790882349014, 0.05938109755516052, 0.059355463832616806, 0.05932987108826637, 0.05930431932210922, 0.059278808534145355, 0.05925334617495537, 0.059227921068668365, 0.05920254811644554, 0.059177201241254807, 0.05915190279483795, 0.05912664905190468, 0.05910142511129379, 0.05907624587416649, 0.05905110761523247, 0.05902600288391113, 0.05900093913078308, 0.058975912630558014, 0.05895092710852623, 0.05892597511410713, 0.058901045471429825, 0.0588761642575264, 0.05885131657123566, 0.0588264986872673, 0.058801718056201935, 0.05877697467803955, 0.058752257376909256, 0.058727577328681946, 0.05870293080806732, 0.05867830663919449, 0.05865371972322464, 0.05862916633486748, 0.058604635298252106, 0.05858014523983002, 0.05855567753314972, 0.05853123962879181, 0.05850683152675629, 0.05848245695233345, 0.058458101004362106, 0.05843377858400345, 0.05840948224067688, 0.0583852119743824, 0.05836097151041031, 0.058336757123470306, 0.058312565088272095, 0.05828839913010597, 0.05826425924897194, 0.058240145444869995, 0.05821605771780014, 0.05819198861718178, 0.0581679493188858, 0.05814393609762192, 0.058119937777519226, 0.05809596925973892, 0.05807201936841011, 0.05804809555411339, 0.05802419036626816, 0.058000314980745316, 0.05797645449638367, 0.05795262008905411, 0.05792880430817604, 0.057905010879039764, 0.05788123607635498, 0.05785748362541199, 0.057833753526210785, 0.057810042053461075, 0.05778634920716286, 0.05776267126202583, 0.0577390231192112, 0.057715389877557755, 0.057691771537065506, 0.05766817927360535, 0.05764459818601608, 0.05762104317545891, 0.05759750306606293, 0.05757398158311844, 0.057550471276044846, 0.05752698704600334, 0.057503510266542435, 0.057480063289403915, 0.05745662376284599, 0.05743321031332016, 0.05740980803966522, 0.05738642066717148, 0.05736304819583893, 0.05733970180153847, 0.057316359132528305, 0.05729304626584053, 0.05726974084973335, 0.05724645406007767, 0.05722317844629288, 0.05719991773366928, 0.057176679372787476, 0.057153455913066864, 0.05713024362921715, 0.05710703879594803, 0.0570838563144207, 0.057060692459344864, 0.05703754350543022, 0.05701439827680588, 0.056991271674633026, 0.056968167424201965, 0.0569450743496418, 0.05692198500037193, 0.056898921728134155, 0.056875865906476974, 0.05685282498598099, 0.05682980269193649, 0.056806791573762894, 0.05678378790616989, 0.05676080286502838, 0.05673782527446747, 0.056714870035648346, 0.05669192597270012, 0.05666898936033249, 0.05664606764912605, 0.05662316456437111, 0.056600265204906464, 0.05657738819718361, 0.05655451864004135, 0.05653166025876999, 0.05650881677865982, 0.05648598447442055, 0.05646316707134247, 0.056440360844135284, 0.056417569518089294, 0.0563947893679142, 0.0563720166683197, 0.0563492625951767, 0.05632651597261429, 0.056303780525922775, 0.056281063705682755, 0.05625835806131363, 0.0562356598675251, 0.05621297284960747, 0.05619030445814133, 0.05616764351725578, 0.056144993752241135, 0.05612235888838768, 0.05609973520040512, 0.05607711896300316, 0.05605452135205269, 0.056031931191682816, 0.056009359657764435, 0.05598679184913635, 0.05596423149108887, 0.05594169721007347, 0.055919162929058075, 0.05589664354920387, 0.055874139070510864, 0.05585164204239845, 0.05582915619015694, 0.055806685239076614, 0.05578422173857689, 0.05576177313923836, 0.05573933571577072, 0.05571690574288368, 0.055694494396448135, 0.05567208677530289, 0.05564969405531883, 0.05562731623649597, 0.055604949593544006, 0.05558259040117264, 0.05556025356054306, 0.05553790554404259, 0.055515583604574203, 0.055493272840976715, 0.05547097325325012, 0.055448684841394424, 0.05542640760540962, 0.055404141545295715, 0.055381886661052704, 0.05535964295268059, 0.055337414145469666, 0.05531518906354904, 0.05529298633337021, 0.055270787328481674, 0.05524859577417374, 0.05522643029689789, 0.05520426481962204, 0.055182114243507385, 0.055159974843263626, 0.05513784661889076, 0.05511573329567909, 0.05509362369775772, 0.055071525275707245, 0.05504944548010826, 0.055027373135089874, 0.05500531196594238, 0.054983269423246384, 0.05496123060584068, 0.054939206689596176, 0.054917193949222565, 0.05489519238471985, 0.05487320199608803, 0.0548512227833271, 0.05482926219701767, 0.05480730161070824, 0.054785359650850296, 0.05476342514157295, 0.0547415092587471, 0.054719604551792145, 0.05469770357012749, 0.05467582121491432, 0.054653946310281754, 0.05463208258152008, 0.0546102374792099, 0.05458839610219002, 0.05456656590104103, 0.054544758051633835, 0.05452295392751694, 0.054501164704561234, 0.054479386657476425, 0.054457616060972214, 0.054435860365629196, 0.054414115846157074, 0.054392386227846146, 0.05437066778540611, 0.054348960518836975, 0.054327260702848434, 0.054305579513311386, 0.054283905774354935, 0.05426224321126938, 0.054240595549345016, 0.05421896278858185, 0.054197344928979874, 0.0541757307946682, 0.054154131561517715, 0.05413254350423813, 0.054110970348119736, 0.05408940464258194, 0.05406785383820534, 0.05404631793498993, 0.05402478948235512, 0.0540032759308815, 0.05398177728056908, 0.05396028235554695, 0.05393880978226662, 0.05391785874962807, 0.05389741435647011, 0.053876955062150955, 0.0538564957678318, 0.05383602902293205, 0.0538155660033226, 0.05379511043429375, 0.053774651139974594, 0.053754206746816635, 0.053733762353658676, 0.05371332913637161, 0.053692907094955444, 0.05367249622941017, 0.0536520890891552, 0.053631700575351715, 0.05361132323741913, 0.05359096825122833, 0.053570620715618134, 0.05355029180645943, 0.053529977798461914, 0.053509671241045, 0.05348939448595047, 0.05346912518143654, 0.0534488782286644, 0.05342864617705345, 0.0534084290266037, 0.05338823422789574, 0.05336805060505867, 0.05334789305925369, 0.05332775041460991, 0.05330762267112732, 0.05328751355409622, 0.053267430514097214, 0.0532473623752594, 0.05322730913758278, 0.05320727825164795, 0.05318726599216461, 0.05316726863384247, 0.05314728990197182, 0.053127337247133255, 0.05310739576816559, 0.05308747664093971, 0.05306757241487503, 0.05304769426584244, 0.05302783101797104, 0.05300798639655113, 0.05298816040158272, 0.052968379110097885, 0.052948713302612305, 0.05292893201112747, 0.05290919169783592, 0.05288952216506004, 0.05286986753344536, 0.05285022035241127, 0.052830588072538376, 0.052810974419116974, 0.05279136821627617, 0.05277177691459656, 0.05275220051407814, 0.052732642740011215, 0.052713099867105484, 0.05269356817007065, 0.05267412215471268, 0.05265462398529053, 0.052635159343481064, 0.05261573940515518, 0.052596334367990494, 0.0525769405066967, 0.052557554095983505, 0.0525381863117218, 0.05251883715391159, 0.05249949172139168, 0.052480172365903854, 0.05246086046099663, 0.0524415597319603, 0.05242229625582695, 0.0524030402302742, 0.05238381773233414, 0.05236460268497467, 0.052345406264066696, 0.05232628434896469, 0.05230708792805672, 0.052287958562374115, 0.05226883292198181, 0.052249737083911896, 0.05223064497113228, 0.05221157148480415, 0.052192505449056625, 0.05217349901795387, 0.052154455333948135, 0.05213546007871628, 0.052116479724645615, 0.052097517997026443, 0.05207855626940727, 0.05205961689352989, 0.05204072594642639, 0.0520218126475811, 0.05200294032692909, 0.05198407545685768, 0.05196523293852806, 0.051946401596069336, 0.05192757770419121, 0.05190877988934517, 0.051890015602111816, 0.05187124386429787, 0.0518525056540966, 0.051833778619766235, 0.05181506648659706, 0.05179636925458908, 0.051777686923742294, 0.0517590194940567, 0.05174044147133827, 0.05172175541520119, 0.051703158766031265, 0.05168456956744194, 0.05166598781943321, 0.051647428423166275, 0.05162888392806053, 0.05161035433411598, 0.05159185826778412, 0.05157338082790375, 0.05155491456389427, 0.05153646320104599, 0.051518019288778305, 0.05149959772825241, 0.051481179893016815, 0.05146278068423271, 0.0514444001019001, 0.05142614245414734, 0.05140772461891174, 0.0513894185423851, 0.05137114226818085, 0.05135288089513779, 0.051334623247385025, 0.051316387951374054, 0.05129815638065338, 0.0512799397110939, 0.05126173421740532, 0.05124354735016823, 0.05122537538409233, 0.05120721459388733, 0.05118907243013382, 0.051170941442251205, 0.051152825355529785, 0.051134731620550156, 0.05111664906144142, 0.05109858512878418, 0.05108070373535156, 0.051062654703855515, 0.05104455724358559, 0.0510266050696373, 0.05100865662097931, 0.05099072679877281, 0.05097281187772751, 0.0509549044072628, 0.05093701556324959, 0.05091913416981697, 0.050901271402835846, 0.050883423537015915, 0.050865598022937775, 0.05084777623414993, 0.05082997679710388, 0.050812192261219025, 0.05079444870352745, 0.05077669769525528, 0.05075898766517639, 0.0507412888109684, 0.0507236085832119, 0.050705939531326294, 0.05068829283118248, 0.05067067965865135, 0.05065307766199112, 0.05063549429178238, 0.05061792582273483, 0.05060037225484848, 0.05058283731341362, 0.05056530609726906, 0.05054779723286629, 0.05053031072020531, 0.050512827932834625, 0.050495363771915436, 0.050478048622608185, 0.05046054720878601, 0.050443168729543686, 0.05042582005262375, 0.050408486276865005, 0.05039116367697716, 0.050373855978250504, 0.050356555730104446, 0.05033928528428078, 0.050322022289037704, 0.050304774194955826, 0.05028754100203514, 0.05027032643556595, 0.05025312677025795, 0.05023594945669174, 0.05021878704428673, 0.05020163953304291, 0.05018451064825058, 0.050167400389909744, 0.0501503087580204, 0.050133269280195236, 0.05011620745062828, 0.05009919032454491, 0.050082191824913025, 0.05006520450115204, 0.05004824325442314, 0.050031356513500214, 0.05001438781619072, 0.04999750107526779, 0.04998062923550606, 0.04996376857161522, 0.04994693025946617, 0.049930110573768616, 0.049913302063941956, 0.04989651218056679, 0.04987974092364311, 0.04986298829317093, 0.04984625428915024, 0.049829646944999695, 0.049812864512205124, 0.049796212464571, 0.04977957159280777, 0.04976295307278633, 0.049746349453926086, 0.049729760736227036, 0.04971319064497948, 0.049696676433086395, 0.049680136144161224, 0.04966364800930023, 0.04964717477560043, 0.04963072016835213, 0.04961428418755531, 0.04959786683320999, 0.049581464380025864, 0.04956508427858353, 0.04954872280359268, 0.04953237995505333, 0.04951605200767517, 0.04949987307190895, 0.04948349669575691, 0.04946725070476532, 0.04945103079080582, 0.04943482205271721, 0.04941864311695099, 0.049402475357055664, 0.04938632994890213, 0.04937021806836128, 0.04935411736369133, 0.049338050186634064, 0.04932200536131859, 0.049305979162454605, 0.04928996413946152, 0.04927397519350052, 0.04925800859928131, 0.0492420569062233, 0.049226127564907074, 0.049210213124752045, 0.0491943284869194, 0.04917850345373154, 0.04916263371706009, 0.04914683476090431, 0.049131039530038834, 0.04911527782678604, 0.04909953102469444, 0.049083806574344635, 0.04906810075044632, 0.049052413552999496, 0.04903675615787506, 0.04902113974094391, 0.04900554195046425, 0.04898996651172638, 0.048974405974149704, 0.04895886406302452, 0.04894334822893143, 0.048927851021289825, 0.04891236871480942, 0.0488969162106514, 0.04888148605823517, 0.048866067081689835, 0.04885077849030495, 0.04883534461259842, 0.04882001876831055, 0.048804737627506256, 0.04878947511315346, 0.04877422749996185, 0.04875899851322174, 0.048743803054094315, 0.048728618770837784, 0.048713501542806625, 0.04869833588600159, 0.04868324473500252, 0.04866817221045494, 0.048653118312358856, 0.048638079315423965, 0.04862307012081146, 0.04860807582736015, 0.04859311133623123, 0.048578158020973206, 0.04856323450803757, 0.048548340797424316, 0.04853349179029465, 0.04851866513490677, 0.04850386083126068, 0.04848907142877579]\n", 559 | "acc\n", 560 | "[0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863, 0.9800000190734863]\n" 561 | ], 562 | "name": "stdout" 563 | } 564 | ] 565 | }, 566 | { 567 | "cell_type": "code", 568 | "metadata": { 569 | "id": "auKiG4syKLMA", 570 | "colab_type": "code", 571 | "colab": { 572 | "base_uri": "https://localhost:8080/", 573 | "height": 199 574 | }, 575 | "outputId": "119901d5-478c-47a8-f217-a8fd4ee9044e" 576 | }, 577 | "source": [ 578 | "model = Sequential()\n", 579 | "model.add(bottleneck)\n", 580 | "model.compile(optimizer = \"adam\", loss = \"binary_crossentropy\", metrics=[\"acc\"])\n", 581 | "test = model.predict(oh_enc)\n", 582 | "print(test)\n", 583 | "#\"kral kralice adamdir kadindir sozler\"" 584 | ], 585 | "execution_count": 40, 586 | "outputs": [ 587 | { 588 | "output_type": "stream", 589 | "text": [ 590 | "[[1.5450847e+00 1.5972571e+00]\n", 591 | " [2.0365965e+00 2.1423731e+00]\n", 592 | " [6.6101551e-05 2.2302895e+00]\n", 593 | " [4.3828258e-01 1.7850003e+00]\n", 594 | " [1.9542186e+00 3.1667787e-01]]\n", 595 | "[[ 1]\n", 596 | " [48]\n", 597 | " [10]\n", 598 | " [37]\n", 599 | " [11]]\n" 600 | ], 601 | "name": "stdout" 602 | } 603 | ] 604 | }, 605 | { 606 | "cell_type": "code", 607 | "metadata": { 608 | "id": "koojeCrvKtMy", 609 | "colab_type": "code", 610 | "colab": {} 611 | }, 612 | "source": [ 613 | "" 614 | ], 615 | "execution_count": 0, 616 | "outputs": [] 617 | } 618 | ] 619 | } -------------------------------------------------------------------------------- /week4/Project Model.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": {}, 7 | "outputs": [], 8 | "source": [ 9 | "import pickle\n", 10 | "import numpy as np\n", 11 | "import tensorflow\n", 12 | "import random\n", 13 | "import matplotlib.pyplot as plt\n", 14 | "from matplotlib.pyplot import Circle" 15 | ] 16 | }, 17 | { 18 | "cell_type": "code", 19 | "execution_count": 2, 20 | "metadata": {}, 21 | "outputs": [ 22 | { 23 | "name": "stdout", 24 | "output_type": "stream", 25 | "text": [ 26 | "(9432, 290, 334, 3)\n", 27 | "padded\n", 28 | "(9432, 21, 2)\n", 29 | "labels\n", 30 | "(9432, 4, 1)\n", 31 | "blabels\n" 32 | ] 33 | } 34 | ], 35 | "source": [ 36 | "with open('data_hand_pose.pickle','rb') as pickle_file_to_load:\n", 37 | " mydict = pickle.load(pickle_file_to_load)\n", 38 | " \n", 39 | "for key in mydict.keys():\n", 40 | " print(mydict[key].shape)\n", 41 | " print(key) " 42 | ] 43 | }, 44 | { 45 | "cell_type": "code", 46 | "execution_count": 3, 47 | "metadata": {}, 48 | "outputs": [], 49 | "source": [ 50 | "inputs = mydict['padded']\n", 51 | "labels = mydict['labels']\n", 52 | "blabels = mydict['blabels']\n" 53 | ] 54 | }, 55 | { 56 | "cell_type": "code", 57 | "execution_count": 4, 58 | "metadata": {}, 59 | "outputs": [ 60 | { 61 | "name": "stdout", 62 | "output_type": "stream", 63 | "text": [ 64 | "(9432, 4)\n", 65 | "(9432, 42)\n" 66 | ] 67 | } 68 | ], 69 | "source": [ 70 | "blabels = np.reshape(blabels,(blabels.shape[0],blabels.shape[1]*blabels.shape[2]))\n", 71 | "print(blabels.shape)\n", 72 | "\n", 73 | "labels = labels.reshape((labels.shape[0],labels.shape[1]*labels.shape[2]))\n", 74 | "print(labels.shape)" 75 | ] 76 | }, 77 | { 78 | "cell_type": "code", 79 | "execution_count": 5, 80 | "metadata": {}, 81 | "outputs": [], 82 | "source": [ 83 | "mydict = None" 84 | ] 85 | }, 86 | { 87 | "cell_type": "code", 88 | "execution_count": 6, 89 | "metadata": {}, 90 | "outputs": [ 91 | { 92 | "name": "stderr", 93 | "output_type": "stream", 94 | "text": [ 95 | "Using TensorFlow backend.\n" 96 | ] 97 | } 98 | ], 99 | "source": [ 100 | "import keras\n", 101 | "from keras.models import Sequential\n", 102 | "from keras.layers import Dense, Dropout, Flatten, Conv2D, BatchNormalization" 103 | ] 104 | }, 105 | { 106 | "cell_type": "code", 107 | "execution_count": 7, 108 | "metadata": {}, 109 | "outputs": [], 110 | "source": [ 111 | "model = Sequential()\n", 112 | "\n", 113 | "model.add(BatchNormalization())\n", 114 | "model.add(Conv2D(32, padding = \"VALID\", kernel_initializer = 'glorot_uniform', kernel_size = [4,4], strides=[2,2],input_shape=inputs.shape[1:4],activation='relu'))\n", 115 | "model.add(Dropout(0.25))\n", 116 | "\n", 117 | "model.add(BatchNormalization())\n", 118 | "model.add(Conv2D(64, padding = \"VALID\", kernel_initializer = 'glorot_uniform', kernel_size = [4,4], strides=[2,2],input_shape=inputs.shape[1:4],activation='relu'))\n", 119 | "model.add(Dropout(0.25))\n", 120 | "\n", 121 | "\n", 122 | "model.add(BatchNormalization())\n", 123 | "model.add(Conv2D(128, padding = \"VALID\", kernel_initializer = 'glorot_uniform', kernel_size = [4,4], strides=[2,2],input_shape=inputs.shape[1:4],activation='relu'))\n", 124 | "model.add(Dropout(0.25))\n", 125 | "\n", 126 | "model.add(Flatten())\n", 127 | "model.add(BatchNormalization())\n", 128 | "model.add(Dense(128,activation='relu'))\n", 129 | "model.add(Dropout(0.25))\n", 130 | "model.add(Dense(42,activation='relu'))" 131 | ] 132 | }, 133 | { 134 | "cell_type": "code", 135 | "execution_count": 8, 136 | "metadata": {}, 137 | "outputs": [], 138 | "source": [ 139 | "model.compile(loss='mse',optimizer=keras.optimizers.Adam(lr=0.0001))\n" 140 | ] 141 | }, 142 | { 143 | "cell_type": "code", 144 | "execution_count": 12, 145 | "metadata": {}, 146 | "outputs": [ 147 | { 148 | "name": "stdout", 149 | "output_type": "stream", 150 | "text": [ 151 | "_________________________________________________________________\n", 152 | "Layer (type) Output Shape Param # \n", 153 | "=================================================================\n", 154 | "batch_normalization_1 (Batch (None, 290, 334, 3) 12 \n", 155 | "_________________________________________________________________\n", 156 | "conv2d_1 (Conv2D) (None, 144, 166, 32) 1568 \n", 157 | "_________________________________________________________________\n", 158 | "dropout_1 (Dropout) (None, 144, 166, 32) 0 \n", 159 | "_________________________________________________________________\n", 160 | "batch_normalization_2 (Batch (None, 144, 166, 32) 128 \n", 161 | "_________________________________________________________________\n", 162 | "conv2d_2 (Conv2D) (None, 71, 82, 64) 32832 \n", 163 | "_________________________________________________________________\n", 164 | "dropout_2 (Dropout) (None, 71, 82, 64) 0 \n", 165 | "_________________________________________________________________\n", 166 | "batch_normalization_3 (Batch (None, 71, 82, 64) 256 \n", 167 | "_________________________________________________________________\n", 168 | "conv2d_3 (Conv2D) (None, 34, 40, 128) 131200 \n", 169 | "_________________________________________________________________\n", 170 | "dropout_3 (Dropout) (None, 34, 40, 128) 0 \n", 171 | "_________________________________________________________________\n", 172 | "flatten_1 (Flatten) (None, 174080) 0 \n", 173 | "_________________________________________________________________\n", 174 | "batch_normalization_4 (Batch (None, 174080) 696320 \n", 175 | "_________________________________________________________________\n", 176 | "dense_1 (Dense) (None, 128) 22282368 \n", 177 | "_________________________________________________________________\n", 178 | "dropout_4 (Dropout) (None, 128) 0 \n", 179 | "_________________________________________________________________\n", 180 | "dense_2 (Dense) (None, 42) 5418 \n", 181 | "=================================================================\n", 182 | "Total params: 23,150,102\n", 183 | "Trainable params: 22,801,744\n", 184 | "Non-trainable params: 348,358\n", 185 | "_________________________________________________________________\n" 186 | ] 187 | } 188 | ], 189 | "source": [ 190 | "model.summary()" 191 | ] 192 | }, 193 | { 194 | "cell_type": "code", 195 | "execution_count": 10, 196 | "metadata": {}, 197 | "outputs": [ 198 | { 199 | "name": "stdout", 200 | "output_type": "stream", 201 | "text": [ 202 | "Train on 8500 samples, validate on 932 samples\n", 203 | "Epoch 1/10\n", 204 | "8500/8500 [==============================] - 62s 7ms/step - loss: 5887.7169 - val_loss: 2574.5552\n", 205 | "Epoch 2/10\n", 206 | "8500/8500 [==============================] - 55s 6ms/step - loss: 2327.2764 - val_loss: 912.9719\n", 207 | "Epoch 3/10\n", 208 | "8500/8500 [==============================] - 54s 6ms/step - loss: 1403.5591 - val_loss: 512.0335\n", 209 | "Epoch 4/10\n", 210 | "8500/8500 [==============================] - 55s 6ms/step - loss: 1051.5876 - val_loss: 405.0850\n", 211 | "Epoch 5/10\n", 212 | "8500/8500 [==============================] - 55s 6ms/step - loss: 875.0988 - val_loss: 389.6118\n", 213 | "Epoch 6/10\n", 214 | "8500/8500 [==============================] - 55s 7ms/step - loss: 772.2782 - val_loss: 367.5705\n", 215 | "Epoch 7/10\n", 216 | "8500/8500 [==============================] - 55s 7ms/step - loss: 682.4325 - val_loss: 410.8378\n", 217 | "Epoch 8/10\n", 218 | "8500/8500 [==============================] - 55s 7ms/step - loss: 613.0342 - val_loss: 404.8070\n", 219 | "Epoch 9/10\n", 220 | "8500/8500 [==============================] - 55s 6ms/step - loss: 565.3546 - val_loss: 389.7118\n", 221 | "Epoch 10/10\n", 222 | "8500/8500 [==============================] - 55s 6ms/step - loss: 532.7575 - val_loss: 463.7020\n" 223 | ] 224 | }, 225 | { 226 | "data": { 227 | "text/plain": [ 228 | "" 229 | ] 230 | }, 231 | "execution_count": 10, 232 | "metadata": {}, 233 | "output_type": "execute_result" 234 | } 235 | ], 236 | "source": [ 237 | "model.fit(inputs[:8500],labels[:8500],epochs=10,batch_size=64,verbose=1,validation_data=(inputs[8500:],labels[8500:]))" 238 | ] 239 | }, 240 | { 241 | "cell_type": "code", 242 | "execution_count": 29, 243 | "metadata": {}, 244 | "outputs": [], 245 | "source": [ 246 | "model.save('modelim.h5')" 247 | ] 248 | }, 249 | { 250 | "cell_type": "code", 251 | "execution_count": 43, 252 | "metadata": {}, 253 | "outputs": [ 254 | { 255 | "data": { 256 | "image/png": "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\n", 257 | "text/plain": [ 258 | "
" 259 | ] 260 | }, 261 | "metadata": { 262 | "needs_background": "light" 263 | }, 264 | "output_type": "display_data" 265 | } 266 | ], 267 | "source": [ 268 | "randomsayi = random.randint(8500,9300)\n", 269 | "\n", 270 | "preds = model.predict(inputs[randomsayi:randomsayi+1])\n", 271 | "\n", 272 | "fig, ax = plt.subplots(1)\n", 273 | "ax.set_aspect('equal')\n", 274 | "\n", 275 | "ax.imshow(inputs[randomsayi])\n", 276 | "\n", 277 | "for xx, yy in preds[0].reshape((21,2)):\n", 278 | " circ = Circle((xx,yy),2,color='red')\n", 279 | " ax.add_patch(circ)\n", 280 | " " 281 | ] 282 | } 283 | ], 284 | "metadata": { 285 | "kernelspec": { 286 | "display_name": "Python3 (jupyterwork)", 287 | "language": "python", 288 | "name": "jupyterwork" 289 | }, 290 | "language_info": { 291 | "codemirror_mode": { 292 | "name": "ipython", 293 | "version": 3 294 | }, 295 | "file_extension": ".py", 296 | "mimetype": "text/x-python", 297 | "name": "python", 298 | "nbconvert_exporter": "python", 299 | "pygments_lexer": "ipython3", 300 | "version": "3.6.8" 301 | } 302 | }, 303 | "nbformat": 4, 304 | "nbformat_minor": 2 305 | } 306 | --------------------------------------------------------------------------------