{ "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.095\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: [1, 8, 9, 8, 9]\n", "Cimkehez tartozo osztalyok: ['auto', 'ship', 'truck', 'ship', '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: Keras rétegek dokumentációja - https://keras.io/layers/core/\n" ] }, { "cell_type": "code", "execution_count": 5, "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": 6, "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": 7, "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 [==============================] - 11s 248us/step - loss: 1.5628 - acc: 0.4331 - inTop3: 0.7481 - val_loss: 1.2285 - val_acc: 0.5652 - val_inTop3: 0.8530\n", "\n", "Epoch 00001: val_loss improved from inf to 1.22853, saving model to CNN.hdf5\n", "Epoch 2/15\n", "45000/45000 [==============================] - 10s 230us/step - loss: 1.0834 - acc: 0.6150 - inTop3: 0.8825 - val_loss: 1.0177 - val_acc: 0.6446 - val_inTop3: 0.8904\n", "\n", "Epoch 00002: val_loss improved from 1.22853 to 1.01769, saving model to CNN.hdf5\n", "Epoch 3/15\n", "45000/45000 [==============================] - 10s 230us/step - loss: 0.9053 - acc: 0.6811 - inTop3: 0.9139 - val_loss: 0.9451 - val_acc: 0.6780 - val_inTop3: 0.9090\n", "\n", "Epoch 00003: val_loss improved from 1.01769 to 0.94510, saving model to CNN.hdf5\n", "Epoch 4/15\n", "45000/45000 [==============================] - 10s 230us/step - loss: 0.7882 - acc: 0.7218 - inTop3: 0.9340 - val_loss: 0.8682 - val_acc: 0.7096 - val_inTop3: 0.9188\n", "\n", "Epoch 00004: val_loss improved from 0.94510 to 0.86822, saving model to CNN.hdf5\n", "Epoch 5/15\n", "45000/45000 [==============================] - 10s 230us/step - loss: 0.6959 - acc: 0.7522 - inTop3: 0.9472 - val_loss: 0.9375 - val_acc: 0.6776 - val_inTop3: 0.9122\n", "\n", "Epoch 00005: val_loss did not improve from 0.86822\n", "Epoch 6/15\n", "45000/45000 [==============================] - 10s 230us/step - loss: 0.6246 - acc: 0.7777 - inTop3: 0.9570 - val_loss: 1.0055 - val_acc: 0.6782 - val_inTop3: 0.9112\n", "\n", "Epoch 00006: val_loss did not improve from 0.86822\n", "Epoch 7/15\n", "45000/45000 [==============================] - 10s 230us/step - loss: 0.5496 - acc: 0.8066 - inTop3: 0.9673 - val_loss: 0.9680 - val_acc: 0.6912 - val_inTop3: 0.9082\n", "\n", "Epoch 00007: val_loss did not improve from 0.86822\n", "Epoch 8/15\n", "45000/45000 [==============================] - 10s 230us/step - loss: 0.4933 - acc: 0.8257 - inTop3: 0.9732 - val_loss: 0.9751 - val_acc: 0.7014 - val_inTop3: 0.9202\n", "\n", "Epoch 00008: val_loss did not improve from 0.86822\n", "Epoch 9/15\n", "45000/45000 [==============================] - 10s 230us/step - loss: 0.4472 - acc: 0.8421 - inTop3: 0.9778 - val_loss: 1.1195 - val_acc: 0.6748 - val_inTop3: 0.9030\n", "\n", "Epoch 00009: val_loss did not improve from 0.86822\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYUAAAEWCAYAAACJ0YulAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvIxREBQAAIABJREFUeJzt3Xl4VOX1wPHvCQTZEdkREFwQZAsQkIogAlpcWJVN3FBBqYqIbaG1FbW21VYtPxW0uFRbFkHAtVhUZHEXUGQRFRGQsG+yCEgSzu+PM1mI2TOTO8mcz/PMQ+bOnTsnIZkz73ZeUVWcc845gLigA3DOORc9PCk455xL50nBOedcOk8Kzjnn0nlScM45l86TgnPOuXSeFFzME5EbReT1oOPIjoj0EpFvi/u5LnZ5UnAlgogcynQ7LiJHMt0fVpRrq+qzqto79DrlRURFpEF4IneuZCkbdADO5YeqVk77WkQ2Ajep6jvBRRR5IuJ/n67YeUvBlQoi0llEPhGRH0Rkq4j8I+1NNdOn/5Eisl5E9onIPzI99xYRSUswS0L/fh1qhfQLnXNr6Ll7RGSuiNTJJZabRGSziOwSkd+KyHYROT/0WAURmSQi20QkSUT+LiLxocd6ici3IvJHEdkBPJnpmveJyF4R2SAiAzMdryAiE0Ovt11EHheRk3KI6zcislJE6hbqh+xigicFV1okA7cBNYAuQG/gpizn9ALaAu2A4SLSLZvrdA39e7aqVlbVV0TkUuCPQH/gVGA38J/sghCRtsCjwECgQehWM9Mp9wGtgVZAe6Ab8NtMjzcG4oGGwOhMx8oBdYERwAsi0iT02KOh12gFnA00BcZnE9dfgCuBbqq6PbvYnQNPCq6UUNVPVXWpqqaq6nrgGeCCLKf9RVUPqOoGrEWQkM/LDwOmqOpKVT2KvYn3zOET90Bgjqp+rKo/AX/gxL+zYcAEVd2tqjuAB4BrMj3+E/AnVT2mqkdCx1KA+0LH3gHeAa4MtYRuBO5Q1R9UdT/wIDAk0/VERCYBvwB6qurefH7PLkZ5n6UrFUTkHOARrBVQAfvd/iDLaZk/IR8GKpM/9YF30+6o6g8icgBrNWT91F0f+D7TuQdEZH8oRsE+7W/KdP6m0HXSY1TV5CzX3BVKRpmfUz90iwfW2KUBECyJpKkNDAd6q+rBvL9VF+u8peBKi6eBz4AzVLUqcD/2BllQ2ZUN3gqclnZHRE4GqgJbsjl3G9adk3ZuVaAagFpJ4u2ZrwU0ynKd7F6/poiUz/KcraHXSsG+55NDt2qqWiPTuTuAfsB0EemQzbWdO4EnBVdaVAH2q+ohEWmB9b0XWKjLZz9weqbDM4ARItIy9Ob8IPBuDn3zs4ArRKSDiJTDktPxLNeaICI1RKQ2cDcwNY+w4oE/ikg5EekOXIR1USUDzwH/JyI1xTQUkYuyfE9vATcAr4fGPJzLkScFV1rcCdwkIoeAScDMIlzrHuCl0EymPqr6BvBX4DXsE3pdThwHSKeqnwO/AV7GWgDbsCTzU6ZrfwmsAVZgXVx/yyOejViLYDuWBIar6nehx8aEYloWep3/AWdmE9d/gVHAmyLSOo/XczFMfJMd5yJHRKoDe4H6qrot6Hicy4u3FJwLMxHpE1o/UBmbMvqJJwRXUnhScC78BmJdPUnYzKIileFwrjh595Fzzrl03lJwzjmXLmKL10TkOeByYKeqtszhnG7ARGzK3W5VzboC9Wdq1qypjRs3DmOkzjlX+i1fvny3qtbK67xIrmh+HngC+Hd2D4YWAE0Geqnq96E523lq3Lgxy5YtC1uQzjkXC0RkU95nRbD7SFWXYFPxcnIVMFdVvw+dvzNSsTjnnMufIMcUmgLVRWSRiCwXkWsDjMU55xzBFsQri5UO7oEVMPtIRD5W1W+ynigiI4GRAI0aNSrWIJ1zLpYEmRSSgD2q+iPwo4gsAdoAP0sKqjoFmAKQmJj4szm0ycnJJCUlcfTo0awPuUIqX748DRo0ID4+PuhQnHPFKMik8CrwRKgmfDngXOAfuT8le0lJSVSpUoXGjRuTqYSwKyRVZc+ePSQlJdGkSZO8n+CcKzUiOSV1BrarVE0RSQImYFNPUdWnVHWtiPwPWIlVkXxGVVcX5rWOHj3qCSGMRIQaNWqwa9euoENxzhWziCUFVR2aj3P+Dvw9HK/nCSG8/OfpXGyKmRXNR4/C5s1w/Hje5zrnXKyKqaSwYwfs2xf+a//www9Mnjy50M+/5557eOeddwCYOHEihw8fDldozjlXIDGTFKpVg/LlLTGEuwZgUZPC/fffT8+ePQFPCs65YMVMUhCBOnXg8GE4dCi81x4/fjzr168nISGBO++8kx49etCuXTtatWrFq6++CsDGjRtp3rw5I0aMoEWLFlx88cUcOXIEgOuvv57Zs2fz2GOPsXXrVi688EIuvPBCAGbMmEGrVq1o2bIl48aNC2/gzjmXRZBTUiNizBhYsSLnxw8dgjJloEKF/F8zIQEmTsz58QcffJDVq1ezYsUKUlJSOHz4MFWrVmX37t106tSJPn36ALBu3TpmzJjB008/zaBBg5gzZw5XX311+nVGjx7No48+ysKFC6lZsyZbt25l3LhxLF++nOrVq3PxxRfzyiuv0K9fv/wH75xzBRAzLYU08fGQkhK5AWdV5fe//z2tW7emZ8+ebNmyhR07dgDQpEkTEhISAGjfvj0bN27M9VpLly6lW7du1KpVi7JlyzJs2DCWLFkSmcCdc45S2FLI7RM9QHIyrFwJNWvCaaeF//WnTZvGrl27WL58OfHx8TRu3Dh9pfVJJ52Ufl6ZMmXSu4+ccy5axGRLoUYN2L3bEkQ4VKlShYMHDwKwf/9+ateuTXx8PAsXLmTTpnxVq832Wh07dmTx4sXs3r2b1NRUZsyYwQUX5LnlhHPOFVqpaynkR506lhR27YL69Yt+vRo1atC5c2datmxJhw4d+Oqrr2jVqhWJiYk0a9asQNcaOXIkvXr1on79+ixcuJAHH3yQCy+8EFXlsssuo2/fvkUP2DnnclDi9mhOTEzUrJvsrF27lubNmxfoOuvWwY8/QuvWEBdz7aX8KczP1TkXnURkuaom5nVezL4d1qljA8579gQdiXPORY+YTQpVqti01EgsZnPOuZIqZpNC2mK2o0fhwIGgo3HOuegQs0kB4JRTbDZSaBmBc87FvJhOCnFxULu2tRS83JBzzsV4UgCoVcuSg7cWnHPOkwJly9rq5r174dix4nnNypUrA7B161auvPLKbM/p1q0bWafe5seyZcsYPXp0keJzzsWumFy8llXt2rBzpy1mO/XU4nvd+vXrM3v27LBeMzExkcTEPKciO+dctmK+pQC2z8LJJ1tiSE0t+PPHjx/PpEmT0u/fe++9PPDAA9mW0M5s48aNtGzZEoAjR44wZMgQmjdvTv/+/U+oizRq1CgSExNp0aIFEyZMSD++dOlSzjvvPNq0aUPHjh05ePAgixYt4vLLLwdg79699OvXj9atW9OpUydWrlwJwOLFi0lISCAhIYG2bduml9VwzrnS11LIq3Z2Dpqk2mBzankoE5/lwTxqZw8ePJgxY8Zw6623AjBr1izmz5/P6NGjf1ZCO6e9j5988kkqVqzI2rVrWblyJe3atUt/7M9//jOnnHIKqamp9OjRg5UrV9KsWTMGDx7MzJkz6dChAwcOHKBClnrgEyZMoG3btrzyyiu8++67XHvttaxYsYKHH36YSZMm0blzZw4dOkT58uUL/PNyzpVOpS8pFFJcGbsdO2bTVAuybX3btm3ZuXMnW7duZdeuXVSvXp26dety5513smTJEuLi4tJLaNetWzfbayxZsiR9LKB169a0bt06/bFZs2YxZcoUUlJS2LZtG19++SUiQr169ejQoQMAVatW/dk133//febMmQNA9+7d2bNnDwcOHKBz586MHTuWYcOGMWDAABo0aFCA79Y5V5qVvqSQV+3sHAjw01747js44wyoXr1gzx84cCCzZ89m+/btDB48ONcS2gWxYcMGHn74YZYuXUr16tW5/vrrC3WdzMaPH89ll13GvHnz6Ny5M/Pnzy9w4T7nXOnkYwqZVK8O5coVbnrq4MGDefHFF5k9ezYDBw4scAntrl27Mn36dABWr16d3v9/4MABKlWqRLVq1dixYwdvvvkmAGeffTbbtm1j6dKlABw8eJCUlJQTrtmlSxemTZsGwKJFi6hZsyZVq1Zl/fr1tGrVinHjxqVXdXXOOSiNLYUiSCt9sXmzVVCtVCn/z23RogUHDx7k1FNPpV69egwbNozevXvnu4T2qFGjGD58OM2bN6d58+a0b98egDZt2tC2bVuaNWtGw4YN6dy5MwDlypVj5syZ3H777Rw5coQKFSrwzjvvnHDNe++9lxtuuIHWrVtTsWJFXnjhBQAmTpzIwoULiYuLo0WLFlxyySUF+Ck550qzmC2dnZPUVNuZrWpV60aKZV4627nSw0tnF1KZMraYbd8++OmnoKNxzrni5UkhG7Vr2787dwYbh3POFbeIJQUReU5EdorI6jzO6yAiKSKSfb2HfApnN9hJJ1kF1V27bCOeWFTSuhWdc+ERyZbC80Cv3E4QkTLAQ8BbRXmh8uXLs2fPnrC+kdWpA8eP217OsUZV2bNnjy9qcy4GRWz2kaouEZHGeZx2OzAH6FCU12rQoAFJSUns2rWrKJf5mYMHYdUqK5aXw0LkUqt8+fK+qM25GBTYlFQRORXoD1xIHklBREYCIwEaNWr0s8fj4+Np0qRJ2GNctw769oUZM2DIkLBf3jnnok6QA80TgXGqejyvE1V1iqomqmpirVq1iiE0c/nlcNZZ8Mgjvo+zcy42BJkUEoEXRWQjcCUwWUT6BRjPz8TFwZ13wrJl8N57QUfjnHORF1hSUNUmqtpYVRsDs4FfqeorQcWTk+uugxo14NFHg47EOeciL5JTUmcAHwFni0iSiNwoIreIyC2Res1IqFgRRo2C116zMQbnnCvNSkWZi0jbvh1OOw1uvBEmTy7Wl3bOubDwMhdhVLcuDBsGzz8Pe/YEHY1zzkWOJ4V8GjsWjhyBp54KOhLnnIscTwr51LIlXHwxPPGEF8pzzpVenhQK4K67bHxhxoygI3HOucjwpFAAF11kLYZHH/XFbM650smTQgGI2NjCqlXw9ttBR+Occ+HnSaGArrrKZiP5YjbnXGnkSaGATjoJbrsN5s+H1bnuFOGccyWPJ4VCuOUWqFDBWwvOudLHk0Ih1KgB118P06bZbCTnnCstPCkU0pgxkJwMkyYFHYlzzoWPJ4VCatoUeveGJ5+Ew4eDjsY558LDk0IR3HWX1UL697+DjsQ558LDk0IRdOkCiYnwj3/A8Tz3j3POuejnSaEI0hazffMNvPFG0NE451zReVIooiuvhIYNfXqqc6508KRQRPHxcMcdsHgxLF8edDTOOVc0nhTC4KaboEoVeOSRoCNxzrmi8aQQBtWqWWKYNQs2bw46GuecKzxPCmFyxx1WTvuxx4KOxDnnCs+TQpicdpoNOk+ZAgcOBB2Nc84VjieFMLrrLksIzz0XdCTOOVc4nhTCqGNHOP98mDgRUlKCjsY55woudpJCSgq89FLE99EcOxY2bYK5cyP6Ms45FxGxkxT+9S8YNAj++MeIJoY+feCMM2x6qu/j7JwraWInKdx4I4wYAX/+M4wfH7F37DJl4M474dNP4cMPI/ISzjkXMRFLCiLynIjsFJFsN60UkWEislJEVonIhyLSJlKxABAXB089BaNGwd/+ZqPCEUoM118P1av7YjbnXMkTyZbC80CvXB7fAFygqq2APwFTIhiLiYuzXXFuv91Km6YtLgizSpVsy85XXoH168N+eeeci5iIJQVVXQLszeXxD1V1X+jux0CDSMVyAhH4v/+zEeHHH4dbb41I3evbboOyZW0mknPOlRTRMqZwI/Bmsb2aCDz8MIwbZ1un3Xxz2BND/fowdKitWdibY2p0zrnoEnhSEJELsaQwLpdzRorIMhFZtmvXrnC9MPz1r3D33fDMMzYQnZoanmuHjB1rW3VOiXzHmHPOhUWgSUFEWgPPAH1VdU9O56nqFFVNVNXEWrVqhTMA+NOf4N574fnnYfjwsCaGNm2gZ0/rpTp2LGyXdc65iAksKYhII2AucI2qfhNUHIjAhAnwwAPwn//A1VeHdTny2LGwdSu8+GLYLumccxFTNlIXFpEZQDegpogkAROAeABVfQq4B6gBTBYRgBRVTYxUPHm6+24bGR4/3pLC9Om2g04R9eoF55xjO7Ndc43lIOeci1YRSwqqOjSPx28CborU6xfKuHGWCO66y7qRXnwRypUr0iXT9nG+6SZ4913o0SNMsTrnXAQEPtAcdcaOtSmrL79stbB/+qnIlxw2DGrX9sVszrno50khO6NHw+TJ8PrrMGAAHD1apMuVL2/LId58E778MkwxOudcBHhSyMmoUTaXdN486NsXjhwp8uXKl7eF1M45F608KeRmxAhbffb223D55bbooJBq1YJrr7UJTjt2hDFG55wLI08KeRk+HF54ARYtgksvhUOHCn2pO++0IYonnwxfeM45F06eFPLjmmtg6lR4/3245BI4eLBQl2nWzBockyYVuTfKOeciwpNCfg0dCjNmwEcfwcUXw/79hbrM2LGwe7d1IznnXLTxpFAQAwfCrFmwbBlcdBH88EOBL9GtG7RtawPOESjO6pwrrQ4ehOTkiL+MJ4WCGjAA5syBFStsJVoBS6CK2Nq4r76yKarOOZend9+FVq3gwQcj/lKeFAqjTx/bQWfNGuje3fqDCmDQIDj1VF/M5pzLw6FDtjlLjx5WXaF794i/pCeFwrr0Unj1Vfj6a/uP2rkz30+Nj7f1cQsXwuefRzBG51zJtWSJlVqePBnGjLHeic6dI/6ynhSK4pe/hDfegG+/hQsvhO3b8/3UkSOhcmUrlOecc+kOH7Yk0K2b3V+0yAYhK1Yslpf3pFBUPXrYqudNm+w/cevWfD3t5JNtX58XX4SkpMiG6JwrIT74ABISrP7ar34FK1dC167FGoInhXDo1s1Gjbdssa/z+S5/xx02A+nxxyManXMu2h05Ar/+NXTpYjtyLVgATzwBlSoVeyieFMKlSxeYP9+6kC64wFoOeWjSxCYz/fOfEK5dRp1zJcwnn0C7djbzZORIWLWqWAaUc+JJIZzOOw/eeQf27LHEsGFDnk/53e+sCGunTl5B1bmY8tNP9gZw3nnw44/2ofKpp6BKlUDD8qQQbh07WtPvwAFLDOvX53p6u3Y2jvTjj5YY5s0rnjCdcwFavhzat7d1B9dfb62Diy8OOirAk0JktG9vi00OH7bE8E3uW1B36gRLl8KZZ1ptpEceAdViitU5V3yOHYN77oFzz4V9++C//4Vnn4Vq1YKOLJ0nhUhJSLDE8NNPNvj81Ve5nt6wIbz3no0x/PrXNjMpDJu+OeeixYoV0KED/OlPth3j6tW23inKeFKIpNatrW/o+HFLDGvW5Hp6pUpWWumee+Bf/7LZrgVYE+eci0bJyXD//ZYQdu60Ra8vvADVqwcdWbY8KURaixaWGOLibIHbypW5nh4XB/fdZ+sXli+3IYo8nuKci1arV1v/8IQJVt9m9WorkxPF8pUUROQMETkp9HU3ERktIidHNrRSpFkzSwxptUtWrMjzKYMHW3dScrJNTnj11ciH6ZwLk5QU+OtfbSbJ5s1WRHPaNKhRI+jI8pTflsIcIFVEzgSmAA2B6RGLqjRq2hQWL7al6t27WzMgD4mJNgB9zjnQv7/9jvkAtHNRbu1a+yT3+99Dv37WbTxgQNBR5Vt+k8JxVU0B+gOPq+pvgHqRC6uUOuMMSwzVqtmAwaef5vmU+vXtKYMH2+/YNdfYugbnXJRJTYW//902TPnuO5g50wYJa9UKOrICyW9SSBaRocB1wBuhY/GRCamUa9LEupJq1LCNej76KM+nVKgA06fDAw9YC7RbN9i2LeKROufy6+uvrarBb39rW/auWWNjCCVQfpPCcOAXwJ9VdYOINAF8Q8nCOu00+/hfu7YtWHnvvTyfIgJ33w1z59o6l44d4bPPiiFW51zOjh+3CqYJCTbtfNo0+yOtUyfoyAotX0lBVb9U1dGqOkNEqgNVVPWhCMdWujVoYInh1FOtBPcNN9gy9zy22+vf3wopisD558Ps2cUUr3PuRN9+a832sWOhZ09rHVx1lf1xlmD5nX20SESqisgpwGfA0yKS604AIvKciOwUkdU5PC4i8piIfCsiK0WkXcHDL+Hq17eupIED7d29Vy+oV8+KYr3zjs1gyEZCgg1AJyTYU++/3wegnSs2x49bBdM2bWy++PPPw2uv2d9uKZDf7qNqqnoAGAD8W1XPBXrm8ZzngV65PH4JcFboNhJ4Mp+xlC5169pClp07bYvPX/4SZsyw8Yb69WHUKEscqaknPK1OHdu57dprbQr0kCFWVcO5dN9/b3X5e/eG4cOtfspbb9mAlH+KKJwNG2ySyO232z4Hq1fDddeV+NbBCVQ1zxuwCptt9BbQIXRsZT6e1xhYncNj/wSGZrr/NVAvr2u2b99eS73Dh1Vnz1YdNEi1YkVVUK1bV/W221Tfe081NTX91OPHVf/2N1UR1XbtVDdvDjBuF6zjx1XXrFF94AHV9u3t9wZUzzpLtU6djPugesopqhdcYL9TTz2l+sEHqj/8EPR3EL2OH7efU+XKqlWqqD7zjB0rQYBlmp/3+3ydBAOBlcCTofunA3Py8bzcksIbwPmZ7i8AEnM4dySwDFjWqFGjCP7YotChQ6ozZ6oOGKBavrz9l516quqYMaoffpj+i/n66/b7Wq+e6iefBByzKz6pqaoff6w6bpxq06YZb/qdOqk+9JDqN99knLtzp+q776r+3/+pjhhh51SufGKyaNRI9bLL7HpTp6p+8YXq0aPBfX/RYNMm1Z497efTs6fdL4HymxREI9iMFJHGwBuq2jKbx94AHlTV90P3FwDjVHVZbtdMTEzUZctyPaX0OngQXn/d5j6/+aZVXGzUyAYWBg9mdflEevcRtm2D556zMS9XCiUn2ySFl1+2LsetW6FsWSuj0r8/9O1rXY/5cfy4dTOtWmVdIatW2e2rrzLGtMqWtcWXrVpBy5b2b6tW0Lix1WUprVTtD+nOO+3nlLYJTgntKhKR5aqamOd5+UkKItIAeBzoHDr0HnCHqua672QeSeGfwCJVnRG6/zXQTVVznYEf00khs/37bXBr5kzrJ05OhiZNOHz5IEZ/MJhnP0vg7ruF++8v3X+3MePwYft/njsX3njDyi5XqGCTEwYMgMsuC2+BtWPHrOR71mSxcWPGOZUqWW2vzImiZcsSPR0zXVISjBgB//ufzTB67jlbY1SChTspvI2VtUhbm3A1MExVL8rjeY3JOSlcBtwGXAqcCzymqh3zisWTQjb27bNPjDNn2qyl1FR2VD2Tpw8MZveFg3jg1VZUrlIyP93EtH37LAG8/LK9OR05Ym/8vXtbi+Dii61sSnE6eNCmXmZOFKtWwe7dGefUqvXzVkWLFlC5cvHGmtnx41YK4OhR+zlm/Trzsc2bbUpfcjI89BD86lel4pNVuJPCClVNyOtYlsdnAN2AmsAOYAKhVdCq+pSICPAENkPpMDA8r64j8KSQp9274eWX0Vmz0AXvEqfH+e6kZpxy8yBOvnmwFVJy0WvrVkvwL79ss85SUmwtS79+lgi6doX4KCwmsGPHia2K1avtlnlKXJMmJyaLc86Bk07K+c05nMeOHSvY93P++Va//swzw/tzClC4k8IC4F/AjNChodibeI8iRVkInhQKYOdO1jwwl72TZ9I5dTFxqP1BDhpkt7PPDjpCB9ZN8/LLdvvkEzvWtKklgQEDrDJiSfykevy4TeHM3KpYvdpKQmSZYp0vcXHWZVa+vN2y+zq/x3J7vGJFqzpQEn/muQh3UjgNG1P4BaDAh8Dtqrq5qIEWlCeFgvvqKxh+yXbO3Tyb350+kzrr3rcH2rSx5DB4sBXrc8VDFT7/3JLA3Lnw5Zd2vH17SwT9+0Pz5iV2QDNPP/1kiWHtWksc+X2zLlu29P5MikFYk0IOLzBGVScW6slF4EmhcPbutUlK774L99+8hbubvkTc7FkZBfnat89oQTRuHGispVJqKrz/fsaMoU2b7JNo166WBPr1s5lkzkVIcSSF71W12H+LPSkUXnIyjBkDkyfbZJXp06Hqvk1WYmPmTKudAVZtb/BgyyINGwYbdEl29KgN/L/8ss0U273b+tAvvtgSQe/eULNm0FG6GFEcSWGzqhb7O4YnhaKbPBlGj7Yhhddfh9NPDz2wYYOtgZg1K6MEa9eucPXVcOWVUbunbFQ5cAD++19LBG++CYcOQdWqloX797eyykHOwnExy1sKLlcLFlhDIC7Odgq84IIsJ6xbZ62HqVOt/7dcOXtju/pquPRS6+d1Ztcu2y917lxrGSQn21z9vn0tEXTvbj8/5wIUlqQgIgexgeWfPQRUUNWyhQ+xcDwphM+6ddaDsX69tR5GjMjmJFVrNUydaoX6duywneMGDrQE0aVLqZulkS9btlhrYM4cWLLEBkybNLHZQv3722btZcoEHaVz6SLeUgiKJ4Xw+uEHq7A6f751KT3yiE3yyFZKio1UT51qn4p//NHGHK66yhJEy5+tUSxdvvvOksDcufDxx3bsnHMsEVxxhc3m8tkxLkp5UnD5lpICv/kNTJxoY6AzZ8LJJ+fxpB9/tMHTqVMto6SmQuvWlhyGDrVNhEo6VZsuOneuJYMvvrDj7dpZEhgwAJo1CzZG5/LJk4IrsGeesRX9p59u7/dNm+bziTt32uD01Km2+ErE6sVcfbW9eVarFsmwwyutuyytRfD11/b9nHeeJYEBA3zKriuRPCm4QlmyxN73UlPhpZdsl8ECWbfO5rpOnWrbFZ50kg1cXH21zbyJxgHX48dtvUZaIti0ycYDunXLGCMoJbtqudjlScEV2oYN9j7+1Vdw881wzz2FKHypausepk6FF1+0GTqnnJIxQH3eecEOUKeVn5471waMt2+3hHXRRda68TUErpTxpOCK5MABGDcOnn7aKgxFL0fgAAAUIUlEQVT89re2P3mlSoW4WHKyTdWcOtXegI8csS6YtAHq5s3DHX720haTzZlj/WN791qdm0svzSg/XbVq8cTiXDHzpODC4uuv4Xe/s/fyunXhvvvghhtymaGUl0OHrMzD1Knw9tvWddOuHQwbZgPU4e6mOXTIFpGl7UNw6JCNcfTubS2CIMpPOxcATwourD74wGYoffSRTbh56CF7Xy3SDMzt2zMWyC1bZt1JPXpYghgwAKpUKdx10/YhmDPHZkYdPWpdQf36WSLwxWQuBnlScGGnah/yx4+3as9dusDf/w7nnhuGi3/9NUybZgliwwbrs+rTx7qXfvnLvPcQ2LnTgps715Zrp+1DkDZj6Pzzi9C8ca7k86TgIiY5GZ59FiZMsPfiK6+Ev/wFzjorDBdXtebItGnWitizxz7lDxpkCaJTp4zmyebNGauK33/fuqJOP91aA1dcAR06xOZqa+ey4UnBRdzBg7YC+uGHrUR+2kyl2rXD9ALHjln3z7RpVlvo6FF707/sMlsP8emndl6LFhmLyVq39lXFzmXDk4IrNtu32wB0WGYq5eTAAesamjbNSm20bZuRCHwHOefy5EnBFbvMM5Xq1bNEMXx4BLryU1J8fMC5AspvUvAOVxc2Z59tH+bff9+WIYwcab05r71mQwVh4wnBuYjxpODCrnNnm8I6d66Vy+jb1/ZrSNuT3jkXvTwpuIgQsZJBq1fDk09a11KnTjaJ6Ntvg47OOZcTTwououLj4ZZbLBFMmADz5llVi9tvt+mszrno4knBFYsqVeDeey053HSTtR7OPBMeeMC2ZnDORQdPCq5Y1a1rCWHNGivL/cc/2qK3p5+2SUXOuWB5UnCByGmm0uuvh3mmknOuQCKaFESkl4h8LSLfisj4bB5vJCILReRzEVkpIpdGMh4XfdJmKs2ZYzOV+vSxvW18ppJzwYhYUhCRMsAk4BLgHGCoiJyT5bQ/ALNUtS0wBJgcqXhc9BKxhcmrV8Pkyba5j89Uci4YkWwpdAS+VdXvVPUY8CLQN8s5CqTtalIN2BrBeFyUi4+HUaN+PlNp9GjbuM05F3mRTAqnApsz3U8KHcvsXuBqEUkC5gG3Z3chERkpIstEZNkuf3co9bLOVJo8Gc44A/78Z5+p5FykBT3QPBR4XlUbAJcC/xGRn8WkqlNUNVFVE2vVqlXsQbpgpM1UWr3a9t75wx8yZiodOxZ0dM6VTpFMCluAhpnuNwgdy+xGYBaAqn4ElAd8t3R3gmbNrMhe5plKjRvbGgdfAOdceEUyKSwFzhKRJiJSDhtIfi3LOd8DPQBEpDmWFLx/yGUrbabSvHnQpo2tcWjYEK6/HpYvDzo650qHiCUFVU0BbgPmA2uxWUZrROR+EekTOu0uYISIfAHMAK7XklbL2xUrEbjkEnjzTZulNGIEzJ4NiYm24+asWbYznHOucHw/BVfi7d8P//oXPP44fPedbc38q19ZwvAhKOeM76fgYka1ajBmDHzzja2IPuccuPtu61q64QZYsSLoCJ0rOTwpuFKjTBm4/HJ46y2rrXTDDTBzpu3c2bWrdTN5fSXncudJwZVK55xj6xu2bIFHHoGkJBg4EE4/HR58EPbsCTpC56KTJwVXqp18MowdC+vWwauvQtOmto90gwa2MG7lyqAjdC66eFJwMaFMGSu29847sGoVXHcdTJ9uU1u7dbN1EN615JwnBReDWraEp56yLqW//x02brSCfGeeaff37g06QueC40nBxaxTToFf/xrWr7eWQpMm8NvfWtfSzTdbeQ3nYo0nBRfzypSBfv1g4UL44gsYNgz+/W9o1cpqLr36qu314Fws8KTgXCatW1vBvaQkm6W0bp0ljDPPtFlM+/YFHaFzkeVJwbls1KgB48bZCunZs6FRI+tqatDA9nz48sugI3QuMjwpOJeLsmXhiitg8WL4/HMYMsRKarRoARddZCuovWvJlSaeFJzLp4QEePZZ61r6y19g7Vqb5tq0KfzjH/DDD0FH6FzReVJwroBq1rQFcBs2WFXW+vVtgVyDBjZI/corcORI0FE6VzieFJwrpPh4K53x3nu2n8NVV8H8+dC/P9SubffnzvUE4UoWTwrOhUG7djBlCmzbZgX5hg61f6+4wsp3DxkCc+bA4cNBR+pc7jwpOBdG8fE2AD1lCmzfDm+/bV1KCxbAlVdaC2LwYJvR5AnCRSNPCs5FSNmy0LMn/POf1oJ45x24+mpbJDdwoLUgBg2Cl16CH38MOlrnjCcF54pB2bK2Ovqpp2DrVms5XHedTXUdNMgSxMCBNnB96FDQ0bpY5knBuWJWtix07277PWzdai2H4cNtwHrwYOtiuuIKePFFTxCu+HlScC5AZcpY6e5Jk2xDoEWLbMe4Dz+0wepatayC64wZcPBg0NG6WOBJwbkoUaYMXHABPPGELZBbvNg2Avr4Y5veWquWTXedPh0OHAg6WldaeVJwLgqVKWP7Sj/+uCWIJUtg5Ej49FObzVS7NvTtC1OneoJw4eVJwbkoFxcHXbrAY4/B5s3w/vtwyy22YO6aa6wF0acP/Oc/sH9/0NG6ks6TgnMlSFwcdO4MEyfC99/DBx/Ar35lxfquvdZaEL17234QXovJFYYnBedKqLg4OO88K8a3aZMNTt96q20UdN11liAuuwyef94ThMs/TwrOlQJxcfCLX8Cjj9qe0x99BLffbluKDh8OderYLKaXXvJaTC53nhScK2Xi4qBTJ9spbuNGm700apS1JAYNsgRx7bXwv/9BcnLQ0bpoE9GkICK9RORrEflWRMbncM4gEflSRNaIyPRIxuNcrBGBc8+1MYgtW6zUxsCB8NprcMklVvb71ltt8Pr48aCjddFAVDUyFxYpA3wDXAQkAUuBoar6ZaZzzgJmAd1VdZ+I1FbVnbldNzExUZctWxaRmJ2LFT/9ZC2F6dMtQRw9aluODhliayJat7aE4koPEVmuqol5nRfJlkJH4FtV/U5VjwEvAn2znDMCmKSq+wDySgjOufA46SRb5zBzJuzcadNZW7SwLqeEBPv6gQdg/fqgI3XFLZJJ4VRgc6b7SaFjmTUFmorIByLysYj0yu5CIjJSRJaJyLJdu3ZFKFznYlOVKla9dd48q+Y6ebLtLvfHP8KZZ2Z0P23bFnSkrjgEPdBcFjgL6AYMBZ4WkZOznqSqU1Q1UVUTa9WqVcwhOhc7atWyQeklS2ya69/+BseOwZ132najPXrYPtX79gUdqYuUSCaFLUDDTPcbhI5llgS8pqrJqroBG4M4K4IxOefyqVEj+M1vbGHc2rXwhz/YgrmbbrIZTP36WfeTbxZUukQyKSwFzhKRJiJSDhgCvJblnFewVgIiUhPrTvougjE55wqhWTO47z745hurv3TbbfbvkCG2SC6t+8mnuJZ8EUsKqpoC3AbMB9YCs1R1jYjcLyJ9QqfNB/aIyJfAQuA3qronUjE554pGBDp0sEVymzfDu+9aie9582z1dL16Gd1PPsW1ZIrYlNRI8SmpzkWfY8dg/vyMKa6HD9sYRNoU14QEn+IatGiYkuqcixHlylkhvhkzYMcOmDbNEsHEidCuHTRvDvffD+vWBR2py4snBedcWFWubK2D11+H7dvhn/+EunXh3nuhadOM7qctWaeduKjg3UfOuWKRlGSzlWbMsL0gRKwV0aOH3c4/HypWDDrK0iu/3UeeFJxzxe6bbyxBvP22FexLTrYuqF/8IiNJdOgA8fFBR1p6eFJwzpUIP/4I770HCxbY7fPP7XiVKrZndVqSaNnSB6uLIr9JoWxxBOOcczmpVAl69bIbwO7dsHBhRpJ44w07Xrs2dO+ekSSaNAku5tLMWwrOuaj2/fcZCWLBAhu8BksKPXpAz56WLLwCTu68+8g5V+qoWsmNtASxaBHs32+PtW6d0Yro2tW6n1wGTwrOuVIvJQU++8w2D1qwAD74wPaKKFsWOnbMSBKdOlm58FjmScE5F3OOHLFtR9NaEsuWWbmNihWhS5eMJJGQYNuWxhJPCs65mPfDD7B4cUaS+DK07+Mpp8CFF2YkibPOKv0zmzwpOOdcFtu2WRG/tCTx/fd2vGHDjATRvbvtXV3aeFJwzrlcqNp2owsW2JjEwoWwJ1SjuUkTG4c491y7JSRA+fLBxltUnhScc64Ajh+HL76wlsRHH8Enn1hpDrCV1QkJGUni3HNtq9KS1OXkScE554po61ZLDmm3pUttBTZA9eonJomOHaFGjWDjzY0nBeecC7PUVBuszpwo1qzJ2FDozDNPTBRt2kTPVFhPCs45VwwOHbKpr5kTxdat9li5ctC27YmJ4vTTg+l28qTgnHMBSUo6MUksW2a70QHUrGldTZm7napXj3xMXhDPOecC0qCB3a64wu6npFg3U+ZE8eabNgMKbPOhzK2J1q2tlREEbyk451wADhz4ebdTWrG/k06yDYgyJ4rGjYvW7eTdR845V4Ko2mK6zEli+XI4etQer1ULxo2Du+4q3PW9+8g550oQETjtNLsNGmTHkpNh1aqMJFEcK609KTjnXJSKj7dupHbtYNSo4nnNGKsT6JxzLjeeFJxzzqXzpOCccy5dRJOCiPQSka9F5FsRGZ/LeVeIiIpIniPjzjnnIidiSUFEygCTgEuAc4ChInJONudVAe4APolULM455/Inki2FjsC3qvqdqh4DXgT6ZnPen4CHgKMRjMU551w+RDIpnApsznQ/KXQsnYi0Axqq6n9zu5CIjBSRZSKybNeuXeGP1DnnHBDgQLOIxAGPAnmuz1PVKaqaqKqJtWrVinxwzjkXoyK5eG0L0DDT/QahY2mqAC2BRWIFPeoCr4lIH1XNsY7F8uXLd4vIpkLGVBPYXcjnRlK0xgXRG5vHVTAeV8GUxrhOy89JEat9JCJlgW+AHlgyWApcpaprcjh/EfDr3BJCGGJalp/aH8UtWuOC6I3N4yoYj6tgYjmuiHUfqWoKcBswH1gLzFLVNSJyv4j0idTrOuecK7yI1j5S1XnAvCzH7snh3G6RjMU551zeYm1F85SgA8hBtMYF0Rubx1UwHlfBxGxcJW4/Beecc5ETay0F55xzufCk4JxzLl1MJAUReU5EdorI6qBjyUxEGorIQhH5UkTWiMgdQccEICLlReRTEfkiFNd9QceUmYiUEZHPReSNoGNJIyIbRWSViKwQkajZL1ZEThaR2SLylYisFZFfREFMZ4d+Tmm3AyIyJui4AETkztDv/GoRmSEi5YOOCUBE7gjFtCbSP6uYGFMQka7AIeDfqtoy6HjSiEg9oJ6qfhYqDLgc6KeqXwYclwCVVPWQiMQD7wN3qOrHQcaVRkTGAolAVVW9POh4wJICkKiqUbXgSUReAN5T1WdEpBxQUVV/CDquNKHCmVuAc1W1sItSwxXLqdjv+jmqekREZgHzVPX5gONqidWO6wgcA/4H3KKq30bi9WKipaCqS4C9QceRlapuU9XPQl8fxNZznJr7syJPzaHQ3fjQLSo+PYhIA+Ay4JmgY4l2IlIN6Ao8C6Cqx6IpIYT0ANYHnRAyKQtUCC2+rQhsDTgegObAJ6p6OLT+azEwIFIvFhNJoSQQkcZAW6KkhHioi2YFsBN4W1WjIi5gIvBb4HjQgWShwFsislxERgYdTEgTYBfwr1B32zMiUinooLIYAswIOggAVd0CPAx8D2wD9qvqW8FGBcBqoIuI1BCRisClnFhCKKw8KUQBEakMzAHGqOqBoOMBUNVUVU3AalZ1DDVhAyUilwM7VXV50LFk43xVbYftH3JrqMsyaGWBdsCTqtoW+BHIcbOr4hbqzuoDvBR0LAAiUh0r798EqA9UEpGrg40KVHUttr3AW1jX0QogNVKv50khYKE++znANFWdG3Q8WYW6GxYCvYKOBegM9An1378IdBeRqcGGZEKfMlHVncDLWP9v0JKApEytvNlYkogWlwCfqeqOoAMJ6QlsUNVdqpoMzAXOCzgmAFT1WVVtr6pdgX1YXbmI8KQQoNCA7rPAWlV9NOh40ohILRE5OfR1BeAi4KtgowJV/Z2qNlDVxli3w7uqGvgnORGpFJooQKh75mKsyR8oVd0ObBaRs0OHegCBTmLIYihR0nUU8j3QSUQqhv42e2DjfIETkdqhfxth4wnTI/VaEa19FC1EZAbQDagpIknABFV9NtioAPvkew2wKtR/D/D7UM2oINUDXgjNDInDihlGzfTPKFQHeDlUAr4sMF1V/xdsSOluB6aFumq+A4YHHA+QnjwvAm4OOpY0qvqJiMwGPgNSgM+JnnIXc0SkBpAM3BrJCQMxMSXVOedc/nj3kXPOuXSeFJxzzqXzpOCccy6dJwXnnHPpPCk455xL50nBuSxEJDVLFc+wrQIWkcbRVq3XucxiYp2CcwV0JFTiw7mY4y0F5/IptGfC30L7JnwqImeGjjcWkXdFZKWILAitOkVE6ojIy6F9Kb4QkbSSCWVE5OlQbfy3QqvGnYsKnhSc+7kKWbqPBmd6bL+qtgKewCq2AjwOvKCqrYFpwGOh448Bi1W1DVZzaE3o+FnAJFVtAfwAXBHh78e5fPMVzc5lISKHVLVyNsc3At1V9btQIcPtqlpDRHZjmyUlh45vU9WaIrILaKCqP2W6RmOsFPlZofvjgHhVfSDy35lzefOWgnMFozl8XRA/Zfo6FR/bc1HEk4JzBTM4078fhb7+EKvaCjAMeC/09QJgFKRvWlStuIJ0rrD8E4pzP1chU9VagP+patq01OoishL7tD80dOx2bHez32A7naVVIr0DmCIiN2ItglHYjl7ORS0fU3Aun0JjComqujvoWJyLFO8+cs45l85bCs4559J5S8E551w6TwrOOefSeVJwzjmXzpOCc865dJ4UnHPOpft/L27lVyKeED4AAAAASUVORK5CYII=\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 [==============================] - 16s 12ms/step - loss: 1.0087 - acc: 0.6475 - inTop3: 0.8955 - val_loss: 0.8578 - val_acc: 0.7070 - val_inTop3: 0.9204\n", "\n", "Epoch 00001: val_loss improved from inf to 0.85779, saving model to cnn_aug.hdf5\n", "Epoch 2/25\n", "1406/1406 [==============================] - 17s 12ms/step - loss: 0.9517 - acc: 0.6671 - inTop3: 0.9042 - val_loss: 0.7516 - val_acc: 0.7394 - val_inTop3: 0.9382\n", "\n", "Epoch 00002: val_loss improved from 0.85779 to 0.75164, saving model to cnn_aug.hdf5\n", "Epoch 3/25\n", "1406/1406 [==============================] - 17s 12ms/step - loss: 0.9127 - acc: 0.6818 - inTop3: 0.9131 - val_loss: 0.8509 - val_acc: 0.7020 - val_inTop3: 0.9266\n", "\n", "Epoch 00003: val_loss did not improve from 0.75164\n", "Epoch 4/25\n", "1406/1406 [==============================] - 17s 12ms/step - loss: 0.8865 - acc: 0.6921 - inTop3: 0.9143 - val_loss: 0.7747 - val_acc: 0.7248 - val_inTop3: 0.9372\n", "\n", "Epoch 00004: val_loss did not improve from 0.75164\n", "Epoch 5/25\n", "1406/1406 [==============================] - 17s 12ms/step - loss: 0.8680 - acc: 0.6974 - inTop3: 0.9173 - val_loss: 0.7450 - val_acc: 0.7472 - val_inTop3: 0.9358\n", "\n", "Epoch 00005: val_loss improved from 0.75164 to 0.74501, saving model to cnn_aug.hdf5\n", "Epoch 6/25\n", "1406/1406 [==============================] - 17s 12ms/step - loss: 0.8453 - acc: 0.7055 - inTop3: 0.9236 - val_loss: 0.7763 - val_acc: 0.7278 - val_inTop3: 0.9306\n", "\n", "Epoch 00006: val_loss did not improve from 0.74501\n", "Epoch 7/25\n", "1406/1406 [==============================] - 16s 12ms/step - loss: 0.8293 - acc: 0.7111 - inTop3: 0.9245 - val_loss: 0.8366 - val_acc: 0.7100 - val_inTop3: 0.9266\n", "\n", "Epoch 00007: val_loss did not improve from 0.74501\n", "Epoch 8/25\n", "1406/1406 [==============================] - 16s 12ms/step - loss: 0.8285 - acc: 0.7105 - inTop3: 0.9235 - val_loss: 0.8492 - val_acc: 0.7078 - val_inTop3: 0.9332\n", "\n", "Epoch 00008: val_loss did not improve from 0.74501\n", "Epoch 9/25\n", "1406/1406 [==============================] - 16s 12ms/step - loss: 0.8127 - acc: 0.7163 - inTop3: 0.9272 - val_loss: 0.8518 - val_acc: 0.7236 - val_inTop3: 0.9336\n", "\n", "Epoch 00009: val_loss did not improve from 0.74501\n", "Epoch 10/25\n", "1406/1406 [==============================] - 16s 12ms/step - loss: 0.7884 - acc: 0.7271 - inTop3: 0.9297 - val_loss: 0.7799 - val_acc: 0.7458 - val_inTop3: 0.9358\n", "\n", "Epoch 00010: val_loss did not improve from 0.74501\n", "Epoch 11/25\n", "1406/1406 [==============================] - 16s 12ms/step - loss: 0.7824 - acc: 0.7280 - inTop3: 0.9317 - val_loss: 0.7712 - val_acc: 0.7484 - val_inTop3: 0.9370\n", "\n", "Epoch 00011: val_loss did not improve from 0.74501\n", "Epoch 12/25\n", "1406/1406 [==============================] - 16s 12ms/step - loss: 0.7788 - acc: 0.7288 - inTop3: 0.9310 - val_loss: 0.7854 - val_acc: 0.7298 - val_inTop3: 0.9368\n", "\n", "Epoch 00012: val_loss did not improve from 0.74501\n", "Epoch 13/25\n", "1406/1406 [==============================] - 17s 12ms/step - loss: 0.7728 - acc: 0.7330 - inTop3: 0.9334 - val_loss: 0.7568 - val_acc: 0.7374 - val_inTop3: 0.9404\n", "\n", "Epoch 00013: val_loss did not improve from 0.74501\n", "Epoch 14/25\n", "1406/1406 [==============================] - 17s 12ms/step - loss: 0.7633 - acc: 0.7323 - inTop3: 0.9331 - val_loss: 0.8824 - val_acc: 0.7220 - val_inTop3: 0.9278\n", "\n", "Epoch 00014: val_loss did not improve from 0.74501\n", "Epoch 15/25\n", "1406/1406 [==============================] - 17s 12ms/step - loss: 0.7524 - acc: 0.7389 - inTop3: 0.9360 - val_loss: 0.7971 - val_acc: 0.7378 - val_inTop3: 0.9310\n", "\n", "Epoch 00015: val_loss did not improve from 0.74501\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": 28, "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(0.5)(x)\n", " x=Conv2D(filters=32, kernel_size=(5, 5), activation='relu', padding='same')(x)\n", " x=Dropout(0.5)(x)\n", " x=Conv2D(filters=32, kernel_size=(3, 3), activation='relu', padding='same')(x)\n", " x=Dropout(0.5)(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": 29, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "_________________________________________________________________\n", "Layer (type) Output Shape Param # \n", "=================================================================\n", "input_6 (InputLayer) (None, 32, 32, 3) 0 \n", "_________________________________________________________________\n", "conv2d_18 (Conv2D) (None, 32, 32, 32) 896 \n", "_________________________________________________________________\n", "dropout_7 (Dropout) (None, 32, 32, 32) 0 \n", "_________________________________________________________________\n", "conv2d_19 (Conv2D) (None, 32, 32, 32) 25632 \n", "_________________________________________________________________\n", "dropout_8 (Dropout) (None, 32, 32, 32) 0 \n", "_________________________________________________________________\n", "conv2d_20 (Conv2D) (None, 32, 32, 32) 9248 \n", "_________________________________________________________________\n", "dropout_9 (Dropout) (None, 32, 32, 32) 0 \n", "_________________________________________________________________\n", "conv2d_21 (Conv2D) (None, 32, 32, 32) 25632 \n", "_________________________________________________________________\n", "max_pooling2d_5 (MaxPooling2 (None, 8, 8, 32) 0 \n", "_________________________________________________________________\n", "flatten_5 (Flatten) (None, 2048) 0 \n", "_________________________________________________________________\n", "dense_9 (Dense) (None, 128) 262272 \n", "_________________________________________________________________\n", "dense_10 (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 [==============================] - 13s 281us/step - loss: 1.8114 - acc: 0.3415 - inTop3: 0.6714 - val_loss: 2.1072 - val_acc: 0.2810 - val_inTop3: 0.5666\n", "\n", "Epoch 00001: val_loss improved from inf to 2.10720, saving model to CNN.hdf5\n", "Epoch 2/10\n", "45000/45000 [==============================] - 12s 272us/step - loss: 1.4664 - acc: 0.4710 - inTop3: 0.7975 - val_loss: 1.6153 - val_acc: 0.4024 - val_inTop3: 0.7416\n", "\n", "Epoch 00002: val_loss improved from 2.10720 to 1.61526, saving model to CNN.hdf5\n", "Epoch 3/10\n", "45000/45000 [==============================] - 12s 268us/step - loss: 1.3250 - acc: 0.5222 - inTop3: 0.8326 - val_loss: 1.8288 - val_acc: 0.3586 - val_inTop3: 0.7150\n", "\n", "Epoch 00003: val_loss did not improve from 1.61526\n", "Epoch 4/10\n", "45000/45000 [==============================] - 12s 273us/step - loss: 1.2259 - acc: 0.5590 - inTop3: 0.8550 - val_loss: 1.5288 - val_acc: 0.4678 - val_inTop3: 0.7864\n", "\n", "Epoch 00004: val_loss improved from 1.61526 to 1.52882, saving model to CNN.hdf5\n", "Epoch 5/10\n", "45000/45000 [==============================] - 12s 271us/step - loss: 1.1609 - acc: 0.5856 - inTop3: 0.8710 - val_loss: 1.5036 - val_acc: 0.4934 - val_inTop3: 0.7752\n", "\n", "Epoch 00005: val_loss improved from 1.52882 to 1.50358, saving model to CNN.hdf5\n", "Epoch 6/10\n", "45000/45000 [==============================] - 12s 273us/step - loss: 1.1032 - acc: 0.6062 - inTop3: 0.8804 - val_loss: 1.2871 - val_acc: 0.5526 - val_inTop3: 0.8368\n", "\n", "Epoch 00006: val_loss improved from 1.50358 to 1.28707, saving model to CNN.hdf5\n", "Epoch 7/10\n", "45000/45000 [==============================] - 12s 272us/step - loss: 1.0696 - acc: 0.6199 - inTop3: 0.8865 - val_loss: 1.2061 - val_acc: 0.5702 - val_inTop3: 0.8628\n", "\n", "Epoch 00007: val_loss improved from 1.28707 to 1.20607, saving model to CNN.hdf5\n", "Epoch 8/10\n", "45000/45000 [==============================] - 12s 273us/step - loss: 1.0325 - acc: 0.6320 - inTop3: 0.8942 - val_loss: 1.2108 - val_acc: 0.5830 - val_inTop3: 0.8486\n", "\n", "Epoch 00008: val_loss did not improve from 1.20607\n", "Epoch 9/10\n", "45000/45000 [==============================] - 12s 273us/step - loss: 0.9972 - acc: 0.6442 - inTop3: 0.8992 - val_loss: 1.6819 - val_acc: 0.4854 - val_inTop3: 0.7678\n", "\n", "Epoch 00009: val_loss did not improve from 1.20607\n", "Epoch 10/10\n", "45000/45000 [==============================] - 12s 274us/step - loss: 0.9836 - acc: 0.6518 - inTop3: 0.9039 - val_loss: 1.0715 - val_acc: 0.6264 - val_inTop3: 0.8826\n", "\n", "Epoch 00010: val_loss improved from 1.20607 to 1.07145, saving model to CNN.hdf5\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": 30, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Train on 45000 samples, validate on 5000 samples\n", "Epoch 1/40\n", "45000/45000 [==============================] - 12s 275us/step - loss: 0.9548 - acc: 0.6639 - inTop3: 0.9076 - val_loss: 1.0230 - val_acc: 0.6510 - val_inTop3: 0.8936\n", "\n", "Epoch 00001: val_loss improved from inf to 1.02300, saving model to CNN.hdf5\n", "Epoch 2/40\n", "45000/45000 [==============================] - 12s 274us/step - loss: 0.9352 - acc: 0.6707 - inTop3: 0.9122 - val_loss: 1.1931 - val_acc: 0.5970 - val_inTop3: 0.8630\n", "\n", "Epoch 00002: val_loss did not improve from 1.02300\n", "Epoch 3/40\n", "45000/45000 [==============================] - 12s 273us/step - loss: 0.9256 - acc: 0.6730 - inTop3: 0.9124 - val_loss: 1.2979 - val_acc: 0.5670 - val_inTop3: 0.8500\n", "\n", "Epoch 00003: val_loss did not improve from 1.02300\n", "Epoch 4/40\n", "45000/45000 [==============================] - 12s 275us/step - loss: 0.9078 - acc: 0.6819 - inTop3: 0.9171 - val_loss: 0.9649 - val_acc: 0.6596 - val_inTop3: 0.9002\n", "\n", "Epoch 00004: val_loss improved from 1.02300 to 0.96494, saving model to CNN.hdf5\n", "Epoch 5/40\n", "45000/45000 [==============================] - 12s 275us/step - loss: 0.8912 - acc: 0.6876 - inTop3: 0.9200 - val_loss: 1.0253 - val_acc: 0.6518 - val_inTop3: 0.8948\n", "\n", "Epoch 00005: val_loss did not improve from 0.96494\n", "Epoch 6/40\n", "45000/45000 [==============================] - 12s 273us/step - loss: 0.8829 - acc: 0.6877 - inTop3: 0.9204 - val_loss: 1.0432 - val_acc: 0.6414 - val_inTop3: 0.8938\n", "\n", "Epoch 00006: val_loss did not improve from 0.96494\n", "Epoch 7/40\n", "45000/45000 [==============================] - 12s 273us/step - loss: 0.8531 - acc: 0.7013 - inTop3: 0.9258 - val_loss: 1.1655 - val_acc: 0.6222 - val_inTop3: 0.8794\n", "\n", "Epoch 00007: val_loss did not improve from 0.96494\n", "Epoch 8/40\n", "45000/45000 [==============================] - 12s 273us/step - loss: 0.8507 - acc: 0.7037 - inTop3: 0.9236 - val_loss: 1.0546 - val_acc: 0.6452 - val_inTop3: 0.8908\n", "\n", "Epoch 00008: val_loss did not improve from 0.96494\n", "Epoch 9/40\n", "45000/45000 [==============================] - 12s 274us/step - loss: 0.8436 - acc: 0.7021 - inTop3: 0.9264 - val_loss: 1.0688 - val_acc: 0.6380 - val_inTop3: 0.8772\n", "\n", "Epoch 00009: val_loss did not improve from 0.96494\n" ] }, { "data": { "image/png": "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l3x91113cd9995VbQjvYihUr6NatGwA7d+7k/PPPJyMjg7POOqtMXaSrr76arKwsunbtyrhx40qenzdvHsceeyw9evSgX79+bNu2jQ8//JBTTz0VgI0FBZx58slkDh/OMZdeysLFiwH46KOP6NmzJz179qRXr14lZTUqVb8+DBhg4wrGJLjEayl4UDt7xIgRjB49mmuuuQaAV155hZkzZ3L99dfvV0K7or2PH3vsMRo0aMCSJUtYuHAhvXv3Ljl2//33c/DBB1NUVITP52PhwoV06dKFESNG8PLLL9O3b1+2bt1K/eC6Rc4x7sYb6dWpE6/NmMHsnBwuvvhicnNzeeihh5g8eTIDBgxg+/bt1At1FpLPB7fdpiW1azIuYYyJedZSCINevXqxbt068vPz+eabb2jatCktW7bk1ltvJTMzk+zs7DIltMszd+7ckr0VMjMzyczMLDn2yiuv0Lt3b3r16sV3333H4sWL+eGHH2jVqhV9+/YFoFGjRqQErznIy+OTr77iossug0aNGDp0KBs2bGDr1q0MGDCAG2+8kUmTJrF58+ay31cZn08/zplTvV+QMSZuJF5LwaPa2cOHD2fatGmsWbOGESNGVFpCuzqWL1/OQw89xLx582jatCmXXHJJ1dfZswfWrtWFaen773B6yy23cMopp/DOO+8wYMAAZs6cGVrhvj59tGjerFkwYkS1fxZjTOyzlkKYjBgxgpdeeolp06YxfPjwapfQHjhwIC+++CIAixYtYqG/KunWrVtp2LAhjRs3Zu3atbz77rsAdO7cmdWrVzNv3jwAtm3bRmFhoa483rkTGjXi+KFDeeGFFwD48MMPSU9Pp1GjRixbtozu3bszduxY+vbty/fffx/aD5mSogvZbFzBmISVeC0Fj3Tt2pVt27bRpk0bWrVqxciRIznttNPo3r07WVlZVb4Tv/rqqxk1ahQZGRlkZGTQp08fAHr06EGvXr3o0qUL7dq1Y8CAAQDUqVOHl19+meuuu46dO3dSv359Zr39NuTn6wyjjh256+67ufTSS8nMzKRBgwY8++yzAEycOJE5c+ZQq1YtunbtykknnRT6D+rzweuv6x4MHTrU7JdljIlZVjo7URQWwvffw969kJERegmLSpT7e128GLp2hccfh8svP+B7GGOiw0pnJ5PA7mm7d1evplFNZGRAq1bWhWRMgrKk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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "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": [ "#### Önálló feladat - paraméterként átadható mélységű háló létrehozása" ] }, { "cell_type": "code", "execution_count": 36, "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": 40, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "_________________________________________________________________\n", "Layer (type) Output Shape Param # \n", "=================================================================\n", "input_11 (InputLayer) (None, 32, 32, 3) 0 \n", "_________________________________________________________________\n", "conv2d_48 (Conv2D) (None, 32, 32, 16) 448 \n", "_________________________________________________________________\n", "conv2d_49 (Conv2D) (None, 32, 32, 16) 2320 \n", "_________________________________________________________________\n", "conv2d_50 (Conv2D) (None, 32, 32, 16) 2320 \n", "_________________________________________________________________\n", "max_pooling2d_17 (MaxPooling (None, 16, 16, 16) 0 \n", "_________________________________________________________________\n", "conv2d_51 (Conv2D) (None, 16, 16, 32) 4640 \n", "_________________________________________________________________\n", "conv2d_52 (Conv2D) (None, 16, 16, 32) 9248 \n", "_________________________________________________________________\n", "conv2d_53 (Conv2D) (None, 16, 16, 32) 9248 \n", "_________________________________________________________________\n", "max_pooling2d_18 (MaxPooling (None, 8, 8, 32) 0 \n", "_________________________________________________________________\n", "conv2d_54 (Conv2D) (None, 8, 8, 64) 18496 \n", "_________________________________________________________________\n", "conv2d_55 (Conv2D) (None, 8, 8, 64) 36928 \n", "_________________________________________________________________\n", "conv2d_56 (Conv2D) (None, 8, 8, 64) 36928 \n", "_________________________________________________________________\n", "max_pooling2d_19 (MaxPooling (None, 4, 4, 64) 0 \n", "_________________________________________________________________\n", "conv2d_57 (Conv2D) (None, 4, 4, 128) 73856 \n", "_________________________________________________________________\n", "conv2d_58 (Conv2D) (None, 4, 4, 128) 147584 \n", "_________________________________________________________________\n", "conv2d_59 (Conv2D) (None, 4, 4, 128) 147584 \n", "_________________________________________________________________\n", "max_pooling2d_20 (MaxPooling (None, 2, 2, 128) 0 \n", "_________________________________________________________________\n", "flatten_9 (Flatten) (None, 512) 0 \n", "_________________________________________________________________\n", "dense_17 (Dense) (None, 128) 65664 \n", "_________________________________________________________________\n", "dense_18 (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 [==============================] - 16s 356us/step - loss: 1.8781 - acc: 0.3046 - inTop3: 0.6267 - val_loss: 1.5611 - val_acc: 0.4134 - val_inTop3: 0.7676\n", "\n", "Epoch 00001: val_loss improved from inf to 1.56115, saving model to CNN.hdf5\n", "Epoch 2/20\n", "45000/45000 [==============================] - 15s 343us/step - loss: 1.4064 - acc: 0.4923 - inTop3: 0.8102 - val_loss: 1.2634 - val_acc: 0.5440 - val_inTop3: 0.8356\n", "\n", "Epoch 00002: val_loss improved from 1.56115 to 1.26343, saving model to CNN.hdf5\n", "Epoch 3/20\n", "45000/45000 [==============================] - 16s 345us/step - loss: 1.1704 - acc: 0.5829 - inTop3: 0.8610 - val_loss: 1.2620 - val_acc: 0.5664 - val_inTop3: 0.8400\n", "\n", "Epoch 00003: val_loss improved from 1.26343 to 1.26205, saving model to CNN.hdf5\n", "Epoch 4/20\n", "45000/45000 [==============================] - 15s 342us/step - loss: 1.0087 - acc: 0.6428 - inTop3: 0.8915 - val_loss: 1.0815 - val_acc: 0.6204 - val_inTop3: 0.8756\n", "\n", "Epoch 00004: val_loss improved from 1.26205 to 1.08150, saving model to CNN.hdf5\n", "Epoch 5/20\n", "45000/45000 [==============================] - 15s 342us/step - loss: 0.9094 - acc: 0.6808 - inTop3: 0.9074 - val_loss: 0.9122 - val_acc: 0.6762 - val_inTop3: 0.9106\n", "\n", "Epoch 00005: val_loss improved from 1.08150 to 0.91221, saving model to CNN.hdf5\n", "Epoch 6/20\n", "45000/45000 [==============================] - 15s 340us/step - loss: 0.8385 - acc: 0.7077 - inTop3: 0.9205 - val_loss: 0.9461 - val_acc: 0.6756 - val_inTop3: 0.8984\n", "\n", "Epoch 00006: val_loss did not improve from 0.91221\n", "Epoch 7/20\n", "45000/45000 [==============================] - 15s 342us/step - loss: 0.7827 - acc: 0.7251 - inTop3: 0.9293 - val_loss: 0.9299 - val_acc: 0.6850 - val_inTop3: 0.8968\n", "\n", "Epoch 00007: val_loss did not improve from 0.91221\n", "Epoch 8/20\n", "45000/45000 [==============================] - 15s 341us/step - loss: 0.7488 - acc: 0.7392 - inTop3: 0.9339 - val_loss: 0.8866 - val_acc: 0.6934 - val_inTop3: 0.9170\n", "\n", "Epoch 00008: val_loss improved from 0.91221 to 0.88665, saving model to CNN.hdf5\n", "Epoch 9/20\n", "45000/45000 [==============================] - 15s 341us/step - loss: 0.7123 - acc: 0.7520 - inTop3: 0.9396 - val_loss: 0.8592 - val_acc: 0.7074 - val_inTop3: 0.9180\n", "\n", "Epoch 00009: val_loss improved from 0.88665 to 0.85924, saving model to CNN.hdf5\n", "Epoch 10/20\n", "45000/45000 [==============================] - 15s 342us/step - loss: 0.7036 - acc: 0.7562 - inTop3: 0.9382 - val_loss: 0.8462 - val_acc: 0.7094 - val_inTop3: 0.9144\n", "\n", "Epoch 00010: val_loss improved from 0.85924 to 0.84617, saving model to CNN.hdf5\n", "Epoch 11/20\n", "45000/45000 [==============================] - 15s 342us/step - loss: 0.7191 - acc: 0.7494 - inTop3: 0.9377 - val_loss: 0.9664 - val_acc: 0.6952 - val_inTop3: 0.8972\n", "\n", "Epoch 00011: val_loss did not improve from 0.84617\n", "Epoch 12/20\n", "45000/45000 [==============================] - 16s 345us/step - loss: 0.7210 - acc: 0.7511 - inTop3: 0.9381 - val_loss: 0.8318 - val_acc: 0.7266 - val_inTop3: 0.9190\n", "\n", "Epoch 00012: val_loss improved from 0.84617 to 0.83181, saving model to CNN.hdf5\n", "Epoch 13/20\n", "45000/45000 [==============================] - 15s 337us/step - loss: 0.7163 - acc: 0.7523 - inTop3: 0.9375 - val_loss: 0.9047 - val_acc: 0.6934 - val_inTop3: 0.9020\n", "\n", "Epoch 00013: val_loss did not improve from 0.83181\n", "Epoch 14/20\n", "45000/45000 [==============================] - 15s 339us/step - loss: 0.7214 - acc: 0.7517 - inTop3: 0.9360 - val_loss: 0.8572 - val_acc: 0.7168 - val_inTop3: 0.9168\n", "\n", "Epoch 00014: val_loss did not improve from 0.83181\n", "Epoch 15/20\n", "45000/45000 [==============================] - 15s 343us/step - loss: 0.7396 - acc: 0.7461 - inTop3: 0.9335 - val_loss: 0.8762 - val_acc: 0.7040 - val_inTop3: 0.9154\n", "\n", "Epoch 00015: val_loss did not improve from 0.83181\n", "Epoch 16/20\n", "45000/45000 [==============================] - 15s 341us/step - loss: 0.7461 - acc: 0.7451 - inTop3: 0.9328 - val_loss: 0.8489 - val_acc: 0.7154 - val_inTop3: 0.9198\n", "\n", "Epoch 00016: val_loss did not improve from 0.83181\n", "Epoch 17/20\n", "45000/45000 [==============================] - 15s 342us/step - loss: 0.7561 - acc: 0.7420 - inTop3: 0.9307 - val_loss: 0.8835 - val_acc: 0.7076 - val_inTop3: 0.9148\n", "\n", "Epoch 00017: val_loss did not improve from 0.83181\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": 44, "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": 45, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "__________________________________________________________________________________________________\n", "Layer (type) Output Shape Param # Connected to \n", "==================================================================================================\n", "input_13 (InputLayer) (None, 32, 32, 3) 0 \n", "__________________________________________________________________________________________________\n", "conv2d_62 (Conv2D) (None, 32, 32, 16) 448 input_13[0][0] \n", "__________________________________________________________________________________________________\n", "conv2d_63 (Conv2D) (None, 32, 32, 16) 2320 conv2d_62[0][0] \n", "__________________________________________________________________________________________________\n", "conv2d_64 (Conv2D) (None, 32, 32, 16) 2320 conv2d_63[0][0] \n", "__________________________________________________________________________________________________\n", "add_1 (Add) (None, 32, 32, 16) 0 conv2d_62[0][0] \n", " conv2d_64[0][0] \n", "__________________________________________________________________________________________________\n", "max_pooling2d_21 (MaxPooling2D) (None, 16, 16, 16) 0 add_1[0][0] \n", "__________________________________________________________________________________________________\n", "conv2d_65 (Conv2D) (None, 16, 16, 32) 4640 max_pooling2d_21[0][0] \n", "__________________________________________________________________________________________________\n", "conv2d_66 (Conv2D) (None, 16, 16, 32) 9248 conv2d_65[0][0] \n", "__________________________________________________________________________________________________\n", "conv2d_67 (Conv2D) (None, 16, 16, 32) 9248 conv2d_66[0][0] \n", "__________________________________________________________________________________________________\n", "add_2 (Add) (None, 16, 16, 32) 0 conv2d_65[0][0] \n", " conv2d_67[0][0] \n", "__________________________________________________________________________________________________\n", "max_pooling2d_22 (MaxPooling2D) (None, 8, 8, 32) 0 add_2[0][0] \n", "__________________________________________________________________________________________________\n", "conv2d_68 (Conv2D) (None, 8, 8, 64) 18496 max_pooling2d_22[0][0] \n", "__________________________________________________________________________________________________\n", "conv2d_69 (Conv2D) (None, 8, 8, 64) 36928 conv2d_68[0][0] \n", "__________________________________________________________________________________________________\n", "conv2d_70 (Conv2D) (None, 8, 8, 64) 36928 conv2d_69[0][0] \n", "__________________________________________________________________________________________________\n", "add_3 (Add) (None, 8, 8, 64) 0 conv2d_68[0][0] \n", " conv2d_70[0][0] \n", "__________________________________________________________________________________________________\n", "max_pooling2d_23 (MaxPooling2D) (None, 4, 4, 64) 0 add_3[0][0] \n", "__________________________________________________________________________________________________\n", "conv2d_71 (Conv2D) (None, 4, 4, 128) 73856 max_pooling2d_23[0][0] \n", "__________________________________________________________________________________________________\n", "conv2d_72 (Conv2D) (None, 4, 4, 128) 147584 conv2d_71[0][0] \n", "__________________________________________________________________________________________________\n", "conv2d_73 (Conv2D) (None, 4, 4, 128) 147584 conv2d_72[0][0] \n", "__________________________________________________________________________________________________\n", "add_4 (Add) (None, 4, 4, 128) 0 conv2d_71[0][0] \n", " conv2d_73[0][0] \n", "__________________________________________________________________________________________________\n", "max_pooling2d_24 (MaxPooling2D) (None, 2, 2, 128) 0 add_4[0][0] \n", "__________________________________________________________________________________________________\n", "flatten_10 (Flatten) (None, 512) 0 max_pooling2d_24[0][0] \n", "__________________________________________________________________________________________________\n", "dense_19 (Dense) (None, 128) 65664 flatten_10[0][0] \n", "__________________________________________________________________________________________________\n", "dense_20 (Dense) (None, 10) 1290 dense_19[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 [==============================] - 17s 371us/step - loss: 1.6213 - acc: 0.4059 - inTop3: 0.7308 - val_loss: 1.3271 - val_acc: 0.5250 - val_inTop3: 0.8308\n", "\n", "Epoch 00001: val_loss improved from inf to 1.32708, saving model to CNN.hdf5\n", "Epoch 2/20\n", "45000/45000 [==============================] - 16s 358us/step - loss: 1.1431 - acc: 0.5926 - inTop3: 0.8700 - val_loss: 0.9895 - val_acc: 0.6448 - val_inTop3: 0.8996\n", "\n", "Epoch 00002: val_loss improved from 1.32708 to 0.98950, saving model to CNN.hdf5\n", "Epoch 3/20\n", "45000/45000 [==============================] - 16s 358us/step - loss: 0.9496 - acc: 0.6652 - inTop3: 0.9050 - val_loss: 0.9916 - val_acc: 0.6524 - val_inTop3: 0.8938\n", "\n", "Epoch 00003: val_loss did not improve from 0.98950\n", "Epoch 4/20\n", "45000/45000 [==============================] - 16s 360us/step - loss: 0.8397 - acc: 0.7046 - inTop3: 0.9221 - val_loss: 1.0507 - val_acc: 0.6328 - val_inTop3: 0.8784\n", "\n", "Epoch 00004: val_loss did not improve from 0.98950\n", "Epoch 5/20\n", "45000/45000 [==============================] - 16s 362us/step - loss: 0.7540 - acc: 0.7372 - inTop3: 0.9364 - val_loss: 0.8207 - val_acc: 0.7190 - val_inTop3: 0.9278\n", "\n", "Epoch 00005: val_loss improved from 0.98950 to 0.82073, saving model to CNN.hdf5\n", "Epoch 6/20\n", "45000/45000 [==============================] - 16s 361us/step - loss: 0.6919 - acc: 0.7585 - inTop3: 0.9420 - val_loss: 0.8073 - val_acc: 0.7176 - val_inTop3: 0.9252\n", "\n", "Epoch 00006: val_loss improved from 0.82073 to 0.80735, saving model to CNN.hdf5\n", "Epoch 7/20\n", "45000/45000 [==============================] - 16s 360us/step - loss: 0.6483 - acc: 0.7718 - inTop3: 0.9499 - val_loss: 0.8863 - val_acc: 0.7004 - val_inTop3: 0.9186\n", "\n", "Epoch 00007: val_loss did not improve from 0.80735\n", "Epoch 8/20\n", "45000/45000 [==============================] - 16s 356us/step - loss: 0.6072 - acc: 0.7870 - inTop3: 0.9553 - val_loss: 1.0348 - val_acc: 0.6638 - val_inTop3: 0.9064\n", "\n", "Epoch 00008: val_loss did not improve from 0.80735\n", "Epoch 9/20\n", "45000/45000 [==============================] - 16s 360us/step - loss: 0.5868 - acc: 0.7943 - inTop3: 0.9581 - val_loss: 0.7936 - val_acc: 0.7466 - val_inTop3: 0.9292\n", "\n", "Epoch 00009: val_loss improved from 0.80735 to 0.79356, saving model to CNN.hdf5\n", "Epoch 10/20\n", "45000/45000 [==============================] - 16s 360us/step - loss: 0.5490 - acc: 0.8081 - inTop3: 0.9614 - val_loss: 0.8293 - val_acc: 0.7404 - val_inTop3: 0.9240\n", "\n", "Epoch 00010: val_loss did not improve from 0.79356\n", "Epoch 11/20\n", "45000/45000 [==============================] - 16s 362us/step - loss: 0.5342 - acc: 0.8134 - inTop3: 0.9641 - val_loss: 0.8510 - val_acc: 0.7242 - val_inTop3: 0.9198\n", "\n", "Epoch 00011: val_loss did not improve from 0.79356\n", "Epoch 12/20\n", "45000/45000 [==============================] - 16s 362us/step - loss: 0.5137 - acc: 0.8193 - inTop3: 0.9666 - val_loss: 0.8380 - val_acc: 0.7420 - val_inTop3: 0.9262\n", "\n", "Epoch 00012: val_loss did not improve from 0.79356\n", "Epoch 13/20\n", "45000/45000 [==============================] - 16s 363us/step - loss: 0.5005 - acc: 0.8263 - inTop3: 0.9687 - val_loss: 0.9413 - val_acc: 0.7250 - val_inTop3: 0.9228\n", "\n", "Epoch 00013: val_loss did not improve from 0.79356\n", "Epoch 14/20\n", "45000/45000 [==============================] - 16s 363us/step - loss: 0.5127 - acc: 0.8224 - inTop3: 0.9673 - val_loss: 0.9392 - val_acc: 0.7292 - val_inTop3: 0.9156\n", "\n", "Epoch 00014: val_loss did not improve from 0.79356\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": 48, "metadata": {}, "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 [==============================] - 18s 13ms/step - loss: 0.9490 - acc: 0.6731 - inTop3: 0.9017 - val_loss: 0.7106 - val_acc: 0.7574 - val_inTop3: 0.9360\n", "\n", "Epoch 00001: val_loss improved from inf to 0.71058, saving model to cnn_aug.hdf5\n", "Epoch 2/25\n", "1406/1406 [==============================] - 18s 13ms/step - loss: 0.9122 - acc: 0.6850 - inTop3: 0.9075 - val_loss: 0.7609 - val_acc: 0.7410 - val_inTop3: 0.9364\n", "\n", "Epoch 00002: val_loss did not improve from 0.71058\n", "Epoch 3/25\n", "1406/1406 [==============================] - 18s 13ms/step - loss: 0.8777 - acc: 0.6969 - inTop3: 0.9113 - val_loss: 0.7996 - val_acc: 0.7350 - val_inTop3: 0.9348\n", "\n", "Epoch 00003: val_loss did not improve from 0.71058\n", "Epoch 4/25\n", "1406/1406 [==============================] - 18s 13ms/step - loss: 0.8643 - acc: 0.7027 - inTop3: 0.9131 - val_loss: 0.7658 - val_acc: 0.7392 - val_inTop3: 0.9330\n", "\n", "Epoch 00004: val_loss did not improve from 0.71058\n", "Epoch 5/25\n", "1406/1406 [==============================] - 18s 13ms/step - loss: 0.8532 - acc: 0.7048 - inTop3: 0.9163 - val_loss: 0.7846 - val_acc: 0.7278 - val_inTop3: 0.9386\n", "\n", "Epoch 00005: val_loss did not improve from 0.71058\n", "Epoch 6/25\n", "1406/1406 [==============================] - 18s 13ms/step - loss: 0.8345 - acc: 0.7129 - inTop3: 0.9200 - val_loss: 0.8165 - val_acc: 0.7314 - val_inTop3: 0.9294\n", "\n", "Epoch 00006: val_loss did not improve from 0.71058\n", "Epoch 7/25\n", "1406/1406 [==============================] - 18s 13ms/step - loss: 0.8251 - acc: 0.7145 - inTop3: 0.9215 - val_loss: 0.8032 - val_acc: 0.7322 - val_inTop3: 0.9280\n", "\n", "Epoch 00007: val_loss did not improve from 0.71058\n", "Epoch 8/25\n", "1406/1406 [==============================] - 18s 13ms/step - loss: 0.8219 - acc: 0.7174 - inTop3: 0.9225 - val_loss: 0.7819 - val_acc: 0.7334 - val_inTop3: 0.9218\n", "\n", "Epoch 00008: val_loss did not improve from 0.71058\n", "Epoch 9/25\n", "1406/1406 [==============================] - 18s 13ms/step - loss: 0.8064 - acc: 0.7229 - inTop3: 0.9239 - val_loss: 0.7871 - val_acc: 0.7350 - val_inTop3: 0.9294\n", "\n", "Epoch 00009: val_loss did not improve from 0.71058\n", "Epoch 10/25\n", "1406/1406 [==============================] - 18s 13ms/step - loss: 0.8048 - acc: 0.7219 - inTop3: 0.9232 - val_loss: 0.8035 - val_acc: 0.7370 - val_inTop3: 0.9214\n", "\n", "Epoch 00010: val_loss did not improve from 0.71058\n", "Epoch 11/25\n", "1406/1406 [==============================] - 18s 13ms/step - loss: 0.7963 - acc: 0.7274 - inTop3: 0.9247 - val_loss: 0.7472 - val_acc: 0.7470 - val_inTop3: 0.9248\n", "\n", "Epoch 00011: val_loss did not improve from 0.71058\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": 51, "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": 52, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "10000/10000 [==============================] - 1s 121us/step\n", "Confusion Matrix:\n", "[[753 17 42 12 20 4 6 16 67 63]\n", " [ 9 844 1 2 4 3 4 2 22 109]\n", " [ 66 3 559 40 132 41 86 42 16 15]\n", " [ 27 16 51 447 100 103 116 64 34 42]\n", " [ 20 2 47 22 739 14 84 62 6 4]\n", " [ 12 5 40 174 71 491 71 93 17 26]\n", " [ 6 9 26 29 40 10 843 9 18 10]\n", " [ 15 6 22 25 61 38 12 788 2 31]\n", " [ 56 15 6 4 12 2 2 6 846 51]\n", " [ 14 57 2 4 10 6 3 9 17 878]]\n", "\n", "Loss:0.8453566763877869; Acc:0.7188; Top3Acc:0.9225\n", "\n" ] }, { "data": { "text/plain": [ "{'loss': 0.8453566763877869, 'acc': 0.7188, 'top3acc': 0.9225}" ] }, "execution_count": 52, "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": "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 }