{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Cifar 10 CNN-el" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 1.) Inicializáló rész" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Használjuk fel az eddigi inicializációt megint, ami most módosulni fog, hogy beimportálunk olyan rétegeket is a Keras.layers-ből, melyek elengedhetetlenek egy konvolúciós hálóhoz (Conv2D, Pooling, stb.)" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Using TensorFlow backend.\n" ] } ], "source": [ "import tensorflow as tf\n", "from keras import backend as K\n", "config = tf.ConfigProto()\n", "config.gpu_options.per_process_gpu_memory_fraction=0.1\n", "session = tf.Session(config=config) # Letrehozunk egy TF session-t a megfelelo mem. korlattal\n", "K.set_session(session) # atadjuk azt a Kerasnak" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import math\n", "from keras.models import Model\n", "from keras.layers import Input, Dense, Flatten, Conv2D, MaxPooling2D \n", "from keras.layers import Concatenate, Lambda, Average, Add, Dropout\n", "from keras.optimizers import SGD\n", "from keras.callbacks import ModelCheckpoint, EarlyStopping\n", "from keras.utils import to_categorical\n", "from matplotlib import pyplot as plt\n", "from random import sample as RS\n", "from keras.metrics import top_k_categorical_accuracy\n", "\n", "def inTop3(x,y):\n", " return(top_k_categorical_accuracy(x,y,k=3))" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "from keras.datasets import cifar10\n", "\n", "def mintak_cifar10():\n", " (x_tan,y_tan),(x_tst,y_tst)=cifar10.load_data()\n", " x_tan=x_tan.astype('float32')/255.0\n", " x_tst=x_tst.astype('float32')/255.0\n", " classes=['airplane', 'auto', 'bird', 'cat', 'deer', 'dog', 'frog', 'horse', 'ship', 'truck']\n", " idx=RS(set(range(y_tan.size)),5)\n", " print('Mintakepek es a cimkeik: '+str([x[0] for x in y_tan[idx]]))\n", " print('Cimkehez tartozo osztalyok: '+str([classes[x[0]] for x in y_tan[idx]]))\n", " \n", " (f, sf)=plt.subplots(1, 5)\n", " f.set_size_inches(16, 6)\n", " \n", " for i in range(5):\n", " img = x_tan[idx[i]]\n", " sf[i].imshow(img)\n", " plt.show()\n", " \n", " y_tan=to_categorical(y_tan).astype('float32')\n", " y_tst=to_categorical(y_tst).astype('float32')\n", " return(x_tan,y_tan,x_tst,y_tst,classes)\n", "\n", "def halo_mentes(model,nev):\n", " model_json=model.to_json()\n", " with open(nev+'.json','w') as json_file:\n", " json_file.write(model_json)\n", " model.save_weights(nev+'.hdf5')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Olvassuk be az adathalmazt" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Mintakepek es a cimkeik: [6, 6, 6, 2, 9]\n", "Cimkehez tartozo osztalyok: ['frog', 'frog', 'frog', 'bird', 'truck']\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "(x_tan,y_tan,x_tst,y_tst,cimke)=mintak_cifar10()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 2.) Háló konstrukciója és tanítása" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Önálló feladat - egészítsük ki a konvolúciós háló struktúráját definiáló függvényt" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A háló architetkrúája az alábbiak szerint nézzen ki:\n", "- 4db 2D konvolúciós réteg 32 db 3×3-as konvolúciós / 5×5-ös konvolúció felváltva, ReLu aktivációval, azonos méretűre paddeléssel\n", "- 4×4-es MaxPooling réteg\n", "- 128 neuront tartalmazó teljesen összekötött réteg ReLu nemlinearitással\n", "- 10 neuront tartalmazó teljesen összekötött réteg softmax nemlinearitással\n", "\n", "Segítség: érdemes felhasználni az eddigi struktúra definiálásokat, valamint a Keras rétegek dokumentációja - https://keras.io/layers/core/\n" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "def get_CNN(x_tst,y_tst):\n", " bem= Input(shape=x_tst[1].shape, dtype='float32')\n", " x=Conv2D(filters=32, kernel_size=(3, 3), activation='relu', padding='same')(bem)\n", " x=Conv2D(filters=32, kernel_size=(5, 5), activation='relu', padding='same')(x)\n", " x=Conv2D(filters=32, kernel_size=(3, 3), activation='relu', padding='same')(x)\n", " x=Conv2D(filters=32, kernel_size=(5, 5), activation='relu', padding='same')(x)\n", " x=MaxPooling2D(pool_size=(4, 4))(x)\n", " y=Flatten()(x)\n", " y=Dense(128, activation='relu')(y)\n", " y=Dense(10, activation='softmax')(y)\n", " \n", " model = Model(inputs=bem, outputs=y)\n", " model.compile(optimizer=SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True), loss='categorical_crossentropy', metrics=['accuracy', inTop3])\n", " print(model.summary())\n", " \n", " return model" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Használjuk fel az előző notebookban már megírt tanító függvényünket: korai leállás a legjobb validációs eredményhez tartozó háló súlyainak a visszatöltésével." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "def tanitas_earlystop(model, x_tan, y_tan, epn, tol):\n", " \n", " model_checkpoint = ModelCheckpoint('CNN.hdf5', monitor='val_loss', verbose=1, save_best_only=True)\n", " earlystop=EarlyStopping(monitor='val_loss', patience=tol)\n", " hst=model.fit(x=x_tan, y=y_tan, verbose=1, batch_size=32, epochs=epn, callbacks=[earlystop, model_checkpoint], validation_split=0.1)\n", " model.load_weights('CNN.hdf5')\n", " \n", " plt.title('Tanito gorbek')\n", " plt.xlabel('Epoch')\n", " plt.ylabel('Loss')\n", " \n", " epn=len(hst.history['loss'])\n", " \n", " epi=np.linspace(1,epn,epn)\n", " plt.plot(epi, hst.history['loss'], 'b-', epi, hst.history['val_loss'], 'r-')\n", " plt.legend(['tanito', 'validacios'], loc='upper left')\n", " plt.show()\n", " return model" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Hozzuk létre, és tanítsuk be a CNN hálót." ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "_________________________________________________________________\n", "Layer (type) Output Shape Param # \n", "=================================================================\n", "input_1 (InputLayer) (None, 32, 32, 3) 0 \n", "_________________________________________________________________\n", "conv2d_1 (Conv2D) (None, 32, 32, 32) 896 \n", "_________________________________________________________________\n", "conv2d_2 (Conv2D) (None, 32, 32, 32) 25632 \n", "_________________________________________________________________\n", "conv2d_3 (Conv2D) (None, 32, 32, 32) 9248 \n", "_________________________________________________________________\n", "conv2d_4 (Conv2D) (None, 32, 32, 32) 25632 \n", "_________________________________________________________________\n", "max_pooling2d_1 (MaxPooling2 (None, 8, 8, 32) 0 \n", "_________________________________________________________________\n", "flatten_1 (Flatten) (None, 2048) 0 \n", "_________________________________________________________________\n", "dense_1 (Dense) (None, 128) 262272 \n", "_________________________________________________________________\n", "dense_2 (Dense) (None, 10) 1290 \n", "=================================================================\n", "Total params: 324,970\n", "Trainable params: 324,970\n", "Non-trainable params: 0\n", "_________________________________________________________________\n", "None\n", "Train on 45000 samples, validate on 5000 samples\n", "Epoch 1/15\n", "45000/45000 [==============================] - 18s 392us/step - loss: 1.6085 - acc: 0.4167 - inTop3: 0.7283 - val_loss: 1.2428 - val_acc: 0.5584 - val_inTop3: 0.8544\n", "\n", "Epoch 00001: val_loss improved from inf to 1.24276, saving model to CNN.hdf5\n", "Epoch 2/15\n", "45000/45000 [==============================] - 22s 491us/step - loss: 1.0909 - acc: 0.6131 - inTop3: 0.8804 - val_loss: 1.2157 - val_acc: 0.5876 - val_inTop3: 0.8470\n", "\n", "Epoch 00002: val_loss improved from 1.24276 to 1.21572, saving model to CNN.hdf5\n", "Epoch 3/15\n", "45000/45000 [==============================] - 23s 519us/step - loss: 0.9134 - acc: 0.6791 - inTop3: 0.9120 - val_loss: 0.9404 - val_acc: 0.6724 - val_inTop3: 0.9094\n", "\n", "Epoch 00003: val_loss improved from 1.21572 to 0.94043, saving model to CNN.hdf5\n", "Epoch 4/15\n", "45000/45000 [==============================] - 24s 526us/step - loss: 0.7960 - acc: 0.7199 - inTop3: 0.9315 - val_loss: 0.8512 - val_acc: 0.7046 - val_inTop3: 0.9226\n", "\n", "Epoch 00004: val_loss improved from 0.94043 to 0.85123, saving model to CNN.hdf5\n", "Epoch 5/15\n", "45000/45000 [==============================] - 24s 522us/step - loss: 0.7023 - acc: 0.7527 - inTop3: 0.9459 - val_loss: 0.9648 - val_acc: 0.6790 - val_inTop3: 0.9076\n", "\n", "Epoch 00005: val_loss did not improve from 0.85123\n", "Epoch 6/15\n", "45000/45000 [==============================] - 24s 523us/step - loss: 0.6183 - acc: 0.7800 - inTop3: 0.9566 - val_loss: 0.9361 - val_acc: 0.6842 - val_inTop3: 0.9138\n", "\n", "Epoch 00006: val_loss did not improve from 0.85123\n", "Epoch 7/15\n", "45000/45000 [==============================] - 23s 521us/step - loss: 0.5559 - acc: 0.8026 - inTop3: 0.9641 - val_loss: 0.9413 - val_acc: 0.7058 - val_inTop3: 0.9214\n", "\n", "Epoch 00007: val_loss did not improve from 0.85123\n", "Epoch 8/15\n", "45000/45000 [==============================] - 19s 432us/step - loss: 0.4953 - acc: 0.8244 - inTop3: 0.9716 - val_loss: 1.0222 - val_acc: 0.6930 - val_inTop3: 0.9170\n", "\n", "Epoch 00008: val_loss did not improve from 0.85123\n", "Epoch 9/15\n", "45000/45000 [==============================] - 17s 375us/step - loss: 0.4500 - acc: 0.8414 - inTop3: 0.9778 - val_loss: 1.1525 - val_acc: 0.6774 - val_inTop3: 0.9092\n", "\n", "Epoch 00009: val_loss did not improve from 0.85123\n" ] }, { "data": { "image/png": "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664DYPLkyUybNo2RI0ceUkI7v72Pn3zySapUqcKSJUtYuHAhnTt3zn7svvvuo06dOuzfv59evXqxcOFCWrduzeDBg3nttdfo2rUr27dvp3Llygdd86677qJTp068/fbbzJw5k0svvZQFCxbw0EMPMW7cOHr06MHOnTupVJQ64s65uBZ/SaGYkpMtKezda7OSiqJTp06sX7+e1atXs2HDBmrXrk3Dhg256aabmDNnDuXKlcsuod2wYcM8rzFnzpzssYCUlBRSUlKyH5s8eTITJkxg3759rFmzhm+//RYRoVGjRnTt2hWAGjVqHHLNTz/9lDfeeAOA0047jU2bNrF9+3Z69OjBzTffzNChQzn33HNp2rRp0X5h51zcir+kUFjt7HyUA9YttXGFlJQ8WguFuOCCC5gyZQpr165l8ODBBZbQLoqff/6Zhx56iHnz5lG7dm0uv/zyYl0npzFjxjBgwADef/99evTowbRp04pcuM85F598TCGHww6z6ambNhX93MGDB/Pqq68yZcoULrjggiKX0D755JN55ZVXAFi0aFF2///27dupWrUqNWvWZN26dXzwwQcAHHPMMaxZs4Z58+YBsGPHDvbt23fQNU866SRefvllAGbNmkW9evWoUaMGP/30E+3bt2f06NHZVV2dcw7isaVQAtWqHZieWq9e0aqntm3blh07dtCkSRMaNWrE0KFDOeuss8IuoX3ttddyxRVX0KZNG9q0aUOXLl0A6NChA506daJ169Y0a9aMHj16AFChQgVee+01brjhBjIyMqhcuTIzZsw46Jp33303V155JSkpKVSpUoXnn38egLFjx/Lxxx9Trlw52rZtS//+/YvwV3LOxbOELJ1dkI0bYflyOOaY0p2eGou8dLZz8cNLZxdTnTpQvjyEtlV2zrmE4kkhl3LloH592LoVdu8OOhrnnCtdcZMUItkNVr++fU3kvRbKWreicy4y4iIpVKpUiU2bNkXsjaxCBahd28YX9u+PyCXLFFVl06ZNvqjNuQQUF7OPmjZtSnp6OhsiuDHC7t02rjB/fmIOOFeqVMkXtTmXgOIiKSQnJ9OyZcuIXlMVrrrK9nFevLho01Odc66siovuo2gQgZEjYckS+OijoKNxzrnS4UmhAIMHW1ntRx8NOhLnnCsdnhQKULEijBgB770HS5cGHY1zzkVf1JKCiDwjIutFZFEhx3UVkX0ikvcWZAEbMcL2WsixXYJzzsWtaLYUngP6FXSAiCQBfwOmRzGOEmnUCC68EJ55BnwvGudcvItaUlDVOcDmQg67AXgDiOllYqNGwfbtEKon55xzcSuwMQURaQKcAzwZxrHDRSRNRNIiuRYhXMcdB926weOPQ2ZmqT+9c86VmiAHmscCo1W10LdZVZ2gqqmqmlo/qwZFKRs5En74AabHbEeXc86VXJBJIRV4VUSWA+cD40Xk7ADjKdD559v4gk9Pdc7Fs8CSgqq2VNUWqtoCmAL8n6q+HVQ8halQAa69FqZOhe+/Dzoa55yLjmhOSZ0EfAYcIyLpIjJMREaIyIhoPWe0DR9uyeGJJ4KOxDnnoiMudl4rTZddBm++CenpULNmYGE451yR+M5rUTJyJOzcCc8+G3QkzjkXeZ4UiqhLF+jRw6anJuJeC865+OZJoRhGjoRly+CDD4KOxDnnIsuTQjGccw40aeLTU51z8ceTQjEkJ8N118GMGfDtt0FH45xzkeNJoZiuvtpKaz/+eNCROOdc5HhSKKZ69WDoUHjhBdiyJehonHMuMjwplMDIkbaH89NPBx2Jc85FhieFEujQAU45xVY4+/RU51w88KRQQiNHwooV8O67QUfinHMl50mhhAYOhMMP9+mpzrn44EmhhMqXh+uvh1mzYOHCoKNxzrmS8aQQAcOGQeXKPj3VOVf2eVKIgDp14JJL4KWXYNOmoKNxzrni86QQITfcALt2wcSJQUfinHPF50khQtq1g169YNw42Lcv6Gicc654PClE0MiRtvnO2zG7qahzzhXMk0IEDRgALVv69FTnXNnlSSGCkpJseuqnn8KXXwYdjXPOFV3iJIWdO2HVKsjMjOrTXHklVK3q01Odc2VT+aADKDXTpsH559tmCM2aQfPmed+aNYMKFYr9NLVqwWWXwVNPwd/+Bg0aRPB3cM65KEucpNC5Mzz5JCxfbsWKVqyA6dNhzRpQPXCcCDRqdGiyaNHiwPdVqxb4VDfcAOPHw4QJcPvtUf2tnHMuokRzviGWAampqZqWlha5C+7ZAytXHkgUuW8rV8LevQefU7du/i2N5s2hTh369RcWLrRLJCdHLlznnCsOEZmvqqmFHZc4LYX8VKgArVrZLS/798PatXknjO++s26p3347+JyqVXm9bnM+WdOc5Wc056heuZJGo0ZQLnGGc5xzZYcnhcIkJUGTJnY74YRDH1e12ha5Eka15Stovm4FDWbNhRmbDz4n97hG27Y2balSpdL5nZxzLh9RSwoi8gxwJrBeVdvl8fhQYDQgwA7gWlX9OlrxRI2I7c1Zrx506XLgbuCjx2DUKJj38U5S6+fTPTV9Ojz3HCxaBM8+a9dzzrmARG1MQUROBnYCL+STFE4AlqjqFhHpD9ytqt0Ku27ExxSiaPt2aNoUBg2CF18s4MC774Y//xnGjrUs4pxzERbumELUOrZVdQ6wuYDH/6eqWVvefw40jVYsQalRA664Al57zYYl8nXnnXD22XDLLfDRR6UWn3PO5RYro53DgA/ye1BEhotImoikbdiwoRTDKrnrr7fJS//8ZwEHlSsHL7wArVvDhRfCsmWlFp9zzuUUeFIQkVOxpDA6v2NUdYKqpqpqav369UsvuAg46ig44wxLCrt3F3Bg9epWSS8z01oNO3eWWozOOZcl0KQgIinAU8AgVY3b7WlGjYJ16+D11ws58Mgjra9p8WK4/PKDF9U551wpCCwpiMjhwJvAJar6Q1BxlIY+faxn6NFHw3if79sX/v53eOMNuO++UonPOeeyRC0piMgk4DPgGBFJF5FhIjJCREaEDrkTqAuMF5EFIlI2phQVg4iVvkhLg88/D+OEm2+Giy+GO+6Ad96JenzOOZfFy1yUkp07bXpq//4waVIYJ2RkwEknwQ8/wNy50KZN1GN0zsWvwKekuoNVqwbDhsGUKVbBu1CVK8Nbb9nXQYNg69aox+icc54UStF111kppSefDPOEZs1sbGH5crjoIjvZOZd4Vq6EIUPs/SDKPCmUoiOOgLPOgn/9C3btCvOkE0+EJ56AqVPhj3+ManzOuRiTkQF/+Qsccwz8+9+FrIKNDE8KpWzUKNi4EV59tQgnDR8OI0bYrKSwBiScc2WaqnUfH3usVTwYMMCqMl93XdSf2pNCKTv1VCuKGtb01JwefdRaDcOG+QbQzsWzxYttHvu559pg5MyZtsipefNSeXpPCqVMBEaOhAUL4NNPi3BihQo2Sl2vnq14Xr8+ajE65wKwdSvceCN06GAf/J54Ar76yj5JliJPCgG4+GKoXRsee6yIJx52mDUpN2yACy44dEc451zZs38/TJxoNXEef9y6i3/4wbqKypf+ljeeFAJQpQpcfbW9v//ySxFP7tIFnn4a5syxTxXOubLrv/+Frl0tEbRpA/Pn2wbv9eoFFpInhYD83//ZmML48cU4+Xe/g1tvtZMnTox4bM65KFu1yroMTjzRWv6vvgqzZ0PHjkFH5kkhKM2b29DAxImHbvEclvvvh9NPtybmf/8b8ficc1Gwaxf89a82xXTKFLj9dptVNHhwzOy66EkhQKNGwebN8MorxTg5KcmmpzZvDuedB+npEY/PORchqlbHrG1b+NOfrPDlkiW2BqFq1aCjO4gnhQCddJJNNCjy9NQstWvbgpZff4VzzrGFLs652LJkCfTrZ+VqKlWCDz+EN9+Eli2DjixPnhQCJGKthUWLrIpqsSYTHXssvPSSlWC95hrfg8G5WLFtm1U8TkmxopaPPmpz0Xv3DjqyAnlSCNill8Lvfw/jxkGvXsVcxT5oEPz5z/DiizB2bMRjdM4VQWYmPPMMHH20vR6vvBJ+/NEWKCUnBx1doTwpBCwpCR580IYH0tJsxmlYey7kdvvttgLy97+35qlzrvR99hl062aVB4480l7U//oXlKFthMNKCiLSSkQqhr7vKSIjRaRWdENLLEOG2P9TxYpwyinw1FNFvEC5cvD889adNHgw/PRTVOJ0zuVhzRq47DI44QRYvRpeftlKFnTuHHRkRRZuS+ENYL+IHAlMAJoBxZkz4wrQoYN9sOjZ0xa3XXMN7N5dhAtUqwZvv23fDxoEO3ZEI0znXJbdu61Q5dFH21qDP/wBvv/e1hLFyBTTogo3KWSq6j7gHOBxVb0VaBS9sBJXnTrw/vv2vzVhgiWI1auLcIFWrWDyZJvxcNll1r/pnIu8996Ddu1g9Gg47TT49ltbg1CtWtCRlUi4SWGviFwEXAb8J3Rf7I+YlFFJSfa/9frr8M03Ns5QpPVpvXvDQw9ZHY17741anM4lpO+/hzPOgDPPtBfr1Kk2NbxVq6Aji4hwk8IVwPHAfar6s4i0BF6MXlgO4PzzbSZb9erWYhg/vggzTm+8ES65BO66y/5hnXMls327lZdp394+pf3jH7BwoVUWiCOiRZzXLiK1gWaqujA6IRUsNTVV09LSgnjqwGzdamVS3nsPrrjCkkOlSmGcmJFho9ZLltiUprZtox6rc3EnM9Ome48ebSXrr7wS7rvPqhaXISIyX1VTCzsu3NlHs0SkhojUAb4EJorIwyUN0oWnVi1bIX/nnfDss7YSeuXKME6sXNlWTlataoWWtmyJeqzOxZUvvoDjj4fLL7cVyHPn2tTAMpYQiiLc7qOaqrodOBd4QVW7AbG9LC/OlCtn69Peftu6NLt0saKKhWra1BLDihU273XfvqjH6lyZt3attQi6dbP69i+8cKDMdZwLNymUF5FGwIUcGGh2ARg0yD681K1rK6DDqpt0wgnW5zR9uk1rcs7lbf16eOABm2L60kvWZfTDDzY+Vy4x1vqG+1veA0wDflLVeSJyBPBj9MJyBWnd2lqxZ51l48mXXhpG+e2rrrJNHB56yBbWOOdMRoatMRgwABo3tg9OJ59seyU/8IDN9EggRR5oDvvCIs8AZwLrVbVdHo8L8ChwBvAbcLmqFrojfSIONOcnM9Omrt55p+3N8eab0KJFASfs3WvTVb/4wlZbdulSWqE6F1syM63/9cUXbV+DHTusq/Xii+0Wh5MyIj3Q3FRE3hKR9aHbGyLStJDTngP6FfB4f+Co0G048GQ4sbgDypWzkkfvvgvLlkFqKsyYUcAJycn2AmjQwAae160rtVidiwmLF8OYMbYPyWmn2evh/PNh5kwbd7v//rhMCEURbvfRs8A7QOPQ7d3QfflS1TnA5gIOGYQNWquqfg7UCo1buCIaMADmzYOGDW3K9EMPFTDOUL++jVZv2mQvhj17SjVW50rd2rXwyCNWh6hdO3uBpKRYFcq1a62i6amnJsyYQWHC/SvUV9VnVXVf6PYcUNKyf02AnBMr00P3HUJEhotImoikbdiwoYRPG5+OOsqWIpx7rq2vuegi23snT5062Qvh009tQwfn4s2vv9qWhv37Q5Mmtq9BUpKVsl61yhb9DBkCVaoEHWnMCTcpbBKRi0UkKXS7GNgUzcByUtUJqpqqqqn1y1AJ2tJWrZqVPXrgASuRcfzxBRRLHTLEZlb8859W2te5sm7/fus/vewyazYPHWr1iMaMsa/z5tmHoDheYxAJ5cM87krgceARQIH/AZeX8LlXYdVWszQN3edKQMTe6zt1svf91FRrJffLa3Tnvvtsmf7111s/6oknlnq8zpXYN9/YgPErr1groEYNKx9/ySW20tO7hYokrL+Wqq5Q1YGqWl9VG6jq2cB5JXzud4BLxXQHtqnqmhJe04X07WtluA8/3Gp3/fWveYwzJCXZC6llSzjvvDCXSTsXA1avttpDHTva+EDWmMHkyTZO8NRTVuLFE0KRleQvdnNBD4rIJOAz4BgRSReRYSIyQkRGhA55H1gGLAUmAv9XglhcHo44Av73P2sx/OlPNq58yBYLtWpZwbyMDJuRlJERSKzOFWrnTmsR9O0LzZrZLoMVK8Ljj1uSeOcduOACK+/iiq3Y6xREZKWqNiv8yMjydQpFp2rja7feags1337bvh7k3XdtufTvfmcvvDK6QUhgPv/cNsCoVs1aXjlvNWoEHV3ZtX8/fPSR/U++9ZYNILdocWA9wTHHBB1hmRHuOoVwxxTyEp1Vby7iROCmm2xnt8GDrXzLyy9bOfhsZ50Ff/mLLXzo1AluuSWweMuU+fNt9eD77x9489++/eBj6tQ5NFFk3Zo3D7PkbYL5+usD4wRr1kDNmvaB5ZJLoEcP7xaKogJbCiKyg7zf/AWorKolSSrF4i2Fklmxwqatfvkl3H033HFHjteXKlx4oS2Nfv/9uKsTH1Fff31gr4o6dawZdv31VpF2yxb4+edDb8uWwfLlh64Nadw4/6TRtKmN/SSCVavs08pLL9ngcXKyDYhdcoktxvHkWSLhthSiVuYiWjwplFxGBowYYYUfzzrLPpDVrBl6cOdOK6C3cqVN4TvyyEBjjTmLF1s2nTLF/mi33GLTHMPtIsrMtE++eSWNn3+G9PSDt1AtX95mC+SXNBo0KNtdfTt22IeQF1+0VcWq0L27JYLBg63yo4sITwquQKowbpx1Kx1xhHXXHnts6MGff7a5rA0b2nzWlJRAY40J339vtctffdXGDW680f54tWtH9nn27rVSzfkljfXrDz6+ShXrY88vaWRn+zBkZtrz79lTOrdt22xdQUaG/RNmjRMcdVRE/6TOeFJwYZkzxyZs/PYbPP+8dS0B9qntzDPtBdu9Owwfbl1LVasGGm+pW7rUxlpeesm6L0aOtFkvQX2C/fVX64LKL2nkHs+oXdvGLcqXL/xNOlp7bZQvDxUqHHqrWNGmjV5yia20LMstnjLAk4ILW3q6LVP44gv44x/hnntC3dibN1sf04QJtqVnjRr2Ah4+PP5bD8uXWzJ4/nnr277uOrjtNuuuiVWqeY9n/PKLPV6hgv0ueb1BR+uWnOyDwjHCk4Irkt277X3v6adt9fMrr+ToGVG1OkkTJlj9jN2747f1sHKlrfR++mnLjNdcY2USGnmtRle2RbR0tot/FSvCxIlWCumjj2za6jffhB4UsXIBL75oi4QeecT6g6+80mbOXH+9lcsoy1avhhtusIH1Z56xhLd0qW1t5wnBJRBPCi6biH0wnj3bxhi6d7eupINWQdepY4OsixfbgMTAgVZSoEMH6xd+9tkCyrPGoHXrrIJmq1aWES+7DH780Ubhmxa2ZYhz8ceTgjvE8cfbmqzTT7ep+K1a2YroXbtyHFTWWw8bN1rlwCOOsNbAkCE2w2jCBBuYdS5BeVJweWrUyKaPz51rjYCbbrLSGM88k8cklbLUeti82VZtt2wJDz4I55xjg+jPPmsJwrkE50noF816AAATlElEQVTBFei44+DDD22coVEjGDbMNq96/fWD11gBsd162LbNFp21bGkDyWecAYsW2VTTQwpBOZe4PCm4sJx2mtV8e+stm5Rz4YU2GD11aj5bf8ZK62HHDksCLVrY4rNevSwxvfZajtV6zrksnhRc2ESsuvbChTZ9f/Nm2+2wZ08r0Z3vSUG0Hn79Ff7+d2sZ3H67xTB/vvWJtW8f+edzLk54UnBFlpQEl15q47JPPGFfe/SwOkoFvr+XRushI8MSzxFH2EBy1642MPLOO7YJi3OuQJ4UXLFVqGAL3n76yXZ2+/RT2whr6NAC9oaG6LQedu+2DNWqlU0xbd/eAvrgAxsYcc6FxZOCK7GqVeEPf7DK0KNH27hD69ZWiXX16kJOLmnrYc8e+Ne/bNFZ1uKzWbOs0FqPHpH8NZ1LCJ4UXMTUrg3332+thGuusemrrVpZyaBNmwo5uaith717rRTF0Udb9mnWzBLB7NlWZM05Vyxe+8hFzbJlNgv0pZegenUrLnrTTVZ5Oix51Vzq1s02XHn+ecs+qalWuO70073KpnMF8NpHLnBHHGFFVr/5xqa03nnngQXEu3eHcYG8Wg/bt9uFqle3weMvvrAKfp4QnIsIbym4UjN3rpXmnjnTNhO7+26rxF2+KJu6qlop6GbNvCSzc0XgLQUXc7p1s5XRH34Ihx1mwwXt29vOlmF/NhGx2kSeEJyLCn9luVLXu7e1Gt54w97jL7jAlhNMn16E5OCciwpPCi4QIrb15zffwHPPWdHS00+HU0+Fzz4LOjrnEpcnBReopCTbwuD77+Gxx6xg6Qkn2HKF7E1+nHOlJqpJQUT6icj3IrJURMbk8fjhIvKxiHwlIgtF5IxoxuNiV8WKtvbsp5/g3nttHVuHDnDxxYWsjnbORVTUkoKIJAHjgP7AscBFIpK7LOXtwGRV7QQMAcZHKx5XNlSrBn/6k61xuO02q1/XujVce20Yq6OdcyUWzZbCccBSVV2mqnuAV4FBuY5RoEbo+5qAv+wdYNUvHnjAWglXX22VL4480spobN4cdHTOxa9oJoUmwMocP6eH7svpbuBiEUkH3gduyOtCIjJcRNJEJG3Dhg3RiNXFqEaNYPx4G3M47zzbLK1lS1sd7d1KzkVe0APNFwHPqWpT4AzgRRE5JCZVnaCqqaqaWr9+/VIP0gXviCNsYfPXX9sC5rFj4aijrOLFBx/ksQucc65YopkUVgHNcvzcNHRfTsOAyQCq+hlQCagXxZhcGde+vW2atmIF3HEHfPml7ax59NHw8MOwZUvQETpXtkUzKcwDjhKRliJSARtIfifXMb8AvQBEpA2WFLx/yBWqSRPbXXPFCpg0CRo2hFtusfuvvtpaFM65ootaUlDVfcD1wDRgCTbLaLGI3CMiA0OH3QJcLSJfA5OAy7WsFWNygapQAYYMsWKqX31lG/y8/LJt9nPSSdaq2LMn6CidKzu8IJ6LO1u22N4848bZ1NaGDW1/h+HDbWsG5xKRF8RzCat2bduR88cf4b33bGvme+6xOnqDB8Mnn3iNJefy40nBxa1y5WwQ+r334IcfYORIK7p38snWvTRhQsE7fTqXiDwpuIRw5JHwj3/AqlUwcaIV5LvmGhuYvvlmWLo06Aidiw2eFFxCqVIFrrrKBqU//RT694fHH7c1D/37w3/+A/v3Bx2lc8HxpOASkgj06GHTWX/5xaa3LlwIZ51lCeKhh7ychktMnhRcwmvUyLZ9Xr4cJk+2nT5vvdW6loYNs1aFc4nCk4JzIcnJtgvc7NnWarjsMnj1VZu91KMHvPKKr3lw8c+TgnN5aN8e/vlPG5h+5BHYsMEWxh1+uLUqVuUu2OJcnPCk4FwBatWCG2+E776DqVPhuONsE6DmzQ+0KnzNg4snnhScC0O5craH9DvvWMnum2+GmTOhZ88DrYqdO4OO0rmS86TgXBG1bAl//zukp8Mzz9hWotdeawPTI0bA3LneenBllycF54qpcmW44gpIS4PPPoNBg+CFF6B7dzj2WPjb33wLUVf2eFJwroRELBG88AKsXWtbh9arB2PG2PTWM86A11+HXbuCjtS5wnlScC6CatSwtQ2ffGL1lv7wB/jmG7jwQqvQet111rLw7iUXqzwpOBclRx1lM5WWL7dCfP372xhE166QkmK1mNauDTpK5w7mScG5KEtKgj59bPOfNWvgX/+C6tXh97+Hpk1h4EB4801fGOdigycF50pRrVq22c///gdLllg5jfnz4bzzrHtp1Cgvq+GC5UnBuYC0bg33328F+T74AHr3tlZE586238PYsbaS2rnS5EnBuYAlJUG/flZnac0aGD/e9p6+6SZrPZxzDvz737B3b9CRukTgScG5GFK7ti2E++ILWLTISmx89hmcffaBDYEWLgw6ShfPPCk4F6PatoUHH7SV0//5j20j+sQT0KEDdOlimwNt3Bh0lC7eeFJwLsaVLw8DBsCUKda99Pjjdv/Ikda9dP75ljT27Qs2ThcfPCk4V4bUrQvXX28zlr7+2r6fM8d2jGva1GYzLV4cdJSuLPOk4FwZlZICDz9sezu8/TYcf7zNWGrXzkp8jx8PW7YEHaUrazwpOFfGJSdbMb633jqwKdDu3VZSo2FDGDzYZjZt2hR0pK4siGpSEJF+IvK9iCwVkTH5HHOhiHwrIotF5JVoxuNcvGvQwGYsff01fPmllfKeORMuugjq14du3eCuu2zxnI9BuLyIRqkyl4gkAT8AfYB0YB5wkap+m+OYo4DJwGmqukVEGqjq+oKum5qaqmlpaVGJ2bl4tH+/FeGbNs12j5s7FzIzbXV17962RuL0021MwsUvEZmvqqmFHVc+ijEcByxV1WWhgF4FBgHf5jjmamCcqm4BKCwhOOeKLinJWgjdutn+0ps3w0cfWYKYOtVmNYFNge3Xz24nngiVKgUbtwtGNLuPmgArc/ycHrovp6OBo0XkvyLyuYj0y+tCIjJcRNJEJG2Dr/t3rkTq1LH9pZ9+2tZAfPONrYdo2NCmu/bpY8cMGACPPWYlwL3Ud+KIZksh3Oc/CugJNAXmiEh7Vd2a8yBVnQBMAOs+Ku0gnYtXIjZbqV07q9r6668wa5a1IKZNg/fft+NatrQupn794LTTrMqri0/RTAqrgGY5fm4aui+ndGCuqu4FfhaRH7AkMS+KcTnn8lG1qrUQBgywn5ctOzAW8eKL8M9/2mK6Hj0OjEV06ADlfB5j3IjmQHN5bKC5F5YM5gG/U9XFOY7phw0+XyYi9YCvgI6qmu/kOR9odi4Ye/bYrKWssYivv7b7DzsM+va1JNGnj81ycrEn3IHmqCWFUBBnAGOBJOAZVb1PRO4B0lT1HRER4B9AP2A/cJ+qvlrQNT0pOBcb1qyxHeWmTbOvmzZZd1SXLgcGrLt1s5aFC15MJIVo8KTgXOzZv99Kb2R1NX3+uU17rVnTpr2efrrdDj886EgTlycF51xgtmw5eNrrqtBo4rHHHhiwPvlkn/ZamjwpOOdigip8++2BBDFnjo1PVKoEp5xi4xF9+tgMKJGgo41fnhScczHp119h9mxLEB9+CN99Z/c3amTJoU8f63Jq2DDYOOONJwXnXJmwcqUlh+nTYcaMA4X7UlKsFdG3r62wrlw52DjLOk8KzrkyJzMTvvrKEsSHH8Knn9re1JUqwUknHehqSknxrqai8qTgnCvzsrqasloS34Yqpx122IGupj59rOvJFcyTgnMu7qSnWxdTVksia4/q9u0tOfTtay2KKlWCjTMWeVJwzsW1zExbVZ2VID75xGY1VaxoYxBZXU1ehsN4UnDOJZTffrPprlldTYsW2f316x/c1dQkd63mBOFJwTmX0FavPriraX1ot5a2bQ90NZ18shUBTASeFJxzLiQz0/aNyEoQc+bYPtYVKljF16yprx07xm9XkycF55zLR0aGjUFkdTUtXGj316tnC+d69IDUVBuPiJf1EZ4UnHMuTGvXHuhqmjHDKsCCbWXarp0liKxb+/Y2mF3WeFJwzrliULUCfmlpB9+yVlonJ9viuZyJom1buz+WeVJwzrkIUYUVKw5NFNu22eMVK9p4RM5E0bp1bO0l4UnBOeeiKDPTtivNmSTmz4edO+3xKlWgU6eDE8XRRwc3kO1JwTnnSllmJvzww8GJ4ssvbWAboHp16Nz54ETRqlXp1HHypOCcczFg3z4rD54zUSxYYFNiAWrVsi1McyaK5s0jnyg8KTjnXIzauxcWLz44USxcaPcD1K17cJJITbWV2CVJFJ4UnHOuDNm92xbY5UwUixbZ/tdglWFvuw1uvrl41w83KcTQ2LhzziWuihUPtAqyZGRY0b+sQezSKBHuScE552JU5crQvbvdSkucVvlwzjlXHJ4UnHPOZfOk4JxzLltUk4KI9BOR70VkqYiMKeC480RERaTQkXHnnHPRE7WkICJJwDigP3AscJGIHJvHcdWBUcDcaMXinHMuPNFsKRwHLFXVZaq6B3gVGJTHcX8B/gbsimIszjnnwhDNpNAEWJnj5/TQfdlEpDPQTFXfK+hCIjJcRNJEJG3Dhg2Rj9Q55xwQ4ECziJQDHgZuKexYVZ2gqqmqmlq/fv3oB+eccwkqmovXVgHNcvzcNHRflupAO2CWWEGPhsA7IjJQVfOtYzF//vyNIrKimDHVAzYW89xoitW4IHZj87iKxuMqmniMq3k4B0Wt9pGIlAd+AHphyWAe8DtVXZzP8bOA3xeUECIQU1o4tT9KW6zGBbEbm8dVNB5X0SRyXFHrPlLVfcD1wDRgCTBZVReLyD0iMjBaz+ucc674olr7SFXfB97Pdd+d+RzbM5qxOOecK1yirWieEHQA+YjVuCB2Y/O4isbjKpqEjavM7afgnHMuehKtpeCcc64AnhScc85lS4ikICLPiMh6EVkUdCw5iUgzEflYRL4VkcUiMiromABEpJKIfCEiX4fi+nPQMeUkIkki8pWI/CfoWLKIyHIR+UZEFohIzOwXKyK1RGSKiHwnIktE5PgYiOmY0N8p67ZdRG4MOi4AEbkp9D+/SEQmiUiloGMCEJFRoZgWR/tvlRBjCiJyMrATeEFV2wUdTxYRaQQ0UtUvQ4UB5wNnq+q3AcclQFVV3SkiycCnwChV/TzIuLKIyM1AKlBDVc8MOh6wpACkqmpMLXgSkeeBT1T1KRGpAFRR1a1Bx5UlVDhzFdBNVYu7KDVSsTTB/tePVdUMEZkMvK+qzwUcVzusdtxxwB5gKjBCVZdG4/kSoqWgqnOAzUHHkZuqrlHVL0Pf78DWczQp+KzoU7Mz9GNy6BYTnx5EpCkwAHgq6FhinYjUBE4GngZQ1T2xlBBCegE/BZ0QcigPVA4tvq0CrA44HoA2wFxV/S20/ms2cG60niwhkkJZICItgE7ESAnxUBfNAmA98KGqxkRcwFjgNiAz6EByUWC6iMwXkeFBBxPSEtgAPBvqbntKRKoGHVQuQ4BJQQcBoKqrgIeAX4A1wDZVnR5sVAAsAk4SkboiUgU4g4NLCEWUJ4UYICLVgDeAG1V1e9DxAKjqflXtiNWsOi7UhA2UiJwJrFfV+UHHkocTVbUztn/IdaEuy6CVBzoDT6pqJ+BXIN/NrkpbqDtrIPB60LEAiEhtrLx/S6AxUFVELg42KlDVJdj2AtOxrqMFwP5oPZ8nhYCF+uzfAF5W1TeDjie3UHfDx0C/oGMBegADQ/33rwKnichLwYZkQp8yUdX1wFtY/2/Q0oH0HK28KViSiBX9gS9VdV3QgYT0Bn5W1Q2quhd4Ezgh4JgAUNWnVbWLqp4MbMHqykWFJ4UAhQZ0nwaWqOrDQceTRUTqi0it0PeVgT7Ad8FGBar6B1VtqqotsG6Hmaoa+Cc5EakamihAqHumL9bkD5SqrgVWisgxobt6AYFOYsjlImKk6yjkF6C7iFQJvTZ7YeN8gRORBqGvh2PjCa9E67miWvsoVojIJKAnUE9E0oG7VPXpYKMC7JPvJcA3of57gD+GakYFqRHwfGhmSDmsmGHMTP+MQYcBb4VKwJcHXlHVqcGGlO0G4OVQV80y4IqA4wGyk2cf4JqgY8miqnNFZArwJbAP+IrYKXfxhojUBfYC10VzwkBCTEl1zjkXHu8+cs45l82TgnPOuWyeFJxzzmXzpOCccy6bJwXnnHPZPCk4l4uI7M9VxTNiq4BFpEWsVet1LqeEWKfgXBFlhEp8OJdwvKXgXJhCeyb8PbRvwhcicmTo/hYiMlNEForIR6FVp4jIYSLyVmhfiq9FJKtkQpKITAzVxp8eWjXuXEzwpODcoSrn6j4anOOxbaraHngCq9gK8DjwvKqmAC8Dj4XufwyYraodsJpDi0P3HwWMU9W2wFbgvCj/Ps6FzVc0O5eLiOxU1Wp53L8cOE1Vl4UKGa5V1boishHbLGlv6P41qlpPRDYATVV1d45rtMBKkR8V+nk0kKyq90b/N3OucN5ScK5oNJ/vi2J3ju/342N7LoZ4UnCuaAbn+PpZ6Pv/YVVbAYYCn4S+/wi4FrI3LapZWkE6V1z+CcW5Q1XOUbUWYKqqZk1LrS0iC7FP+xeF7rsB293sVmyns6xKpKOACSIyDGsRXIvt6OVczPIxBefCFBpTSFXVjUHH4ly0ePeRc865bN5ScM45l81bCs4557J5UnDOOZfNk4JzzrlsnhScc85l86TgnHMu2/8DShMH4t8fsOoAAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "cnn=get_CNN(x_tan,y_tan)\n", "cnn=tanitas_earlystop(cnn, x_tan, y_tan, 15, 5)\n", "halo_mentes(cnn,'cnn_alap')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Érdemes összehasonlítani az imént betanított CNN pontosságát az MLP-ével:\n", "- MLP: 1.2233-as tanító és 1.4045-ös validációs loss (0.5-ös validációs pontossággal); 820874 súly\n", "- CNN: 0.6598-as tanító és 0.8968-os validációs loss (0.7-es validációs pontossággal); 324970 súly\n", "\n", "Egyértelműen látszik az eltolás invariáns szűrők hatásossága...\n", "Továbbá érdemes megfigyelni a tan" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n", "Augmentalt kepek:\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 1/25\n", "1406/1406 [==============================] - 20s 14ms/step - loss: 1.0325 - acc: 0.6370 - inTop3: 0.8930 - val_loss: 0.8031 - val_acc: 0.7228 - val_inTop3: 0.9244\n", "\n", "Epoch 00001: val_loss improved from inf to 0.80315, saving model to cnn_aug.hdf5\n", "Epoch 2/25\n", "1406/1406 [==============================] - 20s 14ms/step - loss: 0.9804 - acc: 0.6557 - inTop3: 0.8990 - val_loss: 0.8380 - val_acc: 0.7148 - val_inTop3: 0.9292\n", "\n", "Epoch 00002: val_loss did not improve from 0.80315\n", "Epoch 3/25\n", "1406/1406 [==============================] - 20s 14ms/step - loss: 0.9367 - acc: 0.6734 - inTop3: 0.9069 - val_loss: 0.8329 - val_acc: 0.7152 - val_inTop3: 0.9266\n", "\n", "Epoch 00003: val_loss did not improve from 0.80315\n", "Epoch 4/25\n", "1406/1406 [==============================] - 21s 15ms/step - loss: 0.9095 - acc: 0.6833 - inTop3: 0.9118 - val_loss: 0.8670 - val_acc: 0.7146 - val_inTop3: 0.9330\n", "\n", "Epoch 00004: val_loss did not improve from 0.80315\n", "Epoch 5/25\n", "1406/1406 [==============================] - 21s 15ms/step - loss: 0.8909 - acc: 0.6876 - inTop3: 0.9147 - val_loss: 0.7961 - val_acc: 0.7358 - val_inTop3: 0.9272\n", "\n", "Epoch 00005: val_loss improved from 0.80315 to 0.79613, saving model to cnn_aug.hdf5\n", "Epoch 6/25\n", "1406/1406 [==============================] - 21s 15ms/step - loss: 0.8688 - acc: 0.6984 - inTop3: 0.9160 - val_loss: 0.7775 - val_acc: 0.7452 - val_inTop3: 0.9332\n", "\n", "Epoch 00006: val_loss improved from 0.79613 to 0.77746, saving model to cnn_aug.hdf5\n", "Epoch 7/25\n", "1406/1406 [==============================] - 21s 15ms/step - loss: 0.8444 - acc: 0.7055 - inTop3: 0.9219 - val_loss: 0.8044 - val_acc: 0.7266 - val_inTop3: 0.9290\n", "\n", "Epoch 00007: val_loss did not improve from 0.77746\n", "Epoch 8/25\n", "1406/1406 [==============================] - 21s 15ms/step - loss: 0.8352 - acc: 0.7110 - inTop3: 0.9233 - val_loss: 0.8456 - val_acc: 0.7194 - val_inTop3: 0.9218\n", "\n", "Epoch 00008: val_loss did not improve from 0.77746\n", "Epoch 9/25\n", "1406/1406 [==============================] - 20s 14ms/step - loss: 0.8256 - acc: 0.7141 - inTop3: 0.9242 - val_loss: 0.7917 - val_acc: 0.7412 - val_inTop3: 0.9302\n", "\n", "Epoch 00009: val_loss did not improve from 0.77746\n", "Epoch 10/25\n", "1406/1406 [==============================] - 20s 14ms/step - loss: 0.8037 - acc: 0.7208 - inTop3: 0.9280 - val_loss: 0.8042 - val_acc: 0.7356 - val_inTop3: 0.9260\n", "\n", "Epoch 00010: val_loss did not improve from 0.77746\n", "Epoch 11/25\n", "1406/1406 [==============================] - 20s 14ms/step - loss: 0.7926 - acc: 0.7237 - inTop3: 0.9292 - val_loss: 0.7660 - val_acc: 0.7454 - val_inTop3: 0.9300\n", "\n", "Epoch 00011: val_loss improved from 0.77746 to 0.76603, saving model to cnn_aug.hdf5\n", "Epoch 12/25\n", "1406/1406 [==============================] - 20s 14ms/step - loss: 0.7959 - acc: 0.7228 - inTop3: 0.9291 - val_loss: 0.8665 - val_acc: 0.7194 - val_inTop3: 0.9176\n", "\n", "Epoch 00012: val_loss did not improve from 0.76603\n", "Epoch 13/25\n", "1406/1406 [==============================] - 20s 14ms/step - loss: 0.7857 - acc: 0.7266 - inTop3: 0.9310 - val_loss: 0.7691 - val_acc: 0.7484 - val_inTop3: 0.9352\n", "\n", "Epoch 00013: val_loss did not improve from 0.76603\n", "Epoch 14/25\n", "1406/1406 [==============================] - 20s 14ms/step - loss: 0.7728 - acc: 0.7313 - inTop3: 0.9330 - val_loss: 0.7522 - val_acc: 0.7430 - val_inTop3: 0.9354\n", "\n", "Epoch 00014: val_loss improved from 0.76603 to 0.75217, saving model to cnn_aug.hdf5\n", "Epoch 15/25\n", "1406/1406 [==============================] - 20s 14ms/step - loss: 0.7641 - acc: 0.7356 - inTop3: 0.9328 - val_loss: 0.8777 - val_acc: 0.7230 - val_inTop3: 0.9244\n", "\n", "Epoch 00015: val_loss did not improve from 0.75217\n", "Epoch 16/25\n", "1406/1406 [==============================] - 20s 14ms/step - loss: 0.7532 - acc: 0.7391 - inTop3: 0.9337 - val_loss: 0.8155 - val_acc: 0.7376 - val_inTop3: 0.9324\n", "\n", "Epoch 00016: val_loss did not improve from 0.75217\n", "Epoch 17/25\n", "1406/1406 [==============================] - 21s 15ms/step - loss: 0.7504 - acc: 0.7393 - inTop3: 0.9345 - val_loss: 0.8194 - val_acc: 0.7400 - val_inTop3: 0.9320\n", "\n", "Epoch 00017: val_loss did not improve from 0.75217\n", "Epoch 18/25\n", "1406/1406 [==============================] - 20s 14ms/step - loss: 0.7437 - acc: 0.7410 - inTop3: 0.9360 - val_loss: 0.8086 - val_acc: 0.7384 - val_inTop3: 0.9322\n", "\n", "Epoch 00018: val_loss did not improve from 0.75217\n", "Epoch 19/25\n", "1406/1406 [==============================] - 20s 14ms/step - loss: 0.7470 - acc: 0.7420 - inTop3: 0.9355 - val_loss: 0.8199 - val_acc: 0.7382 - val_inTop3: 0.9268\n", "\n", "Epoch 00019: val_loss did not improve from 0.75217\n", "Epoch 20/25\n", "1406/1406 [==============================] - 20s 14ms/step - loss: 0.7350 - acc: 0.7461 - inTop3: 0.9383 - val_loss: 0.8887 - val_acc: 0.7320 - val_inTop3: 0.9276\n", "\n", "Epoch 00020: val_loss did not improve from 0.75217\n", "Epoch 21/25\n", "1406/1406 [==============================] - 20s 14ms/step - loss: 0.7234 - acc: 0.7493 - inTop3: 0.9403 - val_loss: 0.8346 - val_acc: 0.7398 - val_inTop3: 0.9280\n", "\n", "Epoch 00021: val_loss did not improve from 0.75217\n", "Epoch 22/25\n", "1406/1406 [==============================] - 19s 13ms/step - loss: 0.7302 - acc: 0.7484 - inTop3: 0.9396 - val_loss: 0.8128 - val_acc: 0.7486 - val_inTop3: 0.9292\n", "\n", "Epoch 00022: val_loss did not improve from 0.75217\n", "Epoch 23/25\n", "1406/1406 [==============================] - 18s 13ms/step - loss: 0.7221 - acc: 0.7494 - inTop3: 0.9389 - val_loss: 0.7926 - val_acc: 0.7544 - val_inTop3: 0.9328\n", "\n", "Epoch 00023: val_loss did not improve from 0.75217\n", "Epoch 24/25\n", "1406/1406 [==============================] - 18s 13ms/step - loss: 0.7277 - acc: 0.7488 - inTop3: 0.9389 - val_loss: 0.7764 - val_acc: 0.7526 - val_inTop3: 0.9364\n", "\n", "Epoch 00024: val_loss did not improve from 0.75217\n" ] } ], "source": [ "cnn=tanitas_augment(cnn, x_tan, y_tan, 25, 10)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "12 epochnyi tanítás után tovább javul a validációs hiba:\n", "0.7591-as tanító és 0.8014-es validációs loss (0.75-ös validációs pontossággal); 273706 súly" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Dropout rétegekkel a háló bővítése" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Regularizáció másik, mély hálóknál gyakran alkalmazott változata a dropout rétegek alkalmazása. Ennek során az egyes konvolkúciós szűrőket véletlenszerűen dobálja ki a tanítás (persze ennek a valószínűségét meg tudjuk előre adni). A rétegek használatával a szűrések által kiemelt jellemzők redundánsabbak lesznek, ezáltal egy-egy kiemelés hibájára kevésbé lesznek érzékenyek." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Önálló feladat - új háló definiálása, mely struktúrája megegyezik az eddigivel, de minden szűrés után 0.2-es valséggel dob ki egy-egy csatornát" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "def get_CNNDo(x_tst,y_tst):\n", " bem= Input(shape=x_tst[1].shape, dtype='float32')\n", " x=Conv2D(filters=32, kernel_size=(3, 3), activation='relu', padding='same')(bem)\n", " x=Dropout(rate=0.2)(x)\n", " x=Conv2D(filters=32, kernel_size=(5, 5), activation='relu', padding='same')(x)\n", " x=Dropout(rate=0.2)(x)\n", " x=Conv2D(filters=32, kernel_size=(3, 3), activation='relu', padding='same')(x)\n", " x=Dropout(rate=0.2)(x)\n", " x=Conv2D(filters=32, kernel_size=(5, 5), activation='relu', padding='same')(x)\n", " x=MaxPooling2D(pool_size=(4, 4))(x)\n", " y=Flatten()(x)\n", " y=Dense(128, activation='relu')(y)\n", " y=Dense(10, activation='softmax')(y)\n", " \n", " model = Model(inputs=bem, outputs=y)\n", " model.compile(optimizer=SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True), loss='categorical_crossentropy', metrics=['accuracy', inTop3])\n", " print(model.summary())\n", " \n", " return model" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "_________________________________________________________________\n", "Layer (type) Output Shape Param # \n", "=================================================================\n", "input_2 (InputLayer) (None, 32, 32, 3) 0 \n", "_________________________________________________________________\n", "conv2d_5 (Conv2D) (None, 32, 32, 32) 896 \n", "_________________________________________________________________\n", "dropout_1 (Dropout) (None, 32, 32, 32) 0 \n", "_________________________________________________________________\n", "conv2d_6 (Conv2D) (None, 32, 32, 32) 25632 \n", "_________________________________________________________________\n", "dropout_2 (Dropout) (None, 32, 32, 32) 0 \n", "_________________________________________________________________\n", "conv2d_7 (Conv2D) (None, 32, 32, 32) 9248 \n", "_________________________________________________________________\n", "dropout_3 (Dropout) (None, 32, 32, 32) 0 \n", "_________________________________________________________________\n", "conv2d_8 (Conv2D) (None, 32, 32, 32) 25632 \n", "_________________________________________________________________\n", "max_pooling2d_2 (MaxPooling2 (None, 8, 8, 32) 0 \n", "_________________________________________________________________\n", "flatten_2 (Flatten) (None, 2048) 0 \n", "_________________________________________________________________\n", "dense_3 (Dense) (None, 128) 262272 \n", "_________________________________________________________________\n", "dense_4 (Dense) (None, 10) 1290 \n", "=================================================================\n", "Total params: 324,970\n", "Trainable params: 324,970\n", "Non-trainable params: 0\n", "_________________________________________________________________\n", "None\n", "Train on 45000 samples, validate on 5000 samples\n", "Epoch 1/10\n", "45000/45000 [==============================] - 18s 402us/step - loss: 1.6928 - acc: 0.3842 - inTop3: 0.7087 - val_loss: 1.4396 - val_acc: 0.4814 - val_inTop3: 0.8080\n", "\n", "Epoch 00001: val_loss improved from inf to 1.43956, saving model to CNN.hdf5\n", "Epoch 2/10\n", "45000/45000 [==============================] - 18s 399us/step - loss: 1.2650 - acc: 0.5446 - inTop3: 0.8478 - val_loss: 1.1577 - val_acc: 0.5878 - val_inTop3: 0.8744\n", "\n", "Epoch 00002: val_loss improved from 1.43956 to 1.15765, saving model to CNN.hdf5\n", "Epoch 3/10\n", "45000/45000 [==============================] - 19s 424us/step - loss: 1.0689 - acc: 0.6209 - inTop3: 0.8877 - val_loss: 1.0184 - val_acc: 0.6426 - val_inTop3: 0.8944\n", "\n", "Epoch 00003: val_loss improved from 1.15765 to 1.01844, saving model to CNN.hdf5\n", "Epoch 4/10\n", "45000/45000 [==============================] - 23s 516us/step - loss: 0.9565 - acc: 0.6595 - inTop3: 0.9083 - val_loss: 0.9433 - val_acc: 0.6664 - val_inTop3: 0.9106\n", "\n", "Epoch 00004: val_loss improved from 1.01844 to 0.94333, saving model to CNN.hdf5\n", "Epoch 5/10\n", "45000/45000 [==============================] - 23s 520us/step - loss: 0.8698 - acc: 0.6897 - inTop3: 0.9217 - val_loss: 0.9193 - val_acc: 0.6754 - val_inTop3: 0.9116\n", "\n", "Epoch 00005: val_loss improved from 0.94333 to 0.91928, saving model to CNN.hdf5\n", "Epoch 6/10\n", "45000/45000 [==============================] - 23s 517us/step - loss: 0.7978 - acc: 0.7194 - inTop3: 0.9324 - val_loss: 0.9046 - val_acc: 0.6912 - val_inTop3: 0.9142\n", "\n", "Epoch 00006: val_loss improved from 0.91928 to 0.90461, saving model to CNN.hdf5\n", "Epoch 7/10\n", "45000/45000 [==============================] - 25s 560us/step - loss: 0.7526 - acc: 0.7352 - inTop3: 0.9389 - val_loss: 0.8985 - val_acc: 0.6960 - val_inTop3: 0.9166\n", "\n", "Epoch 00007: val_loss improved from 0.90461 to 0.89851, saving model to CNN.hdf5\n", "Epoch 8/10\n", "45000/45000 [==============================] - 28s 619us/step - loss: 0.6976 - acc: 0.7548 - inTop3: 0.9486 - val_loss: 0.9188 - val_acc: 0.6966 - val_inTop3: 0.9148\n", "\n", "Epoch 00008: val_loss did not improve from 0.89851\n", "Epoch 9/10\n", "45000/45000 [==============================] - 25s 546us/step - loss: 0.6667 - acc: 0.7645 - inTop3: 0.9529 - val_loss: 0.8933 - val_acc: 0.6994 - val_inTop3: 0.9206\n", "\n", "Epoch 00009: val_loss improved from 0.89851 to 0.89332, saving model to CNN.hdf5\n", "Epoch 10/10\n", "45000/45000 [==============================] - 20s 439us/step - loss: 0.6289 - acc: 0.7781 - inTop3: 0.9570 - val_loss: 0.9496 - val_acc: 0.6946 - val_inTop3: 0.9146\n", "\n", "Epoch 00010: val_loss did not improve from 0.89332\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "cnndo=get_CNNDo(x_tan,y_tan)\n", "cnndo=tanitas_earlystop(cnndo, x_tan, y_tan, 10, 3)" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [], "source": [ "#cnndo=tanitas_earlystop(cnndo, x_tan, y_tan, 40, 5)\n", "halo_mentes(cnn,'cnn_dropout')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Látványos eredményt esetünkben nem hozott a dropout rétegek használata. Ennek legfőbb magyarázata, hogy túl kicsi az általunk most használt háló. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 4.) Háló mélységének a növelése" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Mivel az előző feladatok során a háló kis mérete valszűleg korlátozza az elérhető pontosságot, ezért logikus lépés annak a növelése." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Paraméterként átadható mélységű háló létrehozása" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [], "source": [ "def get_CNNmely(x_tst,y_tst,bb,kb):\n", " bem= Input(shape=x_tst[1].shape, dtype='float32')\n", " x=bem\n", " fsz=16\n", " kb=min(kb, math.floor(np.log2(x_tst.shape[2]))-1)\n", " for i in range(kb):\n", " for j in range(bb):\n", " x=Conv2D(filters=fsz, kernel_size=(3, 3), activation='relu', padding='same')(x)\n", " \n", " x=MaxPooling2D(pool_size=(2, 2))(x)\n", " fsz=fsz*2\n", " \n", " y=Flatten()(x)\n", " y=Dense(128, activation='relu')(y)\n", " y=Dense(10, activation='softmax')(y)\n", " \n", " model = Model(inputs=bem, outputs=y)\n", " model.compile(optimizer=SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True), loss='categorical_crossentropy', metrics=['accuracy', inTop3])\n", " print(model.summary())\n", " \n", " return model " ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "scrolled": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "_________________________________________________________________\n", "Layer (type) Output Shape Param # \n", "=================================================================\n", "input_3 (InputLayer) (None, 32, 32, 3) 0 \n", "_________________________________________________________________\n", "conv2d_9 (Conv2D) (None, 32, 32, 16) 448 \n", "_________________________________________________________________\n", "conv2d_10 (Conv2D) (None, 32, 32, 16) 2320 \n", "_________________________________________________________________\n", "conv2d_11 (Conv2D) (None, 32, 32, 16) 2320 \n", "_________________________________________________________________\n", "max_pooling2d_3 (MaxPooling2 (None, 16, 16, 16) 0 \n", "_________________________________________________________________\n", "conv2d_12 (Conv2D) (None, 16, 16, 32) 4640 \n", "_________________________________________________________________\n", "conv2d_13 (Conv2D) (None, 16, 16, 32) 9248 \n", "_________________________________________________________________\n", "conv2d_14 (Conv2D) (None, 16, 16, 32) 9248 \n", "_________________________________________________________________\n", "max_pooling2d_4 (MaxPooling2 (None, 8, 8, 32) 0 \n", "_________________________________________________________________\n", "conv2d_15 (Conv2D) (None, 8, 8, 64) 18496 \n", "_________________________________________________________________\n", "conv2d_16 (Conv2D) (None, 8, 8, 64) 36928 \n", "_________________________________________________________________\n", "conv2d_17 (Conv2D) (None, 8, 8, 64) 36928 \n", "_________________________________________________________________\n", "max_pooling2d_5 (MaxPooling2 (None, 4, 4, 64) 0 \n", "_________________________________________________________________\n", "conv2d_18 (Conv2D) (None, 4, 4, 128) 73856 \n", "_________________________________________________________________\n", "conv2d_19 (Conv2D) (None, 4, 4, 128) 147584 \n", "_________________________________________________________________\n", "conv2d_20 (Conv2D) (None, 4, 4, 128) 147584 \n", "_________________________________________________________________\n", "max_pooling2d_6 (MaxPooling2 (None, 2, 2, 128) 0 \n", "_________________________________________________________________\n", "flatten_3 (Flatten) (None, 512) 0 \n", "_________________________________________________________________\n", "dense_5 (Dense) (None, 128) 65664 \n", "_________________________________________________________________\n", "dense_6 (Dense) (None, 10) 1290 \n", "=================================================================\n", "Total params: 556,554\n", "Trainable params: 556,554\n", "Non-trainable params: 0\n", "_________________________________________________________________\n", "None\n", "Train on 45000 samples, validate on 5000 samples\n", "Epoch 1/20\n", "45000/45000 [==============================] - 20s 440us/step - loss: 2.3018 - acc: 0.1028 - inTop3: 0.3059 - val_loss: 2.3033 - val_acc: 0.1038 - val_inTop3: 0.2994\n", "\n", "Epoch 00001: val_loss improved from inf to 2.30330, saving model to CNN.hdf5\n", "Epoch 2/20\n", "45000/45000 [==============================] - 25s 555us/step - loss: 2.3035 - acc: 0.0997 - inTop3: 0.2977 - val_loss: 2.3030 - val_acc: 0.0976 - val_inTop3: 0.2912\n", "\n", "Epoch 00002: val_loss improved from 2.30330 to 2.30300, saving model to CNN.hdf5\n", "Epoch 3/20\n", "45000/45000 [==============================] - 25s 557us/step - loss: 2.2870 - acc: 0.1120 - inTop3: 0.3301 - val_loss: 2.1175 - val_acc: 0.2180 - val_inTop3: 0.5356\n", "\n", "Epoch 00003: val_loss improved from 2.30300 to 2.11755, saving model to CNN.hdf5\n", "Epoch 4/20\n", "45000/45000 [==============================] - 25s 557us/step - loss: 1.7937 - acc: 0.3372 - inTop3: 0.6744 - val_loss: 1.7544 - val_acc: 0.3664 - val_inTop3: 0.6878\n", "\n", "Epoch 00004: val_loss improved from 2.11755 to 1.75442, saving model to CNN.hdf5\n", "Epoch 5/20\n", "45000/45000 [==============================] - 25s 559us/step - loss: 1.4383 - acc: 0.4720 - inTop3: 0.8021 - val_loss: 1.2984 - val_acc: 0.5304 - val_inTop3: 0.8514\n", "\n", "Epoch 00005: val_loss improved from 1.75442 to 1.29841, saving model to CNN.hdf5\n", "Epoch 6/20\n", "45000/45000 [==============================] - 25s 559us/step - loss: 1.2201 - acc: 0.5602 - inTop3: 0.8536 - val_loss: 1.0976 - val_acc: 0.6136 - val_inTop3: 0.8818\n", "\n", "Epoch 00006: val_loss improved from 1.29841 to 1.09757, saving model to CNN.hdf5\n", "Epoch 7/20\n", "45000/45000 [==============================] - 25s 560us/step - loss: 1.0436 - acc: 0.6297 - inTop3: 0.8865 - val_loss: 1.1094 - val_acc: 0.6150 - val_inTop3: 0.8716\n", "\n", "Epoch 00007: val_loss did not improve from 1.09757\n", "Epoch 8/20\n", "45000/45000 [==============================] - 20s 455us/step - loss: 0.9254 - acc: 0.6720 - inTop3: 0.9071 - val_loss: 0.9536 - val_acc: 0.6736 - val_inTop3: 0.9008\n", "\n", "Epoch 00008: val_loss improved from 1.09757 to 0.95356, saving model to CNN.hdf5\n", "Epoch 9/20\n", "45000/45000 [==============================] - 20s 453us/step - loss: 0.8371 - acc: 0.7062 - inTop3: 0.9217 - val_loss: 0.9695 - val_acc: 0.6696 - val_inTop3: 0.8976\n", "\n", "Epoch 00009: val_loss did not improve from 0.95356\n", "Epoch 10/20\n", "45000/45000 [==============================] - 20s 453us/step - loss: 0.7819 - acc: 0.7258 - inTop3: 0.9276 - val_loss: 0.8536 - val_acc: 0.7024 - val_inTop3: 0.9196\n", "\n", "Epoch 00010: val_loss improved from 0.95356 to 0.85360, saving model to CNN.hdf5\n", "Epoch 11/20\n", "45000/45000 [==============================] - 20s 453us/step - loss: 0.7336 - acc: 0.7420 - inTop3: 0.9374 - val_loss: 0.8627 - val_acc: 0.6996 - val_inTop3: 0.9180\n", "\n", "Epoch 00011: val_loss did not improve from 0.85360\n", "Epoch 12/20\n", "45000/45000 [==============================] - 20s 452us/step - loss: 0.7060 - acc: 0.7543 - inTop3: 0.9395 - val_loss: 0.8305 - val_acc: 0.7112 - val_inTop3: 0.9206\n", "\n", "Epoch 00012: val_loss improved from 0.85360 to 0.83053, saving model to CNN.hdf5\n", "Epoch 13/20\n", "45000/45000 [==============================] - 20s 435us/step - loss: 0.6862 - acc: 0.7620 - inTop3: 0.9415 - val_loss: 0.8347 - val_acc: 0.7168 - val_inTop3: 0.9242\n", "\n", "Epoch 00013: val_loss did not improve from 0.83053\n", "Epoch 14/20\n", "45000/45000 [==============================] - 16s 365us/step - loss: 0.6816 - acc: 0.7640 - inTop3: 0.9432 - val_loss: 0.8839 - val_acc: 0.7154 - val_inTop3: 0.9186\n", "\n", "Epoch 00014: val_loss did not improve from 0.83053\n", "Epoch 15/20\n", "45000/45000 [==============================] - 16s 366us/step - loss: 0.6721 - acc: 0.7654 - inTop3: 0.9439 - val_loss: 0.7750 - val_acc: 0.7312 - val_inTop3: 0.9330\n", "\n", "Epoch 00015: val_loss improved from 0.83053 to 0.77502, saving model to CNN.hdf5\n", "Epoch 16/20\n", "45000/45000 [==============================] - 16s 348us/step - loss: 0.6714 - acc: 0.7682 - inTop3: 0.9436 - val_loss: 0.8608 - val_acc: 0.7118 - val_inTop3: 0.9212\n", "\n", "Epoch 00016: val_loss did not improve from 0.77502\n", "Epoch 17/20\n", "45000/45000 [==============================] - 15s 338us/step - loss: 0.6656 - acc: 0.7698 - inTop3: 0.9448 - val_loss: 0.8498 - val_acc: 0.7248 - val_inTop3: 0.9232\n", "\n", "Epoch 00017: val_loss did not improve from 0.77502\n", "Epoch 18/20\n", "45000/45000 [==============================] - 15s 340us/step - loss: 0.6887 - acc: 0.7634 - inTop3: 0.9423 - val_loss: 0.9136 - val_acc: 0.6996 - val_inTop3: 0.9176\n", "\n", "Epoch 00018: val_loss did not improve from 0.77502\n", "Epoch 19/20\n", "45000/45000 [==============================] - 15s 340us/step - loss: 0.7316 - acc: 0.7488 - inTop3: 0.9357 - val_loss: 0.8704 - val_acc: 0.7196 - val_inTop3: 0.9178\n", "\n", "Epoch 00019: val_loss did not improve from 0.77502\n", "Epoch 20/20\n", "45000/45000 [==============================] - 16s 360us/step - loss: 0.7175 - acc: 0.7535 - inTop3: 0.9365 - val_loss: 0.9693 - val_acc: 0.6848 - val_inTop3: 0.8986\n", "\n", "Epoch 00020: val_loss did not improve from 0.77502\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "cnn_m=get_CNNmely(x_tan,y_tan,3,4)\n", "nndo=tanitas_earlystop(cnn_m, x_tan, y_tan, 20, 5)\n", "halo_mentes(cnn,'cnn_mely')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Több mint 0.05-el sikerült csökkenteni a validacios hibat." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Residual blokkok használata" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Önálló feladat - belső blokkok bővítése skipp connection-nel" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Várhatóan tovább javítható a háló pontossága, illetve növelhető a tanulás sebssége, ha residual blokkokba szervezzük az előzőleg definiált belső blokkjainkat." ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [], "source": [ "def get_CNNres(x_tst,y_tst,bb,kb):\n", " bem= Input(shape=x_tst[1].shape, dtype='float32')\n", " x=bem\n", " fsz=16\n", " kb=min(kb, math.floor(np.log2(x_tst.shape[2]))-1)\n", " for i in range(kb):\n", " x=Conv2D(filters=fsz, kernel_size=(3, 3), activation='relu', padding='same')(x)\n", " x2=x\n", " for j in range(bb-1):\n", " x2=Conv2D(filters=fsz, kernel_size=(3, 3), activation='relu', padding='same')(x2)\n", " \n", " x2=Add()([x, x2])\n", " x=MaxPooling2D(pool_size=(2, 2))(x2)\n", " fsz=fsz*2\n", " \n", " y=Flatten()(x)\n", " y=Dense(128, activation='relu')(y)\n", " y=Dense(10, activation='softmax')(y)\n", " \n", " model = Model(inputs=bem, outputs=y)\n", " model.compile(optimizer=SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True), loss='categorical_crossentropy', metrics=['accuracy', inTop3])\n", " print(model.summary())\n", " \n", " return model " ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "scrolled": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "__________________________________________________________________________________________________\n", "Layer (type) Output Shape Param # Connected to \n", "==================================================================================================\n", "input_4 (InputLayer) (None, 32, 32, 3) 0 \n", "__________________________________________________________________________________________________\n", "conv2d_21 (Conv2D) (None, 32, 32, 16) 448 input_4[0][0] \n", "__________________________________________________________________________________________________\n", "conv2d_22 (Conv2D) (None, 32, 32, 16) 2320 conv2d_21[0][0] \n", "__________________________________________________________________________________________________\n", "conv2d_23 (Conv2D) (None, 32, 32, 16) 2320 conv2d_22[0][0] \n", "__________________________________________________________________________________________________\n", "add_1 (Add) (None, 32, 32, 16) 0 conv2d_21[0][0] \n", " conv2d_23[0][0] \n", "__________________________________________________________________________________________________\n", "max_pooling2d_7 (MaxPooling2D) (None, 16, 16, 16) 0 add_1[0][0] \n", "__________________________________________________________________________________________________\n", "conv2d_24 (Conv2D) (None, 16, 16, 32) 4640 max_pooling2d_7[0][0] \n", "__________________________________________________________________________________________________\n", "conv2d_25 (Conv2D) (None, 16, 16, 32) 9248 conv2d_24[0][0] \n", "__________________________________________________________________________________________________\n", "conv2d_26 (Conv2D) (None, 16, 16, 32) 9248 conv2d_25[0][0] \n", "__________________________________________________________________________________________________\n", "add_2 (Add) (None, 16, 16, 32) 0 conv2d_24[0][0] \n", " conv2d_26[0][0] \n", "__________________________________________________________________________________________________\n", "max_pooling2d_8 (MaxPooling2D) (None, 8, 8, 32) 0 add_2[0][0] \n", "__________________________________________________________________________________________________\n", "conv2d_27 (Conv2D) (None, 8, 8, 64) 18496 max_pooling2d_8[0][0] \n", "__________________________________________________________________________________________________\n", "conv2d_28 (Conv2D) (None, 8, 8, 64) 36928 conv2d_27[0][0] \n", "__________________________________________________________________________________________________\n", "conv2d_29 (Conv2D) (None, 8, 8, 64) 36928 conv2d_28[0][0] \n", "__________________________________________________________________________________________________\n", "add_3 (Add) (None, 8, 8, 64) 0 conv2d_27[0][0] \n", " conv2d_29[0][0] \n", "__________________________________________________________________________________________________\n", "max_pooling2d_9 (MaxPooling2D) (None, 4, 4, 64) 0 add_3[0][0] \n", "__________________________________________________________________________________________________\n", "conv2d_30 (Conv2D) (None, 4, 4, 128) 73856 max_pooling2d_9[0][0] \n", "__________________________________________________________________________________________________\n", "conv2d_31 (Conv2D) (None, 4, 4, 128) 147584 conv2d_30[0][0] \n", "__________________________________________________________________________________________________\n", "conv2d_32 (Conv2D) (None, 4, 4, 128) 147584 conv2d_31[0][0] \n", "__________________________________________________________________________________________________\n", "add_4 (Add) (None, 4, 4, 128) 0 conv2d_30[0][0] \n", " conv2d_32[0][0] \n", "__________________________________________________________________________________________________\n", "max_pooling2d_10 (MaxPooling2D) (None, 2, 2, 128) 0 add_4[0][0] \n", "__________________________________________________________________________________________________\n", "flatten_4 (Flatten) (None, 512) 0 max_pooling2d_10[0][0] \n", "__________________________________________________________________________________________________\n", "dense_7 (Dense) (None, 128) 65664 flatten_4[0][0] \n", "__________________________________________________________________________________________________\n", "dense_8 (Dense) (None, 10) 1290 dense_7[0][0] \n", "==================================================================================================\n", "Total params: 556,554\n", "Trainable params: 556,554\n", "Non-trainable params: 0\n", "__________________________________________________________________________________________________\n", "None\n", "Train on 45000 samples, validate on 5000 samples\n", "Epoch 1/20\n", "45000/45000 [==============================] - 22s 480us/step - loss: 1.6347 - acc: 0.3994 - inTop3: 0.7237 - val_loss: 1.4266 - val_acc: 0.4878 - val_inTop3: 0.8122\n", "\n", "Epoch 00001: val_loss improved from inf to 1.42660, saving model to CNN.hdf5\n", "Epoch 2/20\n", "45000/45000 [==============================] - 21s 471us/step - loss: 1.1817 - acc: 0.5759 - inTop3: 0.8638 - val_loss: 1.1185 - val_acc: 0.5998 - val_inTop3: 0.8832\n", "\n", "Epoch 00002: val_loss improved from 1.42660 to 1.11855, saving model to CNN.hdf5\n", "Epoch 3/20\n", "45000/45000 [==============================] - 21s 469us/step - loss: 0.9773 - acc: 0.6543 - inTop3: 0.9009 - val_loss: 0.9635 - val_acc: 0.6580 - val_inTop3: 0.9110\n", "\n", "Epoch 00003: val_loss improved from 1.11855 to 0.96349, saving model to CNN.hdf5\n", "Epoch 4/20\n", "45000/45000 [==============================] - 21s 470us/step - loss: 0.8550 - acc: 0.6995 - inTop3: 0.9207 - val_loss: 0.9299 - val_acc: 0.6812 - val_inTop3: 0.9136\n", "\n", "Epoch 00004: val_loss improved from 0.96349 to 0.92986, saving model to CNN.hdf5\n", "Epoch 5/20\n", "45000/45000 [==============================] - 22s 489us/step - loss: 0.7702 - acc: 0.7290 - inTop3: 0.9344 - val_loss: 0.8832 - val_acc: 0.6930 - val_inTop3: 0.9106\n", "\n", "Epoch 00005: val_loss improved from 0.92986 to 0.88320, saving model to CNN.hdf5\n", "Epoch 6/20\n", "45000/45000 [==============================] - 26s 578us/step - loss: 0.7091 - acc: 0.7509 - inTop3: 0.9421 - val_loss: 0.8118 - val_acc: 0.7318 - val_inTop3: 0.9282\n", "\n", "Epoch 00006: val_loss improved from 0.88320 to 0.81175, saving model to CNN.hdf5\n", "Epoch 7/20\n", "45000/45000 [==============================] - 26s 577us/step - loss: 0.6538 - acc: 0.7704 - inTop3: 0.9500 - val_loss: 0.8521 - val_acc: 0.7114 - val_inTop3: 0.9214\n", "\n", "Epoch 00007: val_loss did not improve from 0.81175\n", "Epoch 8/20\n", "45000/45000 [==============================] - 26s 580us/step - loss: 0.6164 - acc: 0.7822 - inTop3: 0.9541 - val_loss: 0.7688 - val_acc: 0.7430 - val_inTop3: 0.9356\n", "\n", "Epoch 00008: val_loss improved from 0.81175 to 0.76878, saving model to CNN.hdf5\n", "Epoch 9/20\n", "45000/45000 [==============================] - 26s 578us/step - loss: 0.5764 - acc: 0.7988 - inTop3: 0.9590 - val_loss: 0.8137 - val_acc: 0.7396 - val_inTop3: 0.9286\n", "\n", "Epoch 00009: val_loss did not improve from 0.76878\n", "Epoch 10/20\n", "45000/45000 [==============================] - 25s 547us/step - loss: 0.5563 - acc: 0.8052 - inTop3: 0.9631 - val_loss: 0.8132 - val_acc: 0.7302 - val_inTop3: 0.9232\n", "\n", "Epoch 00010: val_loss did not improve from 0.76878\n", "Epoch 11/20\n", "45000/45000 [==============================] - 26s 571us/step - loss: 0.5389 - acc: 0.8100 - inTop3: 0.9644 - val_loss: 0.8488 - val_acc: 0.7304 - val_inTop3: 0.9280\n", "\n", "Epoch 00011: val_loss did not improve from 0.76878\n", "Epoch 12/20\n", "45000/45000 [==============================] - 21s 475us/step - loss: 0.5132 - acc: 0.8212 - inTop3: 0.9676 - val_loss: 0.8299 - val_acc: 0.7444 - val_inTop3: 0.9314\n", "\n", "Epoch 00012: val_loss did not improve from 0.76878\n", "Epoch 13/20\n", "45000/45000 [==============================] - 21s 468us/step - loss: 0.5032 - acc: 0.8251 - inTop3: 0.9690 - val_loss: 0.9105 - val_acc: 0.7332 - val_inTop3: 0.9286\n", "\n", "Epoch 00013: val_loss did not improve from 0.76878\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "cnn_m=get_CNNres(x_tan,y_tan,3,4)\n", "nndo=tanitas_earlystop(cnn_m, x_tan, y_tan, 20, 5)\n", "halo_mentes(cnn_m,'cnn_res')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Tanítsuk egy kicsit augmentált adatokkal is a hálót." ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "scrolled": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Eredeti kep:\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n", "Augmentalt kepek:\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 1/25\n", "1406/1406 [==============================] - 20s 14ms/step - loss: 0.9408 - acc: 0.6727 - inTop3: 0.9052 - val_loss: 0.8932 - val_acc: 0.6978 - val_inTop3: 0.9096\n", "\n", "Epoch 00001: val_loss improved from inf to 0.89320, saving model to cnn_aug.hdf5\n", "Epoch 2/25\n", "1406/1406 [==============================] - 23s 16ms/step - loss: 0.8946 - acc: 0.6887 - inTop3: 0.9127 - val_loss: 0.7448 - val_acc: 0.7392 - val_inTop3: 0.9288\n", "\n", "Epoch 00002: val_loss improved from 0.89320 to 0.74476, saving model to cnn_aug.hdf5\n", "Epoch 3/25\n", "1406/1406 [==============================] - 22s 16ms/step - loss: 0.8652 - acc: 0.7008 - inTop3: 0.9171 - val_loss: 0.7933 - val_acc: 0.7358 - val_inTop3: 0.9312\n", "\n", "Epoch 00003: val_loss did not improve from 0.74476\n", "Epoch 4/25\n", "1406/1406 [==============================] - 22s 16ms/step - loss: 0.8478 - acc: 0.7079 - inTop3: 0.9198 - val_loss: 0.7355 - val_acc: 0.7440 - val_inTop3: 0.9322\n", "\n", "Epoch 00004: val_loss improved from 0.74476 to 0.73551, saving model to cnn_aug.hdf5\n", "Epoch 5/25\n", "1406/1406 [==============================] - 22s 16ms/step - loss: 0.8320 - acc: 0.7128 - inTop3: 0.9201 - val_loss: 0.7184 - val_acc: 0.7590 - val_inTop3: 0.9354\n", "\n", "Epoch 00005: val_loss improved from 0.73551 to 0.71840, saving model to cnn_aug.hdf5\n", "Epoch 6/25\n", "1406/1406 [==============================] - 22s 16ms/step - loss: 0.8218 - acc: 0.7175 - inTop3: 0.9238 - val_loss: 0.6949 - val_acc: 0.7640 - val_inTop3: 0.9406\n", "\n", "Epoch 00006: val_loss improved from 0.71840 to 0.69486, saving model to cnn_aug.hdf5\n", "Epoch 7/25\n", "1406/1406 [==============================] - 22s 16ms/step - loss: 0.8061 - acc: 0.7227 - inTop3: 0.9274 - val_loss: 0.8566 - val_acc: 0.7160 - val_inTop3: 0.9258\n", "\n", "Epoch 00007: val_loss did not improve from 0.69486\n", "Epoch 8/25\n", "1406/1406 [==============================] - 22s 16ms/step - loss: 0.7927 - acc: 0.7297 - inTop3: 0.9281 - val_loss: 0.7200 - val_acc: 0.7578 - val_inTop3: 0.9380\n", "\n", "Epoch 00008: val_loss did not improve from 0.69486\n", "Epoch 9/25\n", "1406/1406 [==============================] - 22s 16ms/step - loss: 0.7760 - acc: 0.7329 - inTop3: 0.9304 - val_loss: 0.7576 - val_acc: 0.7390 - val_inTop3: 0.9312\n", "\n", "Epoch 00009: val_loss did not improve from 0.69486\n", "Epoch 10/25\n", "1406/1406 [==============================] - 22s 16ms/step - loss: 0.7877 - acc: 0.7281 - inTop3: 0.9283 - val_loss: 0.7110 - val_acc: 0.7674 - val_inTop3: 0.9452\n", "\n", "Epoch 00010: val_loss did not improve from 0.69486\n", "Epoch 11/25\n", "1406/1406 [==============================] - 22s 16ms/step - loss: 0.7691 - acc: 0.7359 - inTop3: 0.9324 - val_loss: 0.7858 - val_acc: 0.7428 - val_inTop3: 0.9250\n", "\n", "Epoch 00011: val_loss did not improve from 0.69486\n", "Epoch 12/25\n", "1406/1406 [==============================] - 22s 16ms/step - loss: 0.7678 - acc: 0.7347 - inTop3: 0.9309 - val_loss: 0.7295 - val_acc: 0.7554 - val_inTop3: 0.9386\n", "\n", "Epoch 00012: val_loss did not improve from 0.69486\n", "Epoch 13/25\n", "1406/1406 [==============================] - 19s 13ms/step - loss: 0.7687 - acc: 0.7357 - inTop3: 0.9308 - val_loss: 0.7073 - val_acc: 0.7700 - val_inTop3: 0.9404\n", "\n", "Epoch 00013: val_loss did not improve from 0.69486\n", "Epoch 14/25\n", "1406/1406 [==============================] - 18s 13ms/step - loss: 0.7617 - acc: 0.7408 - inTop3: 0.9311 - val_loss: 0.7417 - val_acc: 0.7510 - val_inTop3: 0.9368\n", "\n", "Epoch 00014: val_loss did not improve from 0.69486\n", "Epoch 15/25\n", "1406/1406 [==============================] - 17s 12ms/step - loss: 0.7488 - acc: 0.7402 - inTop3: 0.9336 - val_loss: 0.7326 - val_acc: 0.7530 - val_inTop3: 0.9290\n", "\n", "Epoch 00015: val_loss did not improve from 0.69486\n", "Epoch 16/25\n", "1406/1406 [==============================] - 17s 12ms/step - loss: 0.7533 - acc: 0.7445 - inTop3: 0.9334 - val_loss: 0.7428 - val_acc: 0.7614 - val_inTop3: 0.9306\n", "\n", "Epoch 00016: val_loss did not improve from 0.69486\n" ] } ], "source": [ "cnn_m=tanitas_augment(cnn_m, x_tan, y_tan, 25, 10)\n", "halo_mentes(cnn_m,'cnn_res_aug')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Eddigi legjobb pontosságot így értük el: 0.7-es validacios loss-al, és 75 % feletti validacios pontossággal.\n", "Kérdés: dropout alkalmazása hogyan lenne célszerű?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 5.) Háló tesztelése" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A már ismert módon teszteljük le a betanított hálót!" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [], "source": [ "from sklearn.metrics import confusion_matrix\n", "\n", "def teszt(halo, x_test, y_test):\n", " \n", " tmp=halo.evaluate(x_test,y_test)\n", " \n", " y_pred=np.argmax(halo.predict(x_test),axis=1)\n", " print('Confusion Matrix:')\n", " print(confusion_matrix(np.argmax(y_test, axis=1), y_pred))\n", " print()\n", " print('Loss:'+str(tmp[0])+'; Acc:'+str(tmp[1])+'; Top3Acc:'+str(tmp[2]))\n", " print()\n", " return({'loss':tmp[0], 'acc':tmp[1], 'top3acc':tmp[2]})" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "10000/10000 [==============================] - 1s 120us/step\n", "Confusion Matrix:\n", "[[706 32 53 28 10 6 6 19 80 60]\n", " [ 3 908 2 1 0 4 0 1 11 70]\n", " [ 55 10 654 42 45 74 50 37 13 20]\n", " [ 14 22 57 533 41 149 55 65 25 39]\n", " [ 24 8 62 77 585 34 40 144 16 10]\n", " [ 9 9 47 133 27 650 27 71 8 19]\n", " [ 11 24 34 63 31 26 771 15 10 15]\n", " [ 9 5 17 29 18 35 8 852 6 21]\n", " [ 47 38 8 4 1 3 1 6 854 38]\n", " [ 8 72 3 2 0 3 1 9 12 890]]\n", "\n", "Loss:0.7909698890686035; Acc:0.7403; Top3Acc:0.9312\n", "\n" ] }, { "data": { "text/plain": [ "{'loss': 0.7909698890686035, 'acc': 0.7403, 'top3acc': 0.9312}" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "teszt(cnn_m,x_tst,y_tst)" ] }, { "cell_type": "code", "execution_count": 53, "metadata": {}, "outputs": [], "source": [ "K.clear_session()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Copyright (c) 2018 Hadházi Dániel BME-MIT" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.5" } }, "nbformat": 4, "nbformat_minor": 2 }