{"nbformat":4,"nbformat_minor":0,"metadata":{"colab":{"name":"Deep Learning con Keras - Lezione 3 - parte 2.ipynb","provenance":[],"collapsed_sections":[],"authorship_tag":"ABX9TyMe6Lu5EY9rJIqr5n/SMLlb"},"kernelspec":{"name":"python3","display_name":"Python 3"},"language_info":{"name":"python"},"accelerator":"GPU"},"cells":[{"cell_type":"code","execution_count":1,"metadata":{"id":"i52hvbIsnkTO","executionInfo":{"status":"ok","timestamp":1648547026081,"user_tz":-120,"elapsed":4514,"user":{"displayName":"Gianluca Amato","userId":"18269286707108730791"}}},"outputs":[],"source":["import numpy as np\n","import tensorflow as tf\n","import matplotlib.pyplot as plt"]},{"cell_type":"markdown","source":["# MNIST con rete multistrato\n","\n","Iniziamo presentando di nuovo la rete multistrato per il riconoscimento delle immagini di MNIST presentata nella Lezione 2 - parte 1."],"metadata":{"id":"E_2VY5lQRBfK"}},{"cell_type":"code","metadata":{"id":"bAEKZDQtvUWm","executionInfo":{"status":"ok","timestamp":1648547032799,"user_tz":-120,"elapsed":2385,"user":{"displayName":"Gianluca Amato","userId":"18269286707108730791"}},"colab":{"base_uri":"https://localhost:8080/"},"outputId":"470e7a49-2138-431f-b462-a1eec7822633"},"source":["(train_images, train_labels), (test_images, test_labels) = tf.keras.datasets.mnist.load_data()\n","\n","x_train = train_images / 255.0\n","x_test = test_images / 255.0\n","\n","y_train = tf.keras.utils.to_categorical(train_labels)\n","y_test = tf.keras.utils.to_categorical(test_labels)"],"execution_count":2,"outputs":[{"output_type":"stream","name":"stdout","text":["Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/mnist.npz\n","11493376/11490434 [==============================] - 0s 0us/step\n","11501568/11490434 [==============================] - 0s 0us/step\n"]}]},{"cell_type":"code","source":["network = tf.keras.models.Sequential([\n"," tf.keras.layers.Flatten(input_shape=(28, 28)),\n"," tf.keras.layers.Dense(512, activation='relu'),\n"," tf.keras.layers.Dense(10, activation='softmax')\n","])\n","network.compile(optimizer='rmsprop', loss='categorical_crossentropy', metrics=['accuracy'])\n","network.summary()"],"metadata":{"id":"PCzhpvmERGdp","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1648547038444,"user_tz":-120,"elapsed":3667,"user":{"displayName":"Gianluca Amato","userId":"18269286707108730791"}},"outputId":"739fcb75-a918-4c9f-e09f-f25a37bded4b"},"execution_count":3,"outputs":[{"output_type":"stream","name":"stdout","text":["Model: \"sequential\"\n","_________________________________________________________________\n"," Layer (type) Output Shape Param # \n","=================================================================\n"," flatten (Flatten) (None, 784) 0 \n"," \n"," dense (Dense) (None, 512) 401920 \n"," \n"," dense_1 (Dense) (None, 10) 5130 \n"," \n","=================================================================\n","Total params: 407,050\n","Trainable params: 407,050\n","Non-trainable params: 0\n","_________________________________________________________________\n"]}]},{"cell_type":"code","source":["history = network.fit(x_train, y_train, epochs=20, batch_size=128)"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"5C4INSCrSZUM","executionInfo":{"status":"ok","timestamp":1648547083083,"user_tz":-120,"elapsed":42345,"user":{"displayName":"Gianluca Amato","userId":"18269286707108730791"}},"outputId":"ae60eb10-e070-4454-dcd2-f5161bb56c5f"},"execution_count":4,"outputs":[{"output_type":"stream","name":"stdout","text":["Epoch 1/20\n","469/469 [==============================] - 5s 4ms/step - loss: 0.2577 - accuracy: 0.9246\n","Epoch 2/20\n","469/469 [==============================] - 2s 4ms/step - loss: 0.1045 - accuracy: 0.9689\n","Epoch 3/20\n","469/469 [==============================] - 2s 4ms/step - loss: 0.0685 - accuracy: 0.9796\n","Epoch 4/20\n","469/469 [==============================] - 2s 4ms/step - loss: 0.0505 - accuracy: 0.9850\n","Epoch 5/20\n","469/469 [==============================] - 2s 4ms/step - loss: 0.0379 - accuracy: 0.9883\n","Epoch 6/20\n","469/469 [==============================] - 2s 4ms/step - loss: 0.0287 - accuracy: 0.9913\n","Epoch 7/20\n","469/469 [==============================] - 2s 4ms/step - loss: 0.0223 - accuracy: 0.9937\n","Epoch 8/20\n","469/469 [==============================] - 2s 4ms/step - loss: 0.0174 - accuracy: 0.9949\n","Epoch 9/20\n","469/469 [==============================] - 2s 4ms/step - loss: 0.0134 - accuracy: 0.9961\n","Epoch 10/20\n","469/469 [==============================] - 2s 4ms/step - loss: 0.0106 - accuracy: 0.9966\n","Epoch 11/20\n","469/469 [==============================] - 2s 4ms/step - loss: 0.0083 - accuracy: 0.9977\n","Epoch 12/20\n","469/469 [==============================] - 2s 4ms/step - loss: 0.0067 - accuracy: 0.9982\n","Epoch 13/20\n","469/469 [==============================] - 2s 4ms/step - loss: 0.0050 - accuracy: 0.9985\n","Epoch 14/20\n","469/469 [==============================] - 2s 4ms/step - loss: 0.0042 - accuracy: 0.9988\n","Epoch 15/20\n","469/469 [==============================] - 2s 4ms/step - loss: 0.0033 - accuracy: 0.9992\n","Epoch 16/20\n","469/469 [==============================] - 2s 4ms/step - loss: 0.0026 - accuracy: 0.9994\n","Epoch 17/20\n","469/469 [==============================] - 2s 4ms/step - loss: 0.0021 - accuracy: 0.9995\n","Epoch 18/20\n","469/469 [==============================] - 2s 4ms/step - loss: 0.0015 - accuracy: 0.9997\n","Epoch 19/20\n","469/469 [==============================] - 2s 4ms/step - loss: 0.0013 - accuracy: 0.9997\n","Epoch 20/20\n","469/469 [==============================] - 2s 4ms/step - loss: 0.0010 - accuracy: 0.9997\n"]}]},{"cell_type":"code","source":["network.evaluate(x_test, y_test)"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"uo87hLKiTM7Q","executionInfo":{"status":"ok","timestamp":1648547089979,"user_tz":-120,"elapsed":1598,"user":{"displayName":"Gianluca Amato","userId":"18269286707108730791"}},"outputId":"1f88265c-ae5a-42f2-8c78-f9fd47be9292"},"execution_count":5,"outputs":[{"output_type":"stream","name":"stdout","text":["313/313 [==============================] - 1s 3ms/step - loss: 0.0869 - accuracy: 0.9832\n"]},{"output_type":"execute_result","data":{"text/plain":["[0.08686134964227676, 0.9832000136375427]"]},"metadata":{},"execution_count":5}]},{"cell_type":"code","source":["# Determiniamo quali sono le immagini dove la nostra rete sbaglia (per l'insieme di test).\n","\n","predictions_test = network.predict(x_test)\n","np.where([ np.argmax(x) for x in predictions_test] != test_labels)"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"3HbNBL7ZTals","executionInfo":{"status":"ok","timestamp":1648547180575,"user_tz":-120,"elapsed":1328,"user":{"displayName":"Gianluca Amato","userId":"18269286707108730791"}},"outputId":"8e261b52-a2c0-4207-a8ce-b61e1cc6b01c"},"execution_count":6,"outputs":[{"output_type":"execute_result","data":{"text/plain":["(array([ 18, 115, 149, 247, 321, 340, 445, 449, 495, 582, 659,\n"," 684, 691, 720, 726, 846, 900, 947, 951, 1014, 1039, 1112,\n"," 1156, 1226, 1232, 1242, 1247, 1319, 1328, 1393, 1395, 1494, 1496,\n"," 1500, 1522, 1530, 1549, 1553, 1609, 1621, 1681, 1717, 1790, 1800,\n"," 1850, 1901, 1941, 1984, 2004, 2043, 2053, 2070, 2098, 2109, 2118,\n"," 2130, 2135, 2224, 2293, 2369, 2387, 2406, 2414, 2462, 2488, 2597,\n"," 2607, 2654, 2877, 2915, 2921, 2939, 2953, 3060, 3073, 3117, 3172,\n"," 3225, 3289, 3422, 3441, 3503, 3520, 3558, 3559, 3567, 3751, 3780,\n"," 3796, 3808, 3818, 3838, 3853, 3893, 3906, 3926, 3941, 3943, 4027,\n"," 4065, 4078, 4176, 4199, 4248, 4289, 4294, 4360, 4443, 4497, 4536,\n"," 4639, 4740, 4807, 4814, 4823, 4860, 4880, 4956, 5331, 5457, 5642,\n"," 5676, 5734, 5887, 5936, 5937, 5955, 5972, 5973, 5982, 6011, 6023,\n"," 6046, 6059, 6555, 6571, 6574, 6576, 6597, 6651, 6755, 6783, 6847,\n"," 7216, 7545, 7800, 8094, 8246, 8277, 8325, 8408, 8527, 9009, 9015,\n"," 9019, 9024, 9280, 9587, 9634, 9664, 9679, 9692, 9729, 9745, 9768,\n"," 9770, 9792, 9839]),)"]},"metadata":{},"execution_count":6}]},{"cell_type":"code","source":["# Controlliamo ad esempio l'immagine 149\n","\n","print(\"Predizione: \", np.argmax(predictions_test[149]))\n","print(\"Valore effettivo: \", test_labels[149])\n","\n","plt.imshow(x_test[149], cmap= plt.cm.binary)"],"metadata":{"id":"t9MnUYDAeWoQ","colab":{"base_uri":"https://localhost:8080/","height":317},"executionInfo":{"status":"ok","timestamp":1648547197940,"user_tz":-120,"elapsed":1300,"user":{"displayName":"Gianluca Amato","userId":"18269286707108730791"}},"outputId":"f0239d84-e8b6-46cc-dc5e-7088b693d5d9"},"execution_count":8,"outputs":[{"output_type":"stream","name":"stdout","text":["Predizione: 9\n","Valore effettivo: 2\n"]},{"output_type":"execute_result","data":{"text/plain":[""]},"metadata":{},"execution_count":8},{"output_type":"display_data","data":{"text/plain":["
"],"image/png":"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\n"},"metadata":{"needs_background":"light"}}]},{"cell_type":"markdown","metadata":{"id":"fv6rLJS4e71p"},"source":["# MNIST con rete convoluzionale"]},{"cell_type":"code","source":["# Shape attuale di x_train\n","\n","x_train.shape"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"ZxQbYBuuV0qj","executionInfo":{"status":"ok","timestamp":1648547202959,"user_tz":-120,"elapsed":380,"user":{"displayName":"Gianluca Amato","userId":"18269286707108730791"}},"outputId":"971164d0-8df3-4fc7-cbda-6e863ea9e41f"},"execution_count":9,"outputs":[{"output_type":"execute_result","data":{"text/plain":["(60000, 28, 28)"]},"metadata":{},"execution_count":9}]},{"cell_type":"code","metadata":{"id":"rUU5OHvdRawV","executionInfo":{"status":"ok","timestamp":1648547205143,"user_tz":-120,"elapsed":4,"user":{"displayName":"Gianluca Amato","userId":"18269286707108730791"}}},"source":["# Cambiamo lo shape delle immagini aggiungendo una dimensione in più. I dati\n","# sono sempre gli stessi, solo che adesso li vediamo com un array a 4 dimensioni\n","# dove l'ultima dimensione (il numero di filtri) è lunga 1.\n","\n","x_train = x_train.reshape((60000, 28, 28, 1))\n","x_test = x_test.reshape((10000, 28, 28, 1))"],"execution_count":10,"outputs":[]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"q8hftLyzv_xj","executionInfo":{"status":"ok","timestamp":1648547365455,"user_tz":-120,"elapsed":831,"user":{"displayName":"Gianluca Amato","userId":"18269286707108730791"}},"outputId":"2887b3a7-6c7c-40cc-82c2-4d6b2c75706e"},"source":["# Costruiamo na rete convoluzionale.\n","\n","network2 = tf.keras.models.Sequential([\n"," tf.keras.layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)),\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(64, (3, 3), activation='relu'),\n"," tf.keras.layers.Flatten(),\n"," tf.keras.layers.Dense(64, activation='relu'),\n"," tf.keras.layers.Dense(10, activation='softmax')\n","])\n","network2.summary()"],"execution_count":13,"outputs":[{"output_type":"stream","name":"stdout","text":["Model: \"sequential_2\"\n","_________________________________________________________________\n"," Layer (type) Output Shape Param # \n","=================================================================\n"," conv2d_3 (Conv2D) (None, 26, 26, 32) 320 \n"," \n"," max_pooling2d_2 (MaxPooling (None, 13, 13, 32) 0 \n"," 2D) \n"," \n"," conv2d_4 (Conv2D) (None, 11, 11, 64) 18496 \n"," \n"," max_pooling2d_3 (MaxPooling (None, 5, 5, 64) 0 \n"," 2D) \n"," \n"," conv2d_5 (Conv2D) (None, 3, 3, 64) 36928 \n"," \n"," flatten_2 (Flatten) (None, 576) 0 \n"," \n"," dense_4 (Dense) (None, 64) 36928 \n"," \n"," dense_5 (Dense) (None, 10) 650 \n"," \n","=================================================================\n","Total params: 93,322\n","Trainable params: 93,322\n","Non-trainable params: 0\n","_________________________________________________________________\n"]}]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"VwogAgUAwd86","executionInfo":{"status":"ok","timestamp":1648547433104,"user_tz":-120,"elapsed":65191,"user":{"displayName":"Gianluca Amato","userId":"18269286707108730791"}},"outputId":"79fcd22b-b684-431e-d7d5-6a73c563914f"},"source":["# Addestriamola.\n","\n","network2.compile(optimizer='rmsprop', loss='categorical_crossentropy', metrics=['accuracy'])\n","network2.fit(x_train, y_train, epochs=10, batch_size=128)"],"execution_count":14,"outputs":[{"output_type":"stream","name":"stdout","text":["Epoch 1/10\n","469/469 [==============================] - 14s 13ms/step - loss: 0.2190 - accuracy: 0.9315\n","Epoch 2/10\n","469/469 [==============================] - 6s 12ms/step - loss: 0.0515 - accuracy: 0.9841\n","Epoch 3/10\n","469/469 [==============================] - 6s 12ms/step - loss: 0.0345 - accuracy: 0.9896\n","Epoch 4/10\n","469/469 [==============================] - 6s 12ms/step - loss: 0.0252 - accuracy: 0.9923\n","Epoch 5/10\n","469/469 [==============================] - 6s 12ms/step - loss: 0.0210 - accuracy: 0.9936\n","Epoch 6/10\n","469/469 [==============================] - 6s 12ms/step - loss: 0.0164 - accuracy: 0.9950\n","Epoch 7/10\n","469/469 [==============================] - 6s 12ms/step - loss: 0.0135 - accuracy: 0.9958\n","Epoch 8/10\n","469/469 [==============================] - 6s 12ms/step - loss: 0.0104 - accuracy: 0.9968\n","Epoch 9/10\n","469/469 [==============================] - 6s 12ms/step - loss: 0.0096 - accuracy: 0.9970\n","Epoch 10/10\n","469/469 [==============================] - 6s 12ms/step - loss: 0.0073 - accuracy: 0.9976\n"]},{"output_type":"execute_result","data":{"text/plain":[""]},"metadata":{},"execution_count":14}]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"jeWVxBLNzKps","executionInfo":{"status":"ok","timestamp":1648547600387,"user_tz":-120,"elapsed":1808,"user":{"displayName":"Gianluca Amato","userId":"18269286707108730791"}},"outputId":"1ef97972-1c32-472e-c78f-2a601b2f5255"},"source":["# Valutiamo sull'insieme di test. Vediamo che, nonostante sull'insieme di addestramento\n","# la nostra rete convoluzionale ha una accuratezza leggermente inferiore rispetto a\n","# quella fully-connected, sull'insieme di test la situazione si ribalta, perché la nuova\n","# rete ha meno overfitting.\n","\n","network2.evaluate(x_test, y_test)"],"execution_count":15,"outputs":[{"output_type":"stream","name":"stdout","text":["313/313 [==============================] - 1s 4ms/step - loss: 0.0284 - accuracy: 0.9929\n"]},{"output_type":"execute_result","data":{"text/plain":["[0.028406240046024323, 0.992900013923645]"]},"metadata":{},"execution_count":15}]},{"cell_type":"code","source":["# Determiniamo quali sono le immagini dove la nostra rete sbaglia (nell'insieme di test).\n","\n","prediction_test = network2.predict(x_test)\n","np.where([ np.argmax(x) for x in prediction_test] != test_labels)"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"czKlCr2FXSQ2","executionInfo":{"status":"ok","timestamp":1648547604696,"user_tz":-120,"elapsed":537,"user":{"displayName":"Gianluca Amato","userId":"18269286707108730791"}},"outputId":"7be3ccae-4b6e-441f-d8a5-3f05062e1dfc"},"execution_count":16,"outputs":[{"output_type":"execute_result","data":{"text/plain":["(array([ 340, 445, 449, 460, 582, 646, 659, 674, 846, 947, 1014,\n"," 1039, 1226, 1242, 1247, 1260, 1319, 1328, 1522, 1709, 1737, 1828,\n"," 1878, 1901, 2035, 2043, 2070, 2130, 2135, 2447, 2597, 2654, 2771,\n"," 2896, 2921, 2939, 2953, 2995, 3225, 3422, 3520, 3762, 3806, 3808,\n"," 3853, 3859, 3941, 4078, 4163, 4176, 4571, 4723, 4740, 4838, 5140,\n"," 5634, 5654, 5752, 5937, 5982, 5997, 6571, 6576, 6597, 6625, 6651,\n"," 8316, 9009, 9634, 9642, 9729]),)"]},"metadata":{},"execution_count":16}]},{"cell_type":"code","source":["# Controlliamo ad esempio l'immagine 340.\n","\n","print(\"Predizione: \", np.argmax(prediction_test[340]))\n","print(\"Valore effettivo: \", test_labels[340])\n","\n","plt.imshow(test_images[340], cmap= plt.cm.binary)"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":317},"id":"c4QzUQ5uXX8C","executionInfo":{"status":"ok","timestamp":1648547609370,"user_tz":-120,"elapsed":521,"user":{"displayName":"Gianluca Amato","userId":"18269286707108730791"}},"outputId":"5c175597-1e8e-4b42-833d-bc5ba6613cc9"},"execution_count":17,"outputs":[{"output_type":"stream","name":"stdout","text":["Predizione: 3\n","Valore effettivo: 5\n"]},{"output_type":"execute_result","data":{"text/plain":[""]},"metadata":{},"execution_count":17},{"output_type":"display_data","data":{"text/plain":["
"],"image/png":"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\n"},"metadata":{"needs_background":"light"}}]},{"cell_type":"markdown","source":["# Esercizio per casa\n","\n","Utilizzare reti ricorrenti per il riconoscimento delle immagini di CIFAR-10. Dovreste riuscire senza troppa difficoltà ad ottenere una accuratezza del 70% sull'insieme di test."],"metadata":{"id":"QEYwQyMsWuYn"}}]}