{"cells":[{"cell_type":"markdown","metadata":{"id":"Xh3-lMtQ8Fca"},"source":["# Esercizio: classificazione del set di dati CIFAR 10\n","\n","CIFAR 10 è un insieme di 60.000 immagini 32x32 a colori, di cui 50.000 per l'addestramento e 10.000 per il test. Ogni immagine può appartenere ad una di 10 possibili categorie: \n","\n","* 0 \tairplane\n","* 1 \tautomobile\n","* 2 \tbird\n","* 3 \tcat\n","* 4 \tdeer\n","* 5 \tdog\n","* 6 \tfrog\n","* 7 \thorse\n","* 8 \tship\n","* 9 \ttruck"]},{"cell_type":"markdown","metadata":{"id":"ZuE5CLEw_Elt"},"source":["## Preparazione dati"]},{"cell_type":"code","execution_count":2,"metadata":{"executionInfo":{"elapsed":564,"status":"ok","timestamp":1648545558254,"user":{"displayName":"Gianluca Amato","userId":"18269286707108730791"},"user_tz":-120},"id":"t2dr0HjTyS6n"},"outputs":[],"source":["import numpy as np\n","import tensorflow as tf\n","import matplotlib.pyplot as plt"]},{"cell_type":"code","execution_count":4,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":14024,"status":"ok","timestamp":1648545575102,"user":{"displayName":"Gianluca Amato","userId":"18269286707108730791"},"user_tz":-120},"id":"qgacOOI48rqa","outputId":"ab82cd1e-bb80-4b37-ff82-6d300bb5f59b"},"outputs":[{"output_type":"stream","name":"stdout","text":["Downloading data from https://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz\n","170500096/170498071 [==============================] - 11s 0us/step\n","170508288/170498071 [==============================] - 11s 0us/step\n"]}],"source":["# Caricamento dell'insieme di dati.\n","\n","(cifar_train_images, cifar_train_labels), (cifar_test_images, cifar_test_labels) = tf.keras.datasets.cifar10.load_data()"]},{"cell_type":"code","execution_count":5,"metadata":{"executionInfo":{"elapsed":499,"status":"ok","timestamp":1648545575595,"user":{"displayName":"Gianluca Amato","userId":"18269286707108730791"},"user_tz":-120},"id":"2csyOh8EAgDd"},"outputs":[],"source":["cifar_train_images_ok = cifar_train_images / 255.0\n","cifar_test_images_ok = cifar_test_images / 255.0"]},{"cell_type":"code","execution_count":6,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":283},"executionInfo":{"elapsed":396,"status":"ok","timestamp":1648545578903,"user":{"displayName":"Gianluca Amato","userId":"18269286707108730791"},"user_tz":-120},"id":"adpt4PUx-2A8","outputId":"49c34408-061f-4c9e-985c-02ca3c92bd4b"},"outputs":[{"output_type":"execute_result","data":{"text/plain":[""]},"metadata":{},"execution_count":6},{"output_type":"display_data","data":{"text/plain":["
"],"image/png":"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\n"},"metadata":{"needs_background":"light"}}],"source":["plt.imshow(cifar_train_images_ok[0])"]},{"cell_type":"code","execution_count":7,"metadata":{"executionInfo":{"elapsed":3,"status":"ok","timestamp":1648545580619,"user":{"displayName":"Gianluca Amato","userId":"18269286707108730791"},"user_tz":-120},"id":"YSroErMk9aPp"},"outputs":[],"source":["# One Hot Ecoding delle etichette\n","\n","cifar_train_labels_ok = tf.keras.utils.to_categorical(cifar_train_labels)\n","cifar_test_labels_ok = tf.keras.utils.to_categorical(cifar_test_labels)"]},{"cell_type":"code","execution_count":8,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":35},"executionInfo":{"elapsed":11,"status":"ok","timestamp":1648545581948,"user":{"displayName":"Gianluca Amato","userId":"18269286707108730791"},"user_tz":-120},"id":"M-r0rmeQAY7q","outputId":"3753658a-ebb7-4f81-b4c0-af5502f825cf"},"outputs":[{"output_type":"execute_result","data":{"text/plain":["'frog'"],"application/vnd.google.colaboratory.intrinsic+json":{"type":"string"}},"metadata":{},"execution_count":8}],"source":["# Creiamo anche un vettore di nomi per poter facilmente associare l'etichetta\n","# numerica al corrispondente significato\n","\n","cifar_class_names = ['airplane','automobile','bird','cat','deer','dog','frog','horse','ship','truck']\n","\n","cifar_class_names[cifar_train_labels[0, 0]]"]},{"cell_type":"markdown","metadata":{"id":"0WTaVfOH_Gqv"},"source":["## Rete neurale fully connected"]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":330,"status":"ok","timestamp":1648543076112,"user":{"displayName":"Gianluca Amato","userId":"18269286707108730791"},"user_tz":-120},"id":"p3tJDNN6_IYL","outputId":"2f49162f-f6bf-4a26-bc9e-d97e9972bf52"},"outputs":[{"name":"stdout","output_type":"stream","text":["Model: \"sequential_5\"\n","_________________________________________________________________\n"," Layer (type) Output Shape Param # \n","=================================================================\n"," flatten_5 (Flatten) (None, 3072) 0 \n"," \n"," dense_14 (Dense) (None, 512) 1573376 \n"," \n"," dense_15 (Dense) (None, 512) 262656 \n"," \n"," dense_16 (Dense) (None, 10) 5130 \n"," \n","=================================================================\n","Total params: 1,841,162\n","Trainable params: 1,841,162\n","Non-trainable params: 0\n","_________________________________________________________________\n"]}],"source":["# Possibile soluzione. Notare che, nonostante il numero molto alto di strati intermedi\n","# (e la conseguenza lentezza nell'addestramento) le prestazioni della rete sono molto\n","# inferiori a quelle che si sono ottenute con MNIST.\n","\n","network_cifar = tf.keras.models.Sequential([\n"," tf.keras.layers.Flatten(input_shape=(32, 32, 3)),\n"," tf.keras.layers.Dense(512, activation='relu'),\n"," tf.keras.layers.Dense(512, activation='relu'),\n"," tf.keras.layers.Dense(10, activation='softmax')\n","])\n","network_cifar.summary()"]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":77807,"status":"ok","timestamp":1648543159345,"user":{"displayName":"Gianluca Amato","userId":"18269286707108730791"},"user_tz":-120},"id":"VWx_xR4c9nzq","outputId":"916750ab-e51e-4d68-d809-05fd625b0d53"},"outputs":[{"name":"stdout","output_type":"stream","text":["Epoch 1/30\n","352/352 [==============================] - 3s 7ms/step - loss: 1.9001 - accuracy: 0.3182 - val_loss: 1.8291 - val_accuracy: 0.3364\n","Epoch 2/30\n","352/352 [==============================] - 2s 7ms/step - loss: 1.6727 - accuracy: 0.4018 - val_loss: 1.6425 - val_accuracy: 0.4130\n","Epoch 3/30\n","352/352 [==============================] - 2s 7ms/step - loss: 1.5860 - accuracy: 0.4342 - val_loss: 1.5635 - val_accuracy: 0.4390\n","Epoch 4/30\n","352/352 [==============================] - 3s 8ms/step - loss: 1.5273 - accuracy: 0.4557 - val_loss: 1.5412 - val_accuracy: 0.4500\n","Epoch 5/30\n","352/352 [==============================] - 3s 7ms/step - loss: 1.4902 - accuracy: 0.4697 - val_loss: 1.5285 - val_accuracy: 0.4514\n","Epoch 6/30\n","352/352 [==============================] - 3s 7ms/step - loss: 1.4464 - accuracy: 0.4844 - val_loss: 1.5267 - val_accuracy: 0.4654\n","Epoch 7/30\n","352/352 [==============================] - 3s 8ms/step - loss: 1.4165 - accuracy: 0.4967 - val_loss: 1.4493 - val_accuracy: 0.4844\n","Epoch 8/30\n","352/352 [==============================] - 3s 8ms/step - loss: 1.3934 - accuracy: 0.5027 - val_loss: 1.4735 - val_accuracy: 0.4692\n","Epoch 9/30\n","352/352 [==============================] - 3s 9ms/step - loss: 1.3610 - accuracy: 0.5159 - val_loss: 1.4422 - val_accuracy: 0.4938\n","Epoch 10/30\n","352/352 [==============================] - 4s 10ms/step - loss: 1.3400 - accuracy: 0.5236 - val_loss: 1.4146 - val_accuracy: 0.4924\n","Epoch 11/30\n","352/352 [==============================] - 3s 8ms/step - loss: 1.3064 - accuracy: 0.5363 - val_loss: 1.4380 - val_accuracy: 0.4966\n","Epoch 12/30\n","352/352 [==============================] - 3s 7ms/step - loss: 1.2929 - accuracy: 0.5410 - val_loss: 1.4284 - val_accuracy: 0.4920\n","Epoch 13/30\n","352/352 [==============================] - 3s 7ms/step - loss: 1.2647 - accuracy: 0.5488 - val_loss: 1.3964 - val_accuracy: 0.5108\n","Epoch 14/30\n","352/352 [==============================] - 3s 7ms/step - loss: 1.2424 - accuracy: 0.5572 - val_loss: 1.4292 - val_accuracy: 0.5048\n","Epoch 15/30\n","352/352 [==============================] - 2s 7ms/step - loss: 1.2224 - accuracy: 0.5667 - val_loss: 1.4256 - val_accuracy: 0.5074\n","Epoch 16/30\n","352/352 [==============================] - 2s 7ms/step - loss: 1.2005 - accuracy: 0.5720 - val_loss: 1.4162 - val_accuracy: 0.5062\n","Epoch 17/30\n","352/352 [==============================] - 2s 7ms/step - loss: 1.1807 - accuracy: 0.5788 - val_loss: 1.3805 - val_accuracy: 0.5198\n","Epoch 18/30\n","352/352 [==============================] - 2s 6ms/step - loss: 1.1548 - accuracy: 0.5881 - val_loss: 1.3874 - val_accuracy: 0.5206\n","Epoch 19/30\n","352/352 [==============================] - 2s 7ms/step - loss: 1.1371 - accuracy: 0.5934 - val_loss: 1.4362 - val_accuracy: 0.5004\n","Epoch 20/30\n","352/352 [==============================] - 2s 7ms/step - loss: 1.1175 - accuracy: 0.6004 - val_loss: 1.4014 - val_accuracy: 0.5180\n","Epoch 21/30\n","352/352 [==============================] - 2s 6ms/step - loss: 1.1037 - accuracy: 0.6077 - val_loss: 1.4319 - val_accuracy: 0.5094\n","Epoch 22/30\n","352/352 [==============================] - 2s 7ms/step - loss: 1.0713 - accuracy: 0.6174 - val_loss: 1.3983 - val_accuracy: 0.5182\n","Epoch 23/30\n","352/352 [==============================] - 2s 7ms/step - loss: 1.0555 - accuracy: 0.6230 - val_loss: 1.4199 - val_accuracy: 0.5188\n","Epoch 24/30\n","352/352 [==============================] - 2s 7ms/step - loss: 1.0325 - accuracy: 0.6304 - val_loss: 1.4092 - val_accuracy: 0.5258\n","Epoch 25/30\n","352/352 [==============================] - 3s 7ms/step - loss: 1.0221 - accuracy: 0.6326 - val_loss: 1.4767 - val_accuracy: 0.5074\n","Epoch 26/30\n","352/352 [==============================] - 2s 7ms/step - loss: 1.0001 - accuracy: 0.6415 - val_loss: 1.4345 - val_accuracy: 0.5208\n","Epoch 27/30\n","352/352 [==============================] - 2s 7ms/step - loss: 0.9802 - accuracy: 0.6485 - val_loss: 1.4552 - val_accuracy: 0.5194\n","Epoch 28/30\n","352/352 [==============================] - 2s 7ms/step - loss: 0.9682 - accuracy: 0.6535 - val_loss: 1.5178 - val_accuracy: 0.5058\n","Epoch 29/30\n","352/352 [==============================] - 2s 7ms/step - loss: 0.9602 - accuracy: 0.6540 - val_loss: 1.4814 - val_accuracy: 0.5194\n","Epoch 30/30\n","352/352 [==============================] - 2s 7ms/step - loss: 0.9296 - accuracy: 0.6667 - val_loss: 1.5085 - val_accuracy: 0.5164\n"]}],"source":["# Addestriamo per 30 epoche. Notiamo che l'accuratezza sull'insieme di validazione\n","# si ferma intorno al 52%. Si nota anche una certa lentezza nel miglioramento della\n","# accuratezza sull'insieme di training.\n","\n","# La rete neurale è molto complessa, apprende lentamente e con overfitting.\n","\n","network_cifar.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])\n","history_cifar = network_cifar.fit(cifar_train_images_ok, cifar_train_labels_ok, epochs=30, batch_size=128, validation_split = 0.1)"]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":4234,"status":"ok","timestamp":1648543177221,"user":{"displayName":"Gianluca Amato","userId":"18269286707108730791"},"user_tz":-120},"id":"4py-FmCsEDdJ","outputId":"eb8fc5e5-c60a-48fe-faf3-e5162cb4ff5e"},"outputs":[{"data":{"text/plain":["array([ 4, 9, 11, ..., 49994, 49995, 49999])"]},"execution_count":34,"metadata":{},"output_type":"execute_result"}],"source":["# Questo è l'elenco delle immagini (dell'insieme di addestramento) per cui la rete sbaglia\n","\n","cifar_predictions = network_cifar.predict(cifar_train_images_ok)\n","cifar_mistakes = np.where([ np.argmax(x) for x in cifar_predictions] != cifar_train_labels.flatten())[0]\n","cifar_mistakes"]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":335},"executionInfo":{"elapsed":806,"status":"ok","timestamp":1648543179945,"user":{"displayName":"Gianluca Amato","userId":"18269286707108730791"},"user_tz":-120},"id":"6oAtihIjEWiu","outputId":"5ff21e7b-e4fe-4c12-ae92-a68acf76cb4e"},"outputs":[{"name":"stdout","output_type":"stream","text":["Immagine n. 4\n","Predizione: airplane\n","Valore effettivo: automobile\n"]},{"data":{"text/plain":[""]},"execution_count":35,"metadata":{},"output_type":"execute_result"},{"data":{"image/png":"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\n","text/plain":["
"]},"metadata":{},"output_type":"display_data"}],"source":["# Controlliamo la prima immagine sbagiata\n","\n","print(\"Immagine n. \", cifar_mistakes[0])\n","print(\"Predizione: \", cifar_class_names[np.argmax(cifar_mistakes[0])])\n","print(\"Valore effettivo: \", cifar_class_names[cifar_train_labels[cifar_mistakes[0], 0]])\n","\n","plt.imshow(cifar_train_images[cifar_mistakes[0]])"]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":84339,"status":"ok","timestamp":1648543403323,"user":{"displayName":"Gianluca Amato","userId":"18269286707108730791"},"user_tz":-120},"id":"BpJxmZ2FzLaa","outputId":"1aaac078-6d12-4807-c50f-c4938d66c084"},"outputs":[{"name":"stdout","output_type":"stream","text":["Epoch 1/24\n","391/391 [==============================] - 3s 7ms/step - loss: 1.8868 - accuracy: 0.3239\n","Epoch 2/24\n","391/391 [==============================] - 3s 7ms/step - loss: 1.6701 - accuracy: 0.4000\n","Epoch 3/24\n","391/391 [==============================] - 3s 7ms/step - loss: 1.5850 - accuracy: 0.4337\n","Epoch 4/24\n","391/391 [==============================] - 3s 6ms/step - loss: 1.5278 - accuracy: 0.4537\n","Epoch 5/24\n","391/391 [==============================] - 3s 7ms/step - loss: 1.4764 - accuracy: 0.4735\n","Epoch 6/24\n","391/391 [==============================] - 3s 7ms/step - loss: 1.4423 - accuracy: 0.4841\n","Epoch 7/24\n","391/391 [==============================] - 3s 7ms/step - loss: 1.4016 - accuracy: 0.5027\n","Epoch 8/24\n","391/391 [==============================] - 3s 7ms/step - loss: 1.3708 - accuracy: 0.5127\n","Epoch 9/24\n","391/391 [==============================] - 3s 8ms/step - loss: 1.3452 - accuracy: 0.5208\n","Epoch 10/24\n","391/391 [==============================] - 3s 7ms/step - loss: 1.3275 - accuracy: 0.5255\n","Epoch 11/24\n","391/391 [==============================] - 3s 7ms/step - loss: 1.2985 - accuracy: 0.5374\n","Epoch 12/24\n","391/391 [==============================] - 3s 7ms/step - loss: 1.2783 - accuracy: 0.5472\n","Epoch 13/24\n","391/391 [==============================] - 3s 7ms/step - loss: 1.2544 - accuracy: 0.5529\n","Epoch 14/24\n","391/391 [==============================] - 2s 6ms/step - loss: 1.2287 - accuracy: 0.5624\n","Epoch 15/24\n","391/391 [==============================] - 2s 6ms/step - loss: 1.2111 - accuracy: 0.5680\n","Epoch 16/24\n","391/391 [==============================] - 3s 6ms/step - loss: 1.1865 - accuracy: 0.5764\n","Epoch 17/24\n","391/391 [==============================] - 2s 6ms/step - loss: 1.1724 - accuracy: 0.5813\n","Epoch 18/24\n","391/391 [==============================] - 2s 6ms/step - loss: 1.1503 - accuracy: 0.5910\n","Epoch 19/24\n","391/391 [==============================] - 2s 6ms/step - loss: 1.1341 - accuracy: 0.5965\n","Epoch 20/24\n","391/391 [==============================] - 2s 6ms/step - loss: 1.1192 - accuracy: 0.5997\n","Epoch 21/24\n","391/391 [==============================] - 2s 6ms/step - loss: 1.0920 - accuracy: 0.6113\n","Epoch 22/24\n","391/391 [==============================] - 2s 6ms/step - loss: 1.0871 - accuracy: 0.6115\n","Epoch 23/24\n","391/391 [==============================] - 2s 6ms/step - loss: 1.0669 - accuracy: 0.6173\n","Epoch 24/24\n","391/391 [==============================] - 2s 6ms/step - loss: 1.0553 - accuracy: 0.6241\n"]},{"data":{"text/plain":[""]},"execution_count":37,"metadata":{},"output_type":"execute_result"}],"source":["# Riaddestro usando tutti i dati di addestramento per 24 epoche, il numero di epoche\n","# che ha prodotto il valore maggiore di accuratezza sull'insieme di validazione. Si\n","# noti che questo valore cambia di solito ogni volta che si riaddestra la rete.\n","\n","network_cifar_final = tf.keras.models.Sequential([\n"," tf.keras.layers.Flatten(input_shape=(32, 32, 3)),\n"," tf.keras.layers.Dense(512, activation='relu'),\n"," tf.keras.layers.Dense(512, activation='relu'),\n"," tf.keras.layers.Dense(10, activation='softmax')\n","])\n","network_cifar_final.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])\n","network_cifar_final.fit(cifar_train_images_ok, cifar_train_labels_ok, epochs=24, batch_size=128)"]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":1853,"status":"ok","timestamp":1648543407597,"user":{"displayName":"Gianluca Amato","userId":"18269286707108730791"},"user_tz":-120},"id":"tqJIf-ZR1ofh","outputId":"b62dd925-233c-4e8d-a064-291d1bac537a"},"outputs":[{"name":"stdout","output_type":"stream","text":["313/313 [==============================] - 1s 4ms/step - loss: 1.4464 - accuracy: 0.5064\n"]},{"data":{"text/plain":["[1.4463984966278076, 0.5063999891281128]"]},"execution_count":38,"metadata":{},"output_type":"execute_result"}],"source":["# Valutiamo il risultato finale sull'insieme di test.\n","\n","network_cifar_final.evaluate(cifar_test_images_ok, cifar_test_labels_ok)"]},{"cell_type":"markdown","metadata":{"id":"-9rf_pr-0wb3"},"source":["## Rete convoluzionale"]},{"cell_type":"code","execution_count":9,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":3527,"status":"ok","timestamp":1648545590357,"user":{"displayName":"Gianluca Amato","userId":"18269286707108730791"},"user_tz":-120},"id":"muuR0rem07TS","outputId":"72e2a5c4-f90c-4a40-fc71-5cb6da1e855f"},"outputs":[{"output_type":"stream","name":"stdout","text":["Model: \"sequential\"\n","_________________________________________________________________\n"," Layer (type) Output Shape Param # \n","=================================================================\n"," conv2d (Conv2D) (None, 30, 30, 32) 896 \n"," \n"," max_pooling2d (MaxPooling2D (None, 15, 15, 32) 0 \n"," ) \n"," \n"," conv2d_1 (Conv2D) (None, 13, 13, 64) 18496 \n"," \n"," max_pooling2d_1 (MaxPooling (None, 6, 6, 64) 0 \n"," 2D) \n"," \n"," conv2d_2 (Conv2D) (None, 4, 4, 128) 73856 \n"," \n"," flatten (Flatten) (None, 2048) 0 \n"," \n"," dense (Dense) (None, 128) 262272 \n"," \n"," dense_1 (Dense) (None, 10) 1290 \n"," \n","=================================================================\n","Total params: 356,810\n","Trainable params: 356,810\n","Non-trainable params: 0\n","_________________________________________________________________\n"]}],"source":["# Usiamo allora una rete convoluzionale invece di una fully-connected. La rete convoluzionale\n","# avrà molti meno pesi ed è intrinsecamente più adatta al riconoscimento delle immagini.\n","\n","network_cifar2 = tf.keras.models.Sequential([\n"," tf.keras.layers.Conv2D(32, (3, 3), activation='relu', input_shape=(32, 32, 3)),\n"," tf.keras.layers.MaxPooling2D((2, 2)),\n"," tf.keras.layers.Conv2D(64, (3, 3), activation='relu'),\n"," tf.keras.layers.MaxPooling2D((2, 2)),\n"," tf.keras.layers.Conv2D(128, (3, 3), activation='relu'),\n"," tf.keras.layers.Flatten(),\n"," tf.keras.layers.Dense(128, activation='relu'),\n"," tf.keras.layers.Dense(10, activation='softmax')\n","])\n","network_cifar2.summary()"]},{"cell_type":"code","execution_count":10,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"wwZ_Hmbx1GBj","executionInfo":{"status":"ok","timestamp":1648545736127,"user_tz":-120,"elapsed":144071,"user":{"displayName":"Gianluca Amato","userId":"18269286707108730791"}},"outputId":"5732a60d-2e1d-40b1-d643-ff462eb014dc"},"outputs":[{"output_type":"stream","name":"stdout","text":["Epoch 1/30\n","352/352 [==============================] - 14s 14ms/step - loss: 1.6225 - accuracy: 0.4068 - val_loss: 1.3363 - val_accuracy: 0.5166\n","Epoch 2/30\n","352/352 [==============================] - 5s 13ms/step - loss: 1.2665 - accuracy: 0.5467 - val_loss: 1.2534 - val_accuracy: 0.5732\n","Epoch 3/30\n","352/352 [==============================] - 4s 12ms/step - loss: 1.1049 - accuracy: 0.6111 - val_loss: 1.0606 - val_accuracy: 0.6232\n","Epoch 4/30\n","352/352 [==============================] - 4s 12ms/step - loss: 0.9847 - accuracy: 0.6549 - val_loss: 0.9879 - val_accuracy: 0.6538\n","Epoch 5/30\n","352/352 [==============================] - 4s 12ms/step - loss: 0.8929 - accuracy: 0.6901 - val_loss: 0.8928 - val_accuracy: 0.6920\n","Epoch 6/30\n","352/352 [==============================] - 4s 12ms/step - loss: 0.8168 - accuracy: 0.7158 - val_loss: 0.9299 - val_accuracy: 0.6858\n","Epoch 7/30\n","352/352 [==============================] - 4s 12ms/step - loss: 0.7559 - accuracy: 0.7370 - val_loss: 0.8144 - val_accuracy: 0.7174\n","Epoch 8/30\n","352/352 [==============================] - 4s 12ms/step - loss: 0.7020 - accuracy: 0.7549 - val_loss: 0.8514 - val_accuracy: 0.7106\n","Epoch 9/30\n","352/352 [==============================] - 4s 12ms/step - loss: 0.6511 - accuracy: 0.7741 - val_loss: 0.8207 - val_accuracy: 0.7192\n","Epoch 10/30\n","352/352 [==============================] - 4s 12ms/step - loss: 0.6059 - accuracy: 0.7849 - val_loss: 0.7866 - val_accuracy: 0.7294\n","Epoch 11/30\n","352/352 [==============================] - 4s 12ms/step - loss: 0.5614 - accuracy: 0.8045 - val_loss: 0.7951 - val_accuracy: 0.7272\n","Epoch 12/30\n","352/352 [==============================] - 4s 12ms/step - loss: 0.5147 - accuracy: 0.8190 - val_loss: 0.7993 - val_accuracy: 0.7340\n","Epoch 13/30\n","352/352 [==============================] - 4s 12ms/step - loss: 0.4803 - accuracy: 0.8319 - val_loss: 0.8211 - val_accuracy: 0.7372\n","Epoch 14/30\n","352/352 [==============================] - 4s 12ms/step - loss: 0.4413 - accuracy: 0.8462 - val_loss: 0.8306 - val_accuracy: 0.7386\n","Epoch 15/30\n","352/352 [==============================] - 4s 12ms/step - loss: 0.4011 - accuracy: 0.8607 - val_loss: 0.8745 - val_accuracy: 0.7330\n","Epoch 16/30\n","352/352 [==============================] - 4s 12ms/step - loss: 0.3590 - accuracy: 0.8741 - val_loss: 0.9118 - val_accuracy: 0.7286\n","Epoch 17/30\n","352/352 [==============================] - 4s 12ms/step - loss: 0.3260 - accuracy: 0.8864 - val_loss: 0.9484 - val_accuracy: 0.7306\n","Epoch 18/30\n","352/352 [==============================] - 4s 12ms/step - loss: 0.2860 - accuracy: 0.9002 - val_loss: 0.9695 - val_accuracy: 0.7310\n","Epoch 19/30\n","352/352 [==============================] - 4s 12ms/step - loss: 0.2535 - accuracy: 0.9118 - val_loss: 1.0382 - val_accuracy: 0.7406\n","Epoch 20/30\n","352/352 [==============================] - 4s 12ms/step - loss: 0.2226 - accuracy: 0.9227 - val_loss: 1.0755 - val_accuracy: 0.7300\n","Epoch 21/30\n","352/352 [==============================] - 4s 12ms/step - loss: 0.2082 - accuracy: 0.9267 - val_loss: 1.1380 - val_accuracy: 0.7312\n","Epoch 22/30\n","352/352 [==============================] - 4s 12ms/step - loss: 0.1754 - accuracy: 0.9404 - val_loss: 1.2082 - val_accuracy: 0.7240\n","Epoch 23/30\n","352/352 [==============================] - 4s 12ms/step - loss: 0.1525 - accuracy: 0.9475 - val_loss: 1.2877 - val_accuracy: 0.7128\n","Epoch 24/30\n","352/352 [==============================] - 4s 12ms/step - loss: 0.1429 - accuracy: 0.9497 - val_loss: 1.2906 - val_accuracy: 0.7316\n","Epoch 25/30\n","352/352 [==============================] - 4s 12ms/step - loss: 0.1286 - accuracy: 0.9554 - val_loss: 1.3949 - val_accuracy: 0.7196\n","Epoch 26/30\n","352/352 [==============================] - 4s 12ms/step - loss: 0.1133 - accuracy: 0.9609 - val_loss: 1.5200 - val_accuracy: 0.7286\n","Epoch 27/30\n","352/352 [==============================] - 4s 12ms/step - loss: 0.1034 - accuracy: 0.9650 - val_loss: 1.5267 - val_accuracy: 0.7208\n","Epoch 28/30\n","352/352 [==============================] - 4s 12ms/step - loss: 0.0964 - accuracy: 0.9672 - val_loss: 1.6386 - val_accuracy: 0.7224\n","Epoch 29/30\n","352/352 [==============================] - 4s 12ms/step - loss: 0.0850 - accuracy: 0.9704 - val_loss: 1.6781 - val_accuracy: 0.7224\n","Epoch 30/30\n","352/352 [==============================] - 4s 12ms/step - loss: 0.0861 - accuracy: 0.9697 - val_loss: 1.7656 - val_accuracy: 0.7032\n"]}],"source":["# Addestriamo la rete convoluzionale. Vediamo che, sebbene siamo ancora in presenza \n","# di overfitting, l'accuratezza sia sull'insieme di addestramento che di validazione \n","# è più alta adesso rispetto che nella rete fully-connected precedente.\n","\n","network_cifar2.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])\n","history_cifar2 = network_cifar2.fit(cifar_train_images_ok, cifar_train_labels_ok, epochs=30, batch_size=128, validation_split=0.1)"]},{"cell_type":"code","execution_count":13,"metadata":{"id":"tjsLclTI2qQg","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1648546424534,"user_tz":-120,"elapsed":144232,"user":{"displayName":"Gianluca Amato","userId":"18269286707108730791"}},"outputId":"c96ddfe1-1b95-4d67-9f8b-36c5cf5449b8"},"outputs":[{"output_type":"stream","name":"stdout","text":["Epoch 1/19\n","391/391 [==============================] - 5s 12ms/step - loss: 1.5742 - accuracy: 0.4250\n","Epoch 2/19\n","391/391 [==============================] - 5s 12ms/step - loss: 1.2281 - accuracy: 0.5635\n","Epoch 3/19\n","391/391 [==============================] - 5s 12ms/step - loss: 1.0569 - accuracy: 0.6301\n","Epoch 4/19\n","391/391 [==============================] - 5s 12ms/step - loss: 0.9501 - accuracy: 0.6693\n","Epoch 5/19\n","391/391 [==============================] - 5s 12ms/step - loss: 0.8662 - accuracy: 0.6959\n","Epoch 6/19\n","391/391 [==============================] - 5s 12ms/step - loss: 0.7991 - accuracy: 0.7212\n","Epoch 7/19\n","391/391 [==============================] - 5s 12ms/step - loss: 0.7431 - accuracy: 0.7420\n","Epoch 8/19\n","391/391 [==============================] - 5s 12ms/step - loss: 0.6877 - accuracy: 0.7610\n","Epoch 9/19\n","391/391 [==============================] - 5s 12ms/step - loss: 0.6369 - accuracy: 0.7799\n","Epoch 10/19\n","391/391 [==============================] - 4s 11ms/step - loss: 0.5890 - accuracy: 0.7964\n","Epoch 11/19\n","391/391 [==============================] - 4s 11ms/step - loss: 0.5460 - accuracy: 0.8118\n","Epoch 12/19\n","391/391 [==============================] - 5s 12ms/step - loss: 0.5046 - accuracy: 0.8233\n","Epoch 13/19\n","391/391 [==============================] - 5s 12ms/step - loss: 0.4566 - accuracy: 0.8413\n","Epoch 14/19\n","391/391 [==============================] - 4s 11ms/step - loss: 0.4116 - accuracy: 0.8589\n","Epoch 15/19\n","391/391 [==============================] - 4s 11ms/step - loss: 0.3762 - accuracy: 0.8687\n","Epoch 16/19\n","391/391 [==============================] - 4s 11ms/step - loss: 0.3412 - accuracy: 0.8808\n","Epoch 17/19\n","391/391 [==============================] - 4s 11ms/step - loss: 0.2984 - accuracy: 0.8978\n","Epoch 18/19\n","391/391 [==============================] - 4s 11ms/step - loss: 0.2700 - accuracy: 0.9058\n","Epoch 19/19\n","391/391 [==============================] - 4s 11ms/step - loss: 0.2423 - accuracy: 0.9144\n"]},{"output_type":"execute_result","data":{"text/plain":[""]},"metadata":{},"execution_count":13}],"source":["# Riaddestro usando tutti i dati di addestramento per 19 epoche, il numero di epoche\n","# che ha prodotto il valore maggiore di accuratezza sull'insieme di validazione. Si\n","# noti che questo valore cambia di solito ad ogni esecuzione dela procedura di \n","# addestramento.\n","\n","network_cifar2_final = tf.keras.models.Sequential([\n"," tf.keras.layers.Conv2D(32, (3, 3), activation='relu', input_shape=(32, 32, 3)),\n"," tf.keras.layers.MaxPooling2D((2, 2)),\n"," tf.keras.layers.Conv2D(64, (3, 3), activation='relu'),\n"," tf.keras.layers.MaxPooling2D((2, 2)),\n"," tf.keras.layers.Conv2D(128, (3, 3), activation='relu'),\n"," tf.keras.layers.Flatten(),\n"," tf.keras.layers.Dense(128, activation='relu'),\n"," tf.keras.layers.Dense(10, activation='softmax')\n","])\n","network_cifar2_final.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])\n","network_cifar2_final.fit(cifar_train_images_ok, cifar_train_labels_ok, epochs=19, batch_size=128)"]},{"cell_type":"code","execution_count":14,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":2325,"status":"ok","timestamp":1648546428779,"user":{"displayName":"Gianluca Amato","userId":"18269286707108730791"},"user_tz":-120},"id":"rUyTXV_79JYu","outputId":"88dd245a-9dce-46c1-f068-d2b62807428a"},"outputs":[{"output_type":"stream","name":"stdout","text":["313/313 [==============================] - 2s 5ms/step - loss: 1.0995 - accuracy: 0.7258\n"]},{"output_type":"execute_result","data":{"text/plain":["[1.0995346307754517, 0.7257999777793884]"]},"metadata":{},"execution_count":14}],"source":["# Valuto sull'insieme di test. Si noti che l'accuratezza è notevolmente aumentata\n","# rispetto alla rete full-connected.\n","\n","network_cifar2_final.evaluate(cifar_test_images_ok, cifar_test_labels_ok)"]},{"cell_type":"markdown","metadata":{"id":"ERzxwtHrCP0y"},"source":["# Rete convoluzionale con Dropout"]},{"cell_type":"code","execution_count":16,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":407,"status":"ok","timestamp":1648546469605,"user":{"displayName":"Gianluca Amato","userId":"18269286707108730791"},"user_tz":-120},"id":"IyeEDHTuCOKq","outputId":"5ddaf757-9423-4fd7-f3c6-af41569ac20b"},"outputs":[{"output_type":"stream","name":"stdout","text":["Model: \"sequential_5\"\n","_________________________________________________________________\n"," Layer (type) Output Shape Param # \n","=================================================================\n"," conv2d_12 (Conv2D) (None, 30, 30, 32) 896 \n"," \n"," max_pooling2d_8 (MaxPooling (None, 15, 15, 32) 0 \n"," 2D) \n"," \n"," dropout_3 (Dropout) (None, 15, 15, 32) 0 \n"," \n"," conv2d_13 (Conv2D) (None, 13, 13, 64) 18496 \n"," \n"," max_pooling2d_9 (MaxPooling (None, 6, 6, 64) 0 \n"," 2D) \n"," \n"," dropout_4 (Dropout) (None, 6, 6, 64) 0 \n"," \n"," conv2d_14 (Conv2D) (None, 4, 4, 128) 73856 \n"," \n"," dropout_5 (Dropout) (None, 4, 4, 128) 0 \n"," \n"," flatten_5 (Flatten) (None, 2048) 0 \n"," \n"," dense_11 (Dense) (None, 128) 262272 \n"," \n"," dense_12 (Dense) (None, 10) 1290 \n"," \n","=================================================================\n","Total params: 356,810\n","Trainable params: 356,810\n","Non-trainable params: 0\n","_________________________________________________________________\n"]}],"source":["# Per provare a ridurre l'overfitting, aggiungiamo degli strati di dropout.\n","\n","network_cifar3 = tf.keras.models.Sequential([\n"," tf.keras.layers.Conv2D(32, (3, 3), activation='relu', input_shape=(32, 32, 3)),\n"," tf.keras.layers.MaxPooling2D((2, 2)),\n"," tf.keras.layers.Dropout(0.2),\n"," tf.keras.layers.Conv2D(64, (3, 3), activation='relu'),\n"," tf.keras.layers.MaxPooling2D((2, 2)),\n"," tf.keras.layers.Dropout(0.2),\n"," tf.keras.layers.Conv2D(128, (3, 3), activation='relu'),\n"," tf.keras.layers.Dropout(0.2),\n"," tf.keras.layers.Flatten(),\n"," tf.keras.layers.Dense(128, activation='relu'),\n"," tf.keras.layers.Dense(10, activation='softmax')\n","])\n","network_cifar3.summary()"]},{"cell_type":"code","execution_count":17,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":143307,"status":"ok","timestamp":1648546617401,"user":{"displayName":"Gianluca Amato","userId":"18269286707108730791"},"user_tz":-120},"id":"71ZSwdKm9KOe","outputId":"4368c9ce-88f3-4719-b237-795097dbc64e"},"outputs":[{"output_type":"stream","name":"stdout","text":["Epoch 1/30\n","352/352 [==============================] - 5s 13ms/step - loss: 1.6766 - accuracy: 0.3816 - val_loss: 1.3669 - val_accuracy: 0.5114\n","Epoch 2/30\n","352/352 [==============================] - 5s 14ms/step - loss: 1.3146 - accuracy: 0.5253 - val_loss: 1.1953 - val_accuracy: 0.5854\n","Epoch 3/30\n","352/352 [==============================] - 5s 14ms/step - loss: 1.1726 - accuracy: 0.5843 - val_loss: 1.1124 - val_accuracy: 0.6090\n","Epoch 4/30\n","352/352 [==============================] - 5s 14ms/step - loss: 1.0715 - accuracy: 0.6239 - val_loss: 0.9861 - val_accuracy: 0.6572\n","Epoch 5/30\n","352/352 [==============================] - 5s 14ms/step - loss: 0.9864 - accuracy: 0.6532 - val_loss: 0.9058 - val_accuracy: 0.6820\n","Epoch 6/30\n","352/352 [==============================] - 5s 14ms/step - loss: 0.9285 - accuracy: 0.6722 - val_loss: 0.8661 - val_accuracy: 0.6944\n","Epoch 7/30\n","352/352 [==============================] - 5s 13ms/step - loss: 0.8726 - accuracy: 0.6925 - val_loss: 0.8567 - val_accuracy: 0.7068\n","Epoch 8/30\n","352/352 [==============================] - 5s 14ms/step - loss: 0.8366 - accuracy: 0.7081 - val_loss: 0.8362 - val_accuracy: 0.7118\n","Epoch 9/30\n","352/352 [==============================] - 5s 14ms/step - loss: 0.7926 - accuracy: 0.7198 - val_loss: 0.7934 - val_accuracy: 0.7280\n","Epoch 10/30\n","352/352 [==============================] - 5s 13ms/step - loss: 0.7594 - accuracy: 0.7302 - val_loss: 0.7874 - val_accuracy: 0.7244\n","Epoch 11/30\n","352/352 [==============================] - 5s 14ms/step - loss: 0.7252 - accuracy: 0.7463 - val_loss: 0.7435 - val_accuracy: 0.7418\n","Epoch 12/30\n","352/352 [==============================] - 5s 14ms/step - loss: 0.7046 - accuracy: 0.7517 - val_loss: 0.7495 - val_accuracy: 0.7386\n","Epoch 13/30\n","352/352 [==============================] - 5s 14ms/step - loss: 0.6774 - accuracy: 0.7616 - val_loss: 0.7104 - val_accuracy: 0.7538\n","Epoch 14/30\n","352/352 [==============================] - 5s 13ms/step - loss: 0.6449 - accuracy: 0.7714 - val_loss: 0.7151 - val_accuracy: 0.7504\n","Epoch 15/30\n","352/352 [==============================] - 4s 12ms/step - loss: 0.6265 - accuracy: 0.7767 - val_loss: 0.7087 - val_accuracy: 0.7560\n","Epoch 16/30\n","352/352 [==============================] - 5s 13ms/step - loss: 0.6045 - accuracy: 0.7839 - val_loss: 0.6891 - val_accuracy: 0.7626\n","Epoch 17/30\n","352/352 [==============================] - 4s 12ms/step - loss: 0.5849 - accuracy: 0.7927 - val_loss: 0.6784 - val_accuracy: 0.7718\n","Epoch 18/30\n","352/352 [==============================] - 4s 13ms/step - loss: 0.5625 - accuracy: 0.7999 - val_loss: 0.6832 - val_accuracy: 0.7672\n","Epoch 19/30\n","352/352 [==============================] - 4s 13ms/step - loss: 0.5473 - accuracy: 0.8046 - val_loss: 0.6902 - val_accuracy: 0.7670\n","Epoch 20/30\n","352/352 [==============================] - 4s 12ms/step - loss: 0.5279 - accuracy: 0.8121 - val_loss: 0.8008 - val_accuracy: 0.7406\n","Epoch 21/30\n","352/352 [==============================] - 4s 13ms/step - loss: 0.5200 - accuracy: 0.8154 - val_loss: 0.6986 - val_accuracy: 0.7692\n","Epoch 22/30\n","352/352 [==============================] - 4s 13ms/step - loss: 0.4979 - accuracy: 0.8228 - val_loss: 0.7026 - val_accuracy: 0.7686\n","Epoch 23/30\n","352/352 [==============================] - 5s 15ms/step - loss: 0.4838 - accuracy: 0.8258 - val_loss: 0.6983 - val_accuracy: 0.7716\n","Epoch 24/30\n","352/352 [==============================] - 5s 14ms/step - loss: 0.4690 - accuracy: 0.8325 - val_loss: 0.7090 - val_accuracy: 0.7684\n","Epoch 25/30\n","352/352 [==============================] - 5s 14ms/step - loss: 0.4644 - accuracy: 0.8329 - val_loss: 0.6902 - val_accuracy: 0.7730\n","Epoch 26/30\n","352/352 [==============================] - 4s 13ms/step - loss: 0.4421 - accuracy: 0.8420 - val_loss: 0.7350 - val_accuracy: 0.7666\n","Epoch 27/30\n","352/352 [==============================] - 4s 12ms/step - loss: 0.4371 - accuracy: 0.8424 - val_loss: 0.7111 - val_accuracy: 0.7754\n","Epoch 28/30\n","352/352 [==============================] - 5s 13ms/step - loss: 0.4288 - accuracy: 0.8467 - val_loss: 0.7116 - val_accuracy: 0.7814\n","Epoch 29/30\n","352/352 [==============================] - 5s 14ms/step - loss: 0.4142 - accuracy: 0.8515 - val_loss: 0.7177 - val_accuracy: 0.7732\n","Epoch 30/30\n","352/352 [==============================] - 5s 13ms/step - loss: 0.4090 - accuracy: 0.8528 - val_loss: 0.7398 - val_accuracy: 0.7700\n"]}],"source":["# Si notiche l'addestramento con droupout riduce di molto l'overfitting: l'accuratezza\n","# sull'insieme di validazione è molto più simile a quella sull'insieme di training\n","# rispetto a quello che accadeva con network_cifar2.\n","\n","network_cifar3.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])\n","history_cifar3 = network_cifar3.fit(cifar_train_images_ok, cifar_train_labels_ok, epochs=30, batch_size=128, validation_split=0.1)"]},{"cell_type":"code","source":["# Riaddestro usando tutti i dati di addestramento per 28 epoche, il numero di epoche\n","# che ha prodotto il valore maggiore di accuratezza sull'insieme di validazione. Si\n","# noti che questo valore cambia di solito ad ogni esecuzione dela procedura di \n","# addestramento.\n","\n","network_cifar3_final = tf.keras.models.Sequential([\n"," tf.keras.layers.Conv2D(32, (3, 3), activation='relu', input_shape=(32, 32, 3)),\n"," tf.keras.layers.MaxPooling2D((2, 2)),\n"," tf.keras.layers.Dropout(0.2),\n"," tf.keras.layers.Conv2D(64, (3, 3), activation='relu'),\n"," tf.keras.layers.MaxPooling2D((2, 2)),\n"," tf.keras.layers.Dropout(0.2),\n"," tf.keras.layers.Conv2D(128, (3, 3), activation='relu'),\n"," tf.keras.layers.Dropout(0.2),\n"," tf.keras.layers.Flatten(),\n"," tf.keras.layers.Dense(128, activation='relu'),\n"," tf.keras.layers.Dense(10, activation='softmax')\n","])\n","network_cifar3_final.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])\n","network_cifar3_final.fit(cifar_train_images_ok, cifar_train_labels_ok, epochs=28, batch_size=128)"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"85Rtx62rCPEM","executionInfo":{"status":"ok","timestamp":1648546813924,"user_tz":-120,"elapsed":134699,"user":{"displayName":"Gianluca Amato","userId":"18269286707108730791"}},"outputId":"a5b3410b-933a-4371-9f23-597a0bfd744a"},"execution_count":18,"outputs":[{"output_type":"stream","name":"stdout","text":["Epoch 1/28\n","391/391 [==============================] - 6s 14ms/step - loss: 1.6816 - accuracy: 0.3842\n","Epoch 2/28\n","391/391 [==============================] - 5s 14ms/step - loss: 1.2973 - accuracy: 0.5345\n","Epoch 3/28\n","391/391 [==============================] - 5s 12ms/step - loss: 1.1446 - accuracy: 0.5978\n","Epoch 4/28\n","391/391 [==============================] - 5s 12ms/step - loss: 1.0336 - accuracy: 0.6341\n","Epoch 5/28\n","391/391 [==============================] - 5s 12ms/step - loss: 0.9607 - accuracy: 0.6650\n","Epoch 6/28\n","391/391 [==============================] - 5s 14ms/step - loss: 0.9020 - accuracy: 0.6826\n","Epoch 7/28\n","391/391 [==============================] - 5s 13ms/step - loss: 0.8591 - accuracy: 0.6995\n","Epoch 8/28\n","391/391 [==============================] - 5s 12ms/step - loss: 0.8123 - accuracy: 0.7141\n","Epoch 9/28\n","391/391 [==============================] - 5s 12ms/step - loss: 0.7763 - accuracy: 0.7272\n","Epoch 10/28\n","391/391 [==============================] - 5s 12ms/step - loss: 0.7412 - accuracy: 0.7397\n","Epoch 11/28\n","391/391 [==============================] - 5s 12ms/step - loss: 0.7183 - accuracy: 0.7457\n","Epoch 12/28\n","391/391 [==============================] - 5s 12ms/step - loss: 0.6888 - accuracy: 0.7569\n","Epoch 13/28\n","391/391 [==============================] - 5s 12ms/step - loss: 0.6634 - accuracy: 0.7674\n","Epoch 14/28\n","391/391 [==============================] - 5s 12ms/step - loss: 0.6455 - accuracy: 0.7719\n","Epoch 15/28\n","391/391 [==============================] - 5s 12ms/step - loss: 0.6182 - accuracy: 0.7809\n","Epoch 16/28\n","391/391 [==============================] - 5s 12ms/step - loss: 0.6005 - accuracy: 0.7871\n","Epoch 17/28\n","391/391 [==============================] - 5s 12ms/step - loss: 0.5835 - accuracy: 0.7915\n","Epoch 18/28\n","391/391 [==============================] - 5s 12ms/step - loss: 0.5659 - accuracy: 0.8012\n","Epoch 19/28\n","391/391 [==============================] - 5s 12ms/step - loss: 0.5470 - accuracy: 0.8062\n","Epoch 20/28\n","391/391 [==============================] - 5s 12ms/step - loss: 0.5349 - accuracy: 0.8109\n","Epoch 21/28\n","391/391 [==============================] - 5s 13ms/step - loss: 0.5200 - accuracy: 0.8155\n","Epoch 22/28\n","391/391 [==============================] - 5s 12ms/step - loss: 0.5082 - accuracy: 0.8204\n","Epoch 23/28\n","391/391 [==============================] - 5s 12ms/step - loss: 0.4911 - accuracy: 0.8247\n","Epoch 24/28\n","391/391 [==============================] - 5s 12ms/step - loss: 0.4793 - accuracy: 0.8299\n","Epoch 25/28\n","391/391 [==============================] - 5s 12ms/step - loss: 0.4704 - accuracy: 0.8333\n","Epoch 26/28\n","391/391 [==============================] - 5s 12ms/step - loss: 0.4554 - accuracy: 0.8377\n","Epoch 27/28\n","391/391 [==============================] - 5s 12ms/step - loss: 0.4470 - accuracy: 0.8396\n","Epoch 28/28\n","391/391 [==============================] - 5s 12ms/step - loss: 0.4370 - accuracy: 0.8429\n"]},{"output_type":"execute_result","data":{"text/plain":[""]},"metadata":{},"execution_count":18}]},{"cell_type":"code","execution_count":19,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":3149,"status":"ok","timestamp":1648546840594,"user":{"displayName":"Gianluca Amato","userId":"18269286707108730791"},"user_tz":-120},"id":"Vq6f_2bwHoXV","outputId":"6a631681-909e-427f-b539-f60dd041db3d"},"outputs":[{"output_type":"stream","name":"stdout","text":["313/313 [==============================] - 2s 4ms/step - loss: 0.7431 - accuracy: 0.7610\n"]},{"output_type":"execute_result","data":{"text/plain":["[0.7431220412254333, 0.7609999775886536]"]},"metadata":{},"execution_count":19}],"source":["# Valuto sull'insieme di test.\n","\n","network_cifar3_final.evaluate(cifar_test_images_ok, cifar_test_labels_ok)"]}],"metadata":{"accelerator":"GPU","colab":{"collapsed_sections":[],"name":"Deep Learning con Keras - Esercizio 2.ipynb","provenance":[],"authorship_tag":"ABX9TyMqiI9wYkkDYF4MFLbLMJBk"},"kernelspec":{"display_name":"Python 3","name":"python3"},"language_info":{"name":"python"}},"nbformat":4,"nbformat_minor":0}