{"nbformat":4,"nbformat_minor":0,"metadata":{"colab":{"name":"Deep Learning con Keras - Lezione 2 - parte 2","provenance":[],"collapsed_sections":[],"authorship_tag":"ABX9TyOBei5wym0NwHCjdf1oToXt"},"kernelspec":{"name":"python3","display_name":"Python 3"},"language_info":{"name":"python"}},"cells":[{"cell_type":"code","execution_count":null,"metadata":{"id":"i52hvbIsnkTO"},"outputs":[],"source":["import numpy as np\n","import tensorflow as tf\n","import matplotlib.pyplot as plt"]},{"cell_type":"markdown","source":["# Classificazione delle recensioni di film su IMDB\n","\n","Lavoreremo col dataset IMDB. Si tratta di 50.000 recensioni di film molto polarizzate, tratte dall'Internet Movie Database. Sono divise in 25.000 recensioni per l'addestramento e altre 25.000 per il test."],"metadata":{"id":"XuyEmJWk5hfw"}},{"cell_type":"code","source":["# Caricamento dati.\n","# Il parametro num_words=10000 vuol dire che teniamo traccia solo delle 10.000\n","# parole più comuni nelle recensioni. Tutte le altre parole vengono ignorate.\n","\n","imdb = tf.keras.datasets.imdb\n","(imdb_train_data, imdb_train_labels), (imdb_test_data, imdb_test_labels) = imdb.load_data(num_words=10000)"],"metadata":{"id":"QL-JsLLe5uN4","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1647949482199,"user_tz":-60,"elapsed":6455,"user":{"displayName":"Gianluca Amato","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GhEmlMukD8qDnxG1PlDxK7Dzm1rjUKZSz0BhiJc9w=s64","userId":"18269286707108730791"}},"outputId":"0e3e99f4-91ed-4df9-a264-cea6ff90e80e"},"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/imdb.npz\n","17465344/17464789 [==============================] - 0s 0us/step\n","17473536/17464789 [==============================] - 0s 0us/step\n"]}]},{"cell_type":"markdown","source":["## Preparazione dei dati"],"metadata":{"id":"5U4UVU8n_zSa"}},{"cell_type":"code","source":["# imdb_train_labels è un elenco di 0 ed 1, dove 0 sta per recensione positiva, 1 per negativa\n","\n","imdb_train_labels"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"KSdc4CdT7VSP","executionInfo":{"status":"ok","timestamp":1647949488192,"user_tz":-60,"elapsed":375,"user":{"displayName":"Gianluca Amato","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GhEmlMukD8qDnxG1PlDxK7Dzm1rjUKZSz0BhiJc9w=s64","userId":"18269286707108730791"}},"outputId":"31ab9343-e713-42d7-e2bd-d6b0c13a85bb"},"execution_count":null,"outputs":[{"output_type":"execute_result","data":{"text/plain":["array([1, 0, 0, ..., 0, 1, 0])"]},"metadata":{},"execution_count":3}]},{"cell_type":"code","source":["# imdb_train_data è un elenco di recensioni. Ogni recensione è codifica come un elenco di numeri. I numeri\n","# da 0 a 2 hanno un significato speciale, quelli da 3 in poi corrispondono ognuno ad una parola diversa.\n","\n","imdb_train_data"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"Om7NB0CR6uE6","executionInfo":{"status":"ok","timestamp":1647949497859,"user_tz":-60,"elapsed":467,"user":{"displayName":"Gianluca Amato","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GhEmlMukD8qDnxG1PlDxK7Dzm1rjUKZSz0BhiJc9w=s64","userId":"18269286707108730791"}},"outputId":"1c84e758-edc4-4a05-922f-2e0ba8138647"},"execution_count":null,"outputs":[{"output_type":"execute_result","data":{"text/plain":["array([list([1, 14, 22, 16, 43, 530, 973, 1622, 1385, 65, 458, 4468, 66, 3941, 4, 173, 36, 256, 5, 25, 100, 43, 838, 112, 50, 670, 2, 9, 35, 480, 284, 5, 150, 4, 172, 112, 167, 2, 336, 385, 39, 4, 172, 4536, 1111, 17, 546, 38, 13, 447, 4, 192, 50, 16, 6, 147, 2025, 19, 14, 22, 4, 1920, 4613, 469, 4, 22, 71, 87, 12, 16, 43, 530, 38, 76, 15, 13, 1247, 4, 22, 17, 515, 17, 12, 16, 626, 18, 2, 5, 62, 386, 12, 8, 316, 8, 106, 5, 4, 2223, 5244, 16, 480, 66, 3785, 33, 4, 130, 12, 16, 38, 619, 5, 25, 124, 51, 36, 135, 48, 25, 1415, 33, 6, 22, 12, 215, 28, 77, 52, 5, 14, 407, 16, 82, 2, 8, 4, 107, 117, 5952, 15, 256, 4, 2, 7, 3766, 5, 723, 36, 71, 43, 530, 476, 26, 400, 317, 46, 7, 4, 2, 1029, 13, 104, 88, 4, 381, 15, 297, 98, 32, 2071, 56, 26, 141, 6, 194, 7486, 18, 4, 226, 22, 21, 134, 476, 26, 480, 5, 144, 30, 5535, 18, 51, 36, 28, 224, 92, 25, 104, 4, 226, 65, 16, 38, 1334, 88, 12, 16, 283, 5, 16, 4472, 113, 103, 32, 15, 16, 5345, 19, 178, 32]),\n"," list([1, 194, 1153, 194, 8255, 78, 228, 5, 6, 1463, 4369, 5012, 134, 26, 4, 715, 8, 118, 1634, 14, 394, 20, 13, 119, 954, 189, 102, 5, 207, 110, 3103, 21, 14, 69, 188, 8, 30, 23, 7, 4, 249, 126, 93, 4, 114, 9, 2300, 1523, 5, 647, 4, 116, 9, 35, 8163, 4, 229, 9, 340, 1322, 4, 118, 9, 4, 130, 4901, 19, 4, 1002, 5, 89, 29, 952, 46, 37, 4, 455, 9, 45, 43, 38, 1543, 1905, 398, 4, 1649, 26, 6853, 5, 163, 11, 3215, 2, 4, 1153, 9, 194, 775, 7, 8255, 2, 349, 2637, 148, 605, 2, 8003, 15, 123, 125, 68, 2, 6853, 15, 349, 165, 4362, 98, 5, 4, 228, 9, 43, 2, 1157, 15, 299, 120, 5, 120, 174, 11, 220, 175, 136, 50, 9, 4373, 228, 8255, 5, 2, 656, 245, 2350, 5, 4, 9837, 131, 152, 491, 18, 2, 32, 7464, 1212, 14, 9, 6, 371, 78, 22, 625, 64, 1382, 9, 8, 168, 145, 23, 4, 1690, 15, 16, 4, 1355, 5, 28, 6, 52, 154, 462, 33, 89, 78, 285, 16, 145, 95]),\n"," list([1, 14, 47, 8, 30, 31, 7, 4, 249, 108, 7, 4, 5974, 54, 61, 369, 13, 71, 149, 14, 22, 112, 4, 2401, 311, 12, 16, 3711, 33, 75, 43, 1829, 296, 4, 86, 320, 35, 534, 19, 263, 4821, 1301, 4, 1873, 33, 89, 78, 12, 66, 16, 4, 360, 7, 4, 58, 316, 334, 11, 4, 1716, 43, 645, 662, 8, 257, 85, 1200, 42, 1228, 2578, 83, 68, 3912, 15, 36, 165, 1539, 278, 36, 69, 2, 780, 8, 106, 14, 6905, 1338, 18, 6, 22, 12, 215, 28, 610, 40, 6, 87, 326, 23, 2300, 21, 23, 22, 12, 272, 40, 57, 31, 11, 4, 22, 47, 6, 2307, 51, 9, 170, 23, 595, 116, 595, 1352, 13, 191, 79, 638, 89, 2, 14, 9, 8, 106, 607, 624, 35, 534, 6, 227, 7, 129, 113]),\n"," ...,\n"," list([1, 11, 6, 230, 245, 6401, 9, 6, 1225, 446, 2, 45, 2174, 84, 8322, 4007, 21, 4, 912, 84, 2, 325, 725, 134, 2, 1715, 84, 5, 36, 28, 57, 1099, 21, 8, 140, 8, 703, 5, 2, 84, 56, 18, 1644, 14, 9, 31, 7, 4, 9406, 1209, 2295, 2, 1008, 18, 6, 20, 207, 110, 563, 12, 8, 2901, 2, 8, 97, 6, 20, 53, 4767, 74, 4, 460, 364, 1273, 29, 270, 11, 960, 108, 45, 40, 29, 2961, 395, 11, 6, 4065, 500, 7, 2, 89, 364, 70, 29, 140, 4, 64, 4780, 11, 4, 2678, 26, 178, 4, 529, 443, 2, 5, 27, 710, 117, 2, 8123, 165, 47, 84, 37, 131, 818, 14, 595, 10, 10, 61, 1242, 1209, 10, 10, 288, 2260, 1702, 34, 2901, 2, 4, 65, 496, 4, 231, 7, 790, 5, 6, 320, 234, 2766, 234, 1119, 1574, 7, 496, 4, 139, 929, 2901, 2, 7750, 5, 4241, 18, 4, 8497, 2, 250, 11, 1818, 7561, 4, 4217, 5408, 747, 1115, 372, 1890, 1006, 541, 9303, 7, 4, 59, 2, 4, 3586, 2]),\n"," list([1, 1446, 7079, 69, 72, 3305, 13, 610, 930, 8, 12, 582, 23, 5, 16, 484, 685, 54, 349, 11, 4120, 2959, 45, 58, 1466, 13, 197, 12, 16, 43, 23, 2, 5, 62, 30, 145, 402, 11, 4131, 51, 575, 32, 61, 369, 71, 66, 770, 12, 1054, 75, 100, 2198, 8, 4, 105, 37, 69, 147, 712, 75, 3543, 44, 257, 390, 5, 69, 263, 514, 105, 50, 286, 1814, 23, 4, 123, 13, 161, 40, 5, 421, 4, 116, 16, 897, 13, 2, 40, 319, 5872, 112, 6700, 11, 4803, 121, 25, 70, 3468, 4, 719, 3798, 13, 18, 31, 62, 40, 8, 7200, 4, 2, 7, 14, 123, 5, 942, 25, 8, 721, 12, 145, 5, 202, 12, 160, 580, 202, 12, 6, 52, 58, 2, 92, 401, 728, 12, 39, 14, 251, 8, 15, 251, 5, 2, 12, 38, 84, 80, 124, 12, 9, 23]),\n"," list([1, 17, 6, 194, 337, 7, 4, 204, 22, 45, 254, 8, 106, 14, 123, 4, 2, 270, 2, 5, 2, 2, 732, 2098, 101, 405, 39, 14, 1034, 4, 1310, 9, 115, 50, 305, 12, 47, 4, 168, 5, 235, 7, 38, 111, 699, 102, 7, 4, 4039, 9245, 9, 24, 6, 78, 1099, 17, 2345, 2, 21, 27, 9685, 6139, 5, 2, 1603, 92, 1183, 4, 1310, 7, 4, 204, 42, 97, 90, 35, 221, 109, 29, 127, 27, 118, 8, 97, 12, 157, 21, 6789, 2, 9, 6, 66, 78, 1099, 4, 631, 1191, 5, 2642, 272, 191, 1070, 6, 7585, 8, 2197, 2, 2, 544, 5, 383, 1271, 848, 1468, 2, 497, 2, 8, 1597, 8778, 2, 21, 60, 27, 239, 9, 43, 8368, 209, 405, 10, 10, 12, 764, 40, 4, 248, 20, 12, 16, 5, 174, 1791, 72, 7, 51, 6, 1739, 22, 4, 204, 131, 9])],\n"," dtype=object)"]},"metadata":{},"execution_count":4}]},{"cell_type":"code","source":["# Per sapere a che parola corrisponde un certo numero, possiamo caricare un indice di corrispondenza\n","# tra numeri e parole.\n","\n","word_index = imdb.get_word_index()"],"metadata":{"id":"TiX2OfzO67D6","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1647949501441,"user_tz":-60,"elapsed":254,"user":{"displayName":"Gianluca Amato","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GhEmlMukD8qDnxG1PlDxK7Dzm1rjUKZSz0BhiJc9w=s64","userId":"18269286707108730791"}},"outputId":"dca9fbb7-8c50-4565-f256-41cf78b700a5"},"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/imdb_word_index.json\n","1646592/1641221 [==============================] - 0s 0us/step\n","1654784/1641221 [==============================] - 0s 0us/step\n"]}]},{"cell_type":"code","source":["# word_index trasforma parole nel numero corrispondente. In realtà i numeri che\n","# compaiono nelle recensioni sono i numeri restituiti da word_index aumentati\n","# di 2 (per tenere con del fatto che i valori da 0 a 2 hanno un significato\n","# speciale)\n","\n","word_index['dog']"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"bgZcJN2P7tNT","executionInfo":{"status":"ok","timestamp":1647949566590,"user_tz":-60,"elapsed":229,"user":{"displayName":"Gianluca Amato","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GhEmlMukD8qDnxG1PlDxK7Dzm1rjUKZSz0BhiJc9w=s64","userId":"18269286707108730791"}},"outputId":"a9646b3c-ad5c-46b7-982e-669c4b8b4c1c"},"execution_count":null,"outputs":[{"output_type":"execute_result","data":{"text/plain":["909"]},"metadata":{},"execution_count":8}]},{"cell_type":"code","source":["# Possiamo calcolare la trasformazione inversa come segue\n","\n","reverse_word_index = dict([(value, key) for (key, value) in word_index.items()])\n","\n","reverse_word_index[909]"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":35},"id":"4YSkWPMn71F2","executionInfo":{"status":"ok","timestamp":1647952602788,"user_tz":-60,"elapsed":247,"user":{"displayName":"Gianluca Amato","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GhEmlMukD8qDnxG1PlDxK7Dzm1rjUKZSz0BhiJc9w=s64","userId":"18269286707108730791"}},"outputId":"6086b5e5-b265-4bf7-9ace-0bf90075b57e"},"execution_count":null,"outputs":[{"output_type":"execute_result","data":{"text/plain":["'dog'"],"application/vnd.google.colaboratory.intrinsic+json":{"type":"string"}},"metadata":{},"execution_count":22}]},{"cell_type":"code","source":["# Questo è l'elenco delle parole della prima recensione. Notare l'espressione\n","# i - 3 perché in realtà il numero 3 della recensione corresponde alla prima\n","# parola dell'indice.\n","\n","' '.join([reverse_word_index.get(i - 3, '?') for i in imdb_train_data[0]])"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":88},"id":"EQi5RwWO8M4M","executionInfo":{"status":"ok","timestamp":1647953137124,"user_tz":-60,"elapsed":795,"user":{"displayName":"Gianluca Amato","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GhEmlMukD8qDnxG1PlDxK7Dzm1rjUKZSz0BhiJc9w=s64","userId":"18269286707108730791"}},"outputId":"1511e227-18d3-4105-cfb1-0d5c3cbb5e7e"},"execution_count":null,"outputs":[{"output_type":"execute_result","data":{"text/plain":["\"? this film was just brilliant casting location scenery story direction everyone's really suited the part they played and you could just imagine being there robert ? is an amazing actor and now the same being director ? father came from the same scottish island as myself so i loved the fact there was a real connection with this film the witty remarks throughout the film were great it was just brilliant so much that i bought the film as soon as it was released for ? and would recommend it to everyone to watch and the fly fishing was amazing really cried at the end it was so sad and you know what they say if you cry at a film it must have been good and this definitely was also ? to the two little boy's that played the ? of norman and paul they were just brilliant children are often left out of the ? list i think because the stars that play them all grown up are such a big profile for the whole film but these children are amazing and should be praised for what they have done don't you think the whole story was so lovely because it was true and was someone's life after all that was shared with us all\""],"application/vnd.google.colaboratory.intrinsic+json":{"type":"string"}},"metadata":{},"execution_count":33}]},{"cell_type":"markdown","source":["Non possiamo fornire alla rete neurale come input un elenco di numeri di lunghzza variabile per ogni recensione. La dimensione dell'input dovrebbe essere sempre la stessa. Allora trasformiamo l'input da una sequenza di numeri ad un vettore di 10.000 valori binari. La posizione i-esima del vettore sarà 1 se la parola i-esima fa parte della recensione, 0 altrimenti."],"metadata":{"id":"wK8_CwED-eyn"}},{"cell_type":"code","source":["# Definiamo una funzione che esegue la trasformazione vista sopra. Chiamiamo l'insieme di\n","# dati modificato x_train (ed x_test). L'uso di questi nomi per indicare i dati di addestramento\n","# e di test è abbastanza comune.\n","\n","def vectorize_sequences(sequences, dimension=10000):\n"," results = np.zeros((len(sequences), dimension))\n"," for i, sequence in enumerate(sequences):\n"," results[i, sequence] = 1.\n"," return results\n","\n","x_train = vectorize_sequences(imdb_train_data)\n","x_test = vectorize_sequences(imdb_test_data)"],"metadata":{"id":"U2GsOxVp8axl"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["x_train[0]"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"K1DTD4t-_aNS","executionInfo":{"status":"ok","timestamp":1647953172085,"user_tz":-60,"elapsed":338,"user":{"displayName":"Gianluca Amato","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GhEmlMukD8qDnxG1PlDxK7Dzm1rjUKZSz0BhiJc9w=s64","userId":"18269286707108730791"}},"outputId":"68923369-c6af-4578-cbac-8316fc6c0174"},"execution_count":null,"outputs":[{"output_type":"execute_result","data":{"text/plain":["array([0., 1., 1., ..., 0., 0., 0.])"]},"metadata":{},"execution_count":35}]},{"cell_type":"code","source":["# Per omogenità, chiamiamo le etichette di addestramento e di test con i nomi y_train e y_test\n","\n","y_train = imdb_train_labels\n","y_test = imdb_test_labels"],"metadata":{"id":"HrMKA3z9Bi_k"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":["## Creazione e addestramento rete"],"metadata":{"id":"hCS6kOD2_1fw"}},{"cell_type":"code","source":["# Creiamo la rete. Notare che il primo strato, come nel caso di MNIST, contiene\n","# il parametro input_shape per specificare la dimensione della singola istanza\n","# di input, in questo caso un vettore di 10.000 posizioni.\n","\n","imdb_network = tf.keras.models.Sequential([\n"," tf.keras.layers.Dense(16, activation='relu', input_shape=(10000,)),\n"," tf.keras.layers.Dense(16, activation='relu'),\n"," tf.keras.layers.Dense(1, activation='sigmoid')\n","])"],"metadata":{"id":"mALcs0et_bWH"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["imdb_network.summary()"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"P10vjBuOA1sP","executionInfo":{"status":"ok","timestamp":1647953202845,"user_tz":-60,"elapsed":12,"user":{"displayName":"Gianluca Amato","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GhEmlMukD8qDnxG1PlDxK7Dzm1rjUKZSz0BhiJc9w=s64","userId":"18269286707108730791"}},"outputId":"b48c2bf8-cbb0-4f1e-bedc-93cbf38a794a"},"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["Model: \"sequential\"\n","_________________________________________________________________\n"," Layer (type) Output Shape Param # \n","=================================================================\n"," dense (Dense) (None, 16) 160016 \n"," \n"," dense_1 (Dense) (None, 16) 272 \n"," \n"," dense_2 (Dense) (None, 1) 17 \n"," \n","=================================================================\n","Total params: 160,305\n","Trainable params: 160,305\n","Non-trainable params: 0\n","_________________________________________________________________\n"]}]},{"cell_type":"code","source":["imdb_network.compile(optimizer='rmsprop', loss='binary_crossentropy', metrics=['accuracy'])"],"metadata":{"id":"ffmWUL5U_-WO"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["imdb_history = imdb_network.fit(x_train, y_train, epochs=20, batch_size=512)"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"B0OXXE91AFOU","executionInfo":{"status":"ok","timestamp":1647953239842,"user_tz":-60,"elapsed":31078,"user":{"displayName":"Gianluca Amato","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GhEmlMukD8qDnxG1PlDxK7Dzm1rjUKZSz0BhiJc9w=s64","userId":"18269286707108730791"}},"outputId":"55dd6a04-835b-4ad5-9401-27b2824fc44d"},"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["Epoch 1/20\n","49/49 [==============================] - 2s 28ms/step - loss: 0.4637 - accuracy: 0.8294\n","Epoch 2/20\n","49/49 [==============================] - 1s 27ms/step - loss: 0.2700 - accuracy: 0.9080\n","Epoch 3/20\n","49/49 [==============================] - 1s 27ms/step - loss: 0.2063 - accuracy: 0.9272\n","Epoch 4/20\n","49/49 [==============================] - 1s 27ms/step - loss: 0.1718 - accuracy: 0.9403\n","Epoch 5/20\n","49/49 [==============================] - 2s 36ms/step - loss: 0.1471 - accuracy: 0.9486\n","Epoch 6/20\n","49/49 [==============================] - 2s 38ms/step - loss: 0.1271 - accuracy: 0.9574\n","Epoch 7/20\n","49/49 [==============================] - 2s 34ms/step - loss: 0.1112 - accuracy: 0.9624\n","Epoch 8/20\n","49/49 [==============================] - 2s 33ms/step - loss: 0.0973 - accuracy: 0.9687\n","Epoch 9/20\n","49/49 [==============================] - 1s 30ms/step - loss: 0.0848 - accuracy: 0.9735\n","Epoch 10/20\n","49/49 [==============================] - 2s 35ms/step - loss: 0.0738 - accuracy: 0.9762\n","Epoch 11/20\n","49/49 [==============================] - 1s 28ms/step - loss: 0.0603 - accuracy: 0.9825\n","Epoch 12/20\n","49/49 [==============================] - 1s 28ms/step - loss: 0.0530 - accuracy: 0.9848\n","Epoch 13/20\n","49/49 [==============================] - 1s 28ms/step - loss: 0.0444 - accuracy: 0.9875\n","Epoch 14/20\n","49/49 [==============================] - 1s 28ms/step - loss: 0.0364 - accuracy: 0.9905\n","Epoch 15/20\n","49/49 [==============================] - 1s 27ms/step - loss: 0.0293 - accuracy: 0.9925\n","Epoch 16/20\n","49/49 [==============================] - 1s 28ms/step - loss: 0.0255 - accuracy: 0.9936\n","Epoch 17/20\n","49/49 [==============================] - 1s 28ms/step - loss: 0.0190 - accuracy: 0.9957\n","Epoch 18/20\n","49/49 [==============================] - 1s 28ms/step - loss: 0.0169 - accuracy: 0.9963\n","Epoch 19/20\n","49/49 [==============================] - 1s 28ms/step - loss: 0.0117 - accuracy: 0.9976\n","Epoch 20/20\n","49/49 [==============================] - 1s 28ms/step - loss: 0.0113 - accuracy: 0.9974\n"]}]},{"cell_type":"code","source":["# Valutando la rete sull'insieme di test scopriamo che l'accuratezza è molto\n","# minore di quella che si ottiene sull'insieme di addestramento.\n","\n","imdb_network.evaluate(x_test, y_test)"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"-kvlCdm3BMEh","executionInfo":{"status":"ok","timestamp":1647953245217,"user_tz":-60,"elapsed":2481,"user":{"displayName":"Gianluca Amato","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GhEmlMukD8qDnxG1PlDxK7Dzm1rjUKZSz0BhiJc9w=s64","userId":"18269286707108730791"}},"outputId":"6bc61a0a-5dd4-44ae-c0fb-093b8ed2e1c3"},"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["782/782 [==============================] - 2s 2ms/step - loss: 0.8141 - accuracy: 0.8511\n"]},{"output_type":"execute_result","data":{"text/plain":["[0.8140817880630493, 0.8510800004005432]"]},"metadata":{},"execution_count":41}]},{"cell_type":"markdown","source":["# Overfitting"],"metadata":{"id":"vapD01ibS8wA"}},{"cell_type":"markdown","source":["Vogliamo capire meglio cosa succede. Per far ciò, invece di valutare come si comporta la rete sull'insieme di test, facciamolo ad ogni epoca.\n","\n","**ATTENZIONE**: dal punto di vista metodologico non è la cosa corretta da fare."],"metadata":{"id":"3v7uMJXeDeke"}},{"cell_type":"code","source":["# Il parameto validation_data del metodo fit consente di specificare un insieme\n","# di dati sul quale la rete verrà valutata alla fine di ogni epoca.\n","\n","imdb_network2 = tf.keras.models.Sequential([\n"," tf.keras.layers.Dense(16, activation='relu', input_shape=(10000,)),\n"," tf.keras.layers.Dense(16, activation='relu'),\n"," tf.keras.layers.Dense(1, activation='sigmoid')\n","])\n","imdb_network2.compile (optimizer='rmsprop', loss='binary_crossentropy', metrics=['accuracy'])\n","imdb_history2 = imdb_network2.fit(x_train, y_train, epochs=20, batch_size=512, validation_data=(x_test, y_test))"],"metadata":{"id":"fZUj-QpdEbBM","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1647953293901,"user_tz":-60,"elapsed":43419,"user":{"displayName":"Gianluca Amato","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GhEmlMukD8qDnxG1PlDxK7Dzm1rjUKZSz0BhiJc9w=s64","userId":"18269286707108730791"}},"outputId":"af0b2473-ecbc-442c-9bf7-8d9612ad3b0d"},"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["Epoch 1/20\n","49/49 [==============================] - 3s 50ms/step - loss: 0.4481 - accuracy: 0.8201 - val_loss: 0.3275 - val_accuracy: 0.8820\n","Epoch 2/20\n","49/49 [==============================] - 2s 38ms/step - loss: 0.2564 - accuracy: 0.9084 - val_loss: 0.2889 - val_accuracy: 0.8863\n","Epoch 3/20\n","49/49 [==============================] - 2s 38ms/step - loss: 0.1996 - accuracy: 0.9285 - val_loss: 0.2829 - val_accuracy: 0.8885\n","Epoch 4/20\n","49/49 [==============================] - 2s 41ms/step - loss: 0.1662 - accuracy: 0.9412 - val_loss: 0.3014 - val_accuracy: 0.8814\n","Epoch 5/20\n","49/49 [==============================] - 2s 39ms/step - loss: 0.1438 - accuracy: 0.9498 - val_loss: 0.3133 - val_accuracy: 0.8800\n","Epoch 6/20\n","49/49 [==============================] - 2s 38ms/step - loss: 0.1269 - accuracy: 0.9556 - val_loss: 0.3894 - val_accuracy: 0.8582\n","Epoch 7/20\n","49/49 [==============================] - 2s 38ms/step - loss: 0.1126 - accuracy: 0.9612 - val_loss: 0.3708 - val_accuracy: 0.8722\n","Epoch 8/20\n","49/49 [==============================] - 2s 43ms/step - loss: 0.0995 - accuracy: 0.9664 - val_loss: 0.3923 - val_accuracy: 0.8662\n","Epoch 9/20\n","49/49 [==============================] - 2s 45ms/step - loss: 0.0874 - accuracy: 0.9706 - val_loss: 0.4203 - val_accuracy: 0.8672\n","Epoch 10/20\n","49/49 [==============================] - 2s 45ms/step - loss: 0.0777 - accuracy: 0.9735 - val_loss: 0.4528 - val_accuracy: 0.8650\n","Epoch 11/20\n","49/49 [==============================] - 2s 45ms/step - loss: 0.0722 - accuracy: 0.9760 - val_loss: 0.4946 - val_accuracy: 0.8560\n","Epoch 12/20\n","49/49 [==============================] - 2s 44ms/step - loss: 0.0596 - accuracy: 0.9821 - val_loss: 0.5103 - val_accuracy: 0.8588\n","Epoch 13/20\n","49/49 [==============================] - 2s 45ms/step - loss: 0.0556 - accuracy: 0.9827 - val_loss: 0.5432 - val_accuracy: 0.8563\n","Epoch 14/20\n","49/49 [==============================] - 2s 43ms/step - loss: 0.0498 - accuracy: 0.9856 - val_loss: 0.6043 - val_accuracy: 0.8469\n","Epoch 15/20\n","49/49 [==============================] - 2s 43ms/step - loss: 0.0406 - accuracy: 0.9886 - val_loss: 0.6358 - val_accuracy: 0.8549\n","Epoch 16/20\n","49/49 [==============================] - 2s 41ms/step - loss: 0.0387 - accuracy: 0.9883 - val_loss: 0.6532 - val_accuracy: 0.8502\n","Epoch 17/20\n","49/49 [==============================] - 3s 56ms/step - loss: 0.0326 - accuracy: 0.9908 - val_loss: 0.6956 - val_accuracy: 0.8527\n","Epoch 18/20\n","49/49 [==============================] - 2s 42ms/step - loss: 0.0265 - accuracy: 0.9928 - val_loss: 0.7463 - val_accuracy: 0.8431\n","Epoch 19/20\n","49/49 [==============================] - 2s 43ms/step - loss: 0.0236 - accuracy: 0.9936 - val_loss: 0.7795 - val_accuracy: 0.8447\n","Epoch 20/20\n","49/49 [==============================] - 2s 44ms/step - loss: 0.0236 - accuracy: 0.9936 - val_loss: 0.8010 - val_accuracy: 0.8496\n"]}]},{"cell_type":"code","source":["# Definiamo una funzione per visualizzare l'andamento dell'errore e dell'accuratezza sia\n","# per l'insieme di addestramento che per quello di validazione\n","\n","def display_loss_and_accuracy_withval(history):\n"," history_dict = history.history\n","\n"," loss_values = history_dict['loss']\n"," val_loss_values = history_dict['val_loss']\n"," acc_values = history_dict['accuracy']\n"," val_acc_values = history_dict['val_accuracy']\n"," epochs = range(1, len(loss_values) + 1)\n","\n"," plt.plot(epochs, loss_values, 'bo', label='Training loss')\n"," plt.plot(epochs, val_loss_values, 'b', label='Validation loss')\n"," plt.title('Training and validation loss')\n"," plt.xlabel('Epochs')\n"," plt.ylabel('Loss')\n"," plt.legend()\n"," plt.show()\n","\n"," plt.plot(epochs, acc_values, 'bo', label='Training accuracy')\n"," plt.plot(epochs, val_acc_values, 'b', label='Validation accuracy')\n"," plt.title('Training and validation accuracy')\n"," plt.xlabel('Epochs')\n"," plt.ylabel('Loss')\n"," plt.legend()\n"," plt.show()"],"metadata":{"id":"T8kKUff5EQnV"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["display_loss_and_accuracy_withval(imdb_history2)"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":573},"id":"cC6fGtfcF8gb","executionInfo":{"status":"ok","timestamp":1647953320342,"user_tz":-60,"elapsed":496,"user":{"displayName":"Gianluca Amato","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GhEmlMukD8qDnxG1PlDxK7Dzm1rjUKZSz0BhiJc9w=s64","userId":"18269286707108730791"}},"outputId":"008f3b58-d73b-4441-a93e-fb649f96cc7d"},"execution_count":null,"outputs":[{"output_type":"display_data","data":{"text/plain":["
"],"image/png":"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\n"},"metadata":{"needs_background":"light"}},{"output_type":"display_data","data":{"text/plain":["
"],"image/png":"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\n"},"metadata":{"needs_background":"light"}}]},{"cell_type":"markdown","source":["## Selezione del numero di epoche"],"metadata":{"id":"Z5ADqDM9S_uy"}},{"cell_type":"markdown","source":["Dall'analisi dei dati e dei grafici, sembra che convenga fermarsi dopo tre epoche. Tuttavia, se facciamo in questo modo, non possiamo più usare l'insieme di test per stimare l'accuratezza della rete neurale, perché lo abbiamo invece usato per trovare il numero di epoche migliori. Ci serve allora una procedura più complessa, con tre insiemi di dati:\n","\n","* addestramento (per addestrare la rete neurale)\n","* validazione (per scegliere il valore migliore per il numero di epoche)\n","* test (per la stima finale dell'accuratezza)\n","\n","\n","\n"],"metadata":{"id":"tvLz1PQuIJHQ"}},{"cell_type":"code","source":["# Dividiamo l'insieme di training in un insieme di training parziale (x_partial_train) formato dalle recensioni\n","# dalla 10.000 in poi, e in un insieme di validazione formato dalle prime 10.000 recensioni. Stessa cosa per le\n","# etichette.\n","\n","x_val = x_train[:10000]\n","x_partial_train = x_train[10000:]\n","y_val = y_train[:10000]\n","y_partial_train = y_train[10000:]"],"metadata":{"id":"71k8ZyDBGEzl"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["# Addestriamo sull'insieme di addestramento parziale.\n","\n","imdb_network3 = tf.keras.models.Sequential([\n"," tf.keras.layers.Dense(16, activation='relu', input_shape=(10000,)),\n"," tf.keras.layers.Dense(16, activation='relu'),\n"," tf.keras.layers.Dense(1, activation='sigmoid')\n","])\n","imdb_network3.compile(optimizer='rmsprop', loss='binary_crossentropy', metrics=['accuracy'])\n","imdb_history3 = imdb_network3.fit(x_partial_train, y_partial_train, epochs=20, batch_size=512, validation_data=(x_val, y_val))"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"kMeXruIUI9WA","executionInfo":{"status":"ok","timestamp":1647953405020,"user_tz":-60,"elapsed":22885,"user":{"displayName":"Gianluca Amato","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GhEmlMukD8qDnxG1PlDxK7Dzm1rjUKZSz0BhiJc9w=s64","userId":"18269286707108730791"}},"outputId":"6a9c7623-aeea-44ff-9437-d78f157dd0a3"},"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["Epoch 1/20\n","30/30 [==============================] - 2s 51ms/step - loss: 0.5146 - accuracy: 0.7887 - val_loss: 0.3881 - val_accuracy: 0.8732\n","Epoch 2/20\n","30/30 [==============================] - 1s 35ms/step - loss: 0.3078 - accuracy: 0.9017 - val_loss: 0.3308 - val_accuracy: 0.8702\n","Epoch 3/20\n","30/30 [==============================] - 1s 35ms/step - loss: 0.2255 - accuracy: 0.9262 - val_loss: 0.2797 - val_accuracy: 0.8902\n","Epoch 4/20\n","30/30 [==============================] - 1s 35ms/step - loss: 0.1774 - accuracy: 0.9427 - val_loss: 0.2752 - val_accuracy: 0.8883\n","Epoch 5/20\n","30/30 [==============================] - 1s 35ms/step - loss: 0.1441 - accuracy: 0.9545 - val_loss: 0.2830 - val_accuracy: 0.8879\n","Epoch 6/20\n","30/30 [==============================] - 1s 36ms/step - loss: 0.1142 - accuracy: 0.9652 - val_loss: 0.3481 - val_accuracy: 0.8661\n","Epoch 7/20\n","30/30 [==============================] - 1s 35ms/step - loss: 0.0931 - accuracy: 0.9734 - val_loss: 0.3092 - val_accuracy: 0.8832\n","Epoch 8/20\n","30/30 [==============================] - 1s 35ms/step - loss: 0.0772 - accuracy: 0.9775 - val_loss: 0.3432 - val_accuracy: 0.8765\n","Epoch 9/20\n","30/30 [==============================] - 1s 35ms/step - loss: 0.0625 - accuracy: 0.9829 - val_loss: 0.3572 - val_accuracy: 0.8767\n","Epoch 10/20\n","30/30 [==============================] - 1s 36ms/step - loss: 0.0486 - accuracy: 0.9887 - val_loss: 0.3892 - val_accuracy: 0.8787\n","Epoch 11/20\n","30/30 [==============================] - 1s 35ms/step - loss: 0.0378 - accuracy: 0.9923 - val_loss: 0.4502 - val_accuracy: 0.8713\n","Epoch 12/20\n","30/30 [==============================] - 1s 36ms/step - loss: 0.0343 - accuracy: 0.9911 - val_loss: 0.4500 - val_accuracy: 0.8755\n","Epoch 13/20\n","30/30 [==============================] - 1s 35ms/step - loss: 0.0195 - accuracy: 0.9975 - val_loss: 0.4838 - val_accuracy: 0.8746\n","Epoch 14/20\n","30/30 [==============================] - 1s 36ms/step - loss: 0.0188 - accuracy: 0.9970 - val_loss: 0.5224 - val_accuracy: 0.8660\n","Epoch 15/20\n","30/30 [==============================] - 1s 35ms/step - loss: 0.0128 - accuracy: 0.9989 - val_loss: 0.5775 - val_accuracy: 0.8630\n","Epoch 16/20\n","30/30 [==============================] - 1s 38ms/step - loss: 0.0107 - accuracy: 0.9991 - val_loss: 0.5815 - val_accuracy: 0.8701\n","Epoch 17/20\n","30/30 [==============================] - 1s 35ms/step - loss: 0.0087 - accuracy: 0.9991 - val_loss: 0.6111 - val_accuracy: 0.8693\n","Epoch 18/20\n","30/30 [==============================] - 1s 35ms/step - loss: 0.0069 - accuracy: 0.9988 - val_loss: 0.6416 - val_accuracy: 0.8651\n","Epoch 19/20\n","30/30 [==============================] - 1s 36ms/step - loss: 0.0032 - accuracy: 0.9999 - val_loss: 0.6809 - val_accuracy: 0.8654\n","Epoch 20/20\n","30/30 [==============================] - 1s 36ms/step - loss: 0.0068 - accuracy: 0.9986 - val_loss: 0.7068 - val_accuracy: 0.8666\n"]}]},{"cell_type":"code","source":["display_loss_and_accuracy_withval(imdb_history3)"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":573},"id":"vDM3ZIFvJ0DG","executionInfo":{"status":"ok","timestamp":1647953409183,"user_tz":-60,"elapsed":717,"user":{"displayName":"Gianluca Amato","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GhEmlMukD8qDnxG1PlDxK7Dzm1rjUKZSz0BhiJc9w=s64","userId":"18269286707108730791"}},"outputId":"ff1d7c8a-59af-4ef7-e0f6-64463230f844"},"execution_count":null,"outputs":[{"output_type":"display_data","data":{"text/plain":["
"],"image/png":"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vn2ZNm3aLuvuuOMOrihlqMA+ffpQeBvs6aefztq1u0/FcMsttzBhwoRSjz158mQWLly4Y/mmm27ilVdeqUj4xdJw1SLFcw/f+jt2hHfegT/9CV54ofomAVAiqBJDhw5l0qRJu6ybNGlSuQZ+gzBq6L777lupYxdNBOPGjePkk0+u1L5EpHSrVsF558GPfwxHHgkffBBGL67uE+8pEVSBc845hxdeeGHHJDTLli3jP//5D8cddxxXXHEFOTk5dOjQgZtvvrnY97dq1YpVq1YBMH78eNq2bUvv3r13DFUNoY9A9+7d6dSpE4MHD2bTpk28/fbbTJkyheuuu47OnTvzySefMGzYMJ577jkApk+fTpcuXejYsSPDhw/nu+++23G8m2++ma5du9KxY0cWL15c6u+n4apFwrf+jh3h738PYwS9/jocemi6o6oaNa6N4JprYN68qt1n585hVMCS7L///vTo0YMXX3yRgQMHMmnSJM477zzMjPHjx7P//vuzbds2TjrpJObPn89RRx1V7H7mzJnDpEmTmDdvHgUFBXTt2pVu3boBMGjQIC677DIAfvWrX/HQQw/x05/+lAEDBnDGGWdwzjnn7LKvLVu2MGzYMKZPn07btm258MILue+++7jmmmsAaNKkCXPnzuXee+9lwoQJPPjggyX+fhquWrLZBx/AmDHw0kshEbz0EnTqlO6oqpZKBFUksXoosVromWeeoWvXrnTp0oUFCxbsUo1T1BtvvMHZZ59N/fr12XvvvRkwYOfYfB9++CHHHXccHTt2JC8vjwULFpQaz5IlS2jdujVto9ksLrroImbOnLnj9UGDBgHQrVu3HQPVleTNN9/kggsuAIofrvrOO+9k7dq17LHHHnTv3p1HHnmEW265hX//+980atSo1H2LZKpPPw1VQF26hElifvtbmDWr5iUBqIElgtK+ucdp4MCBjB49mrlz57Jp0ya6devGp59+yoQJE5g1axb77bcfw4YNK3H46bIMGzaMyZMn06lTJx599FFmzJiRVLyFQ1knM4z1mDFj6N+/P1OnTqVXr15MmzZtx3DVL7zwAsOGDePaa6/lwgsvTCpWkVT65hu47bYwOUzt2nDDDXD99dXvltCKUImgijRs2JC+ffsyfPjwHaWB9evX06BBA/bZZx++/vprXnzxxVL3cfzxxzN58mQ2b97Mhg0beP75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\n"},"metadata":{"needs_background":"light"}},{"output_type":"display_data","data":{"text/plain":["
"],"image/png":"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H9pXdu6Ec8+FG26A73wnvaXHrVtDG03LlhrUUapOCSKD1q8Pdetr18I//hGqHuq7mTPh9NPh/PPDCbmqJ7vSNoeTToK//rVmyaG8r74KY1OtXRt6YVX30aHDrtJATk7NYvryy1A195vfhJLJUUeFXlqXXlo7VWJFRfDOO2F4lFmzwmCPO3aEv0urViGJf+tbuz/HzUt87t27bna9lvRTgqhESUnt/PLavj1cR/DOO/D663DyyTXfZ13xwANhQL+f/xx+/OPUt0tncqjrtm4Nn/9Xv4IPP4S2bUOPtmuuCckoVRs2hCrLWbNCyemDD0IJJScnDJEyYADst18YMr6oaNdz4nTic1zPtFatQrXYj35Uv0u8UnUVJQjcvUE8+vbt69VRVOSem+vet6/7yJHuDzzg/sor7l9+6V5Skvp+SkrcR4xwB/dJk6oVSp1WUuI+ZIh7kybur7+e2jbPPBPWHzAgHOfGqqTE/a233C+6KByPJk3cL7wwzIv7jq1d6/7CC+433ujeu7e7WfheNWvmftJJ7rfe6v7qq9U7piUl7t984756tfvixe5z5ri/9pr70KHhfVq1cv/pT93Xrav555b6ASjwJOfVrJ/Ya+tR3QSxdq37f/6n+3e/637AAeGIlD7at3cfOND9uuvcJ0xwf/dd902b4vdzzz1hmzvuqFYY9UJRkXuPHu4dOrgvXVrxukoO8ZYudR871r1t2/B96d3bfeJE92efdb/mGvejj971/WvRwv3UU93HjXN/8033LVvSG9uCBeFHgJl769YhESlRNHwVJQhVMZWzdi189NHujwUL4Ouvd62TlwfHHLPrsX59qDa49FJ46qn61521KhYtCjc3OvzwMPBg3MivU6aEBumTTgoN0i1bZj7Oum7LljDc+/jxoZcYhON04omh59iAAeE4Z6P324IFYTj6554L7RM33AA33RSqyOoi91BNXNO2o8ZKbRA1VFIShskonzgWLdo1btDJJ8Nrr9XP7qxVNW1aGHTwiiv2HNjvmWdColRySI17aLNq2jRcoLjXXtmOaJePPgqJ4g9/CInixhvDo64kipUrQ5fnCRNCb7vc3NCWEvdo2TL5slatwvAuPXo0zl5gShBpsm1bSBKFhXDqqY3rAqlbb4X//u+QIK64IswrTQ4nnxwapJUcGob580OieP750MW3NFHss0/mY3EPJdeHHw5DsBQXwxlnhJ6DX38NmzdX/ti6NX7f7dqFktuAAaEU17Nn4yiVKEFIrdu5M4yTNHNm6GGzeLGSQ0M3b15IFH/8Y0gUN90UEkWy60Jq06ZNoUru178OVXJt28Lll8Po0VXvSl5cvHsyKSoK1WpvvRV6ii1ZEtZr0yaUhEur/OpaCa+2KEFIWqxbFy6i27IlTCs5NA5z54axxaZNC6WIm24KV4937Fj77W8LFoSkMGlSOJn37Rva+y6+OH3DrCxbtitZvPVWqCWA3duITjkldDFOZ5Xy9u3hOp/165M/Spd36xbGT6sOJQhJmzlzwj/N8ccrOTQ2H34YEsWf/hRet2sHRx+9eweOo48O7RdVsX07vPBCqEZ6++1wEh46FK6+Gvr1q/3PUZlVq3ZPGAsWhPktWoSqrVNOCW0YxcXhgsXi4t2nU3n++us9T/6bNyePySyUotq1C4++fUMirQ4lCEmr1avDxVVNNb5vo/TRR+Hkmdjrr6ho1/IuXXZPGsccE3rBlb+j4rJlocH50UfDd+rgg8OAkZdfXrcu3lu7NiSu0oQxd25qo/nm5IT/kb322vM5Nzd8xsSTfkWPNm1qr0FdCUJEMsY99PpbsGD3Xn+ffLLrKu6mTeGII0IJ4+ijw9Xhf/pT2Pbcc0Np4Ywz6kevog0bwpAqcSf+0uecnLr7WZQgRCTrtm8P9fmJJY2PPgrJpEOH0BvuqqvCdUaSORUlCFUKiEhGNGu2q4opUVFRaGcoX+Uk2acEISJZ1ZiuH6pv6mitmIiIZJsShIiIxFKCEBGRWEoQIiISSwlCRERiKUGIiEistCYIMxtkZovMbLGZ3RKzvIuZvWlmH5rZfDM7O5qfZ2bfmNnc6PGbdMYpIiJ7Stt1EGaWAzwMfBdYDsw2sxfdfWHCarcBz7r7I2bWA5gO5EXLPnf3XumKT0REKpbOEkQ/YLG7L3H37cAU4Pxy6zhQOtZjG+DLNMYjIiJVkM4E0RFYlvB6eTQv0TjgUjNbTig9XJewrFtU9TTLzE5OY5wiIhIj243Uw4An3L0TcDYwycyaACuBLu7eG/hP4Pdmtseo8mZ2pZkVmFnBmjVrMhq4iEhDl84EsQLonPC6UzQv0Q+AZwHc/V2gBdDB3be5+7po/gfA58Bh5d/A3Se4e7675++7775p+AgiIo1XOhPEbKC7mXUzs2bAUODFcut8AZwGYGZHEhLEGjPbN2rkxswOBroDS9IYq4iIlJO2XkzuXmxm1wKvADnA4+7+sZndBRS4+4vAj4BHzewmQoP1SHd3MxsA3GVmO4ASYLS7r09XrCIisifdMEhEpBGr6IZB2W6kFhGROkoJQkREYilBiIhILCUIERGJpQQhIiKxlCBERCSWEoSIiMRSghARkVhKECIiEksJQkREYilBiIhILCUIERGJpQQhIiKxlCBERCSWEoSIiMRSghARkVhKECIiEksJQkREYilBiIhILCUIERGJpQQhIiKxlCBERCSWEoSIiMRSghARkVhNsx2AiNS+HTt2sHz5crZu3ZrtUKSOaNGiBZ06dWKvvfZKeRslCJEGaPny5bRu3Zq8vDzMLNvhSJa5O+vWrWP58uV069Yt5e1UxSTSAG3dupX27dsrOQgAZkb79u2rXKJUghBpoJQcJFF1vg9KECIiEksJQkSYPBny8qBJk/A8eXLN9rdu3Tp69epFr169OOCAA+jYsWPZ6+3bt1e4bUFBAddff32l79G/f/+aBSmVUiO1SCM3eTJceSVs2RJeL10aXgMMH169fbZv3565c+cCMG7cOFq1asXNN99ctry4uJimTeNPP/n5+eTn51f6Hu+88071gsuinTt3kpOTk+0wUqYShEgjd+utu5JDqS1bwvzaNHLkSEaPHs3xxx/P2LFjef/99znhhBPo3bs3/fv3Z9GiRQDMnDmTc889FwjJZdSoUQwcOJCDDz6Y8ePHl+2vVatWZesPHDiQiy66iCOOOILhw4fj7gBMnz6dI444gr59+3L99deX7TdRYWEhJ598Mn369KFPnz67JZ777ruPY445hp49e3LLLbcAsHjxYk4//XR69uxJnz59+Pzzz3eLGeDaa6/liSeeACAvL48f//jH9OnTh+eee45HH32U4447jp49e3LhhReyJTr4q1evZvDgwfTs2ZOePXvyzjvvcPvtt/Pggw+W7ffWW2/lV7/6VY3/FqlSCUKkkfvii6rNr4nly5fzzjvvkJOTw6ZNm3j77bdp2rQpr7/+Oj/96U95/vnn99jmk08+4c0336SoqIjDDz+cMWPG7NGX/8MPP+Tjjz/moIMO4sQTT+Tvf/87+fn5XHXVVbz11lt069aNYcOGxca033778dprr9GiRQs+++wzhg0bRkFBAS+99BJ/+tOfeO+998jNzWX9+vUADB8+nFtuuYXBgwezdetWSkpKWLZsWYWfu3379syZMwcI1W8//OEPAbjtttt47LHHuO6667j++us55ZRTeOGFF9i5cyebN2/moIMO4oILLuDGG2+kpKSEKVOm8P7771f5uFeXEoRII9elS6hWiptf277//e+XVbFs3LiRESNG8Nlnn2Fm7NixI3abc845h+bNm9O8eXP2228/Vq9eTadOnXZbp1+/fmXzevXqRWFhIa1ateLggw8u6/c/bNgwJkyYsMf+d+zYwbXXXsvcuXPJycnh008/BeD111/n8ssvJzc3F4B27dpRVF6XZ4cAAA+pSURBVFTEihUrGDx4MBAuPkvFxRdfXDa9YMECbrvtNjZs2MDmzZs588wzAXjjjTd46qmnAMjJyaFNmza0adOG9u3b8+GHH7J69Wp69+5N+/btU3rP2qAEIdLI3Xvv7m0QALm5YX5ta9myZdn0z372M0499VReeOEFCgsLGThwYOw2zZs3L5vOycmhuLi4Wusk88tf/pL999+fefPmUVJSkvJJP1HTpk0pKSkpe13+eoPEzz1y5EimTZtGz549eeKJJ5g5c2aF+77iiit44oknWLVqFaNGjapybDWhNgiRRm74cJgwAbp2BbPwPGFC9RuoU7Vx40Y6duwIUFZfX5sOP/xwlixZQmFhIQBTp05NGseBBx5IkyZNmDRpEjt37gTgu9/9LhMnTixrI1i/fj2tW7emU6dOTJs2DYBt27axZcsWunbtysKFC9m2bRsbNmxgxowZSeMqKiriwAMPZMeOHUxO6C522mmn8cgjjwChMXvjxo0ADB48mJdffpnZs2eXlTYyRQlCRBg+HAoLoaQkPKc7OQCMHTuWn/zkJ/Tu3btKv/hTtffee/PrX/+aQYMG0bdvX1q3bk2bNm32WO/qq6/mySefpGfPnnzyySdlv/YHDRrEeeedR35+Pr169eL+++8HYNKkSYwfP55jjz2W/v37s2rVKjp37syQIUM4+uijGTJkCL17904a1913383xxx/PiSeeyBFHHFE2/1e/+hVvvvkmxxxzDH379mXhwoUANGvWjFNPPZUhQ4ZkvAeUlbb213f5+fleUFCQ7TBE6oR//vOfHHnkkdkOI+s2b95Mq1atcHeuueYaunfvzk033ZTtsKqkpKSkrAdU9+7da7SvuO+FmX3g7rH9itNa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\n"},"metadata":{"needs_background":"light"}}]},{"cell_type":"markdown","source":["Una volta individuata l'epoca migliore (la numero 3), riaddestriamo la rete usando l'insieme di training completo, e valutiamo l'accuratezza sull'insieme di test."],"metadata":{"id":"JGZGqumjJ_XJ"}},{"cell_type":"code","source":["imdb_network3_full = tf.keras.models.Sequential([\n"," tf.keras.layers.Dense(16, activation='relu', input_shape=(10000,)),\n"," tf.keras.layers.Dense(16, activation='relu'),\n"," tf.keras.layers.Dense(1, activation='sigmoid')\n","])\n","imdb_network3_full.compile (optimizer='rmsprop', loss='binary_crossentropy', metrics=['accuracy'])\n","imdb_history3_full = imdb_network3_full.fit(x_train, y_train, epochs=3, batch_size=512)"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"M0jKzyoGKMIJ","executionInfo":{"status":"ok","timestamp":1647953447517,"user_tz":-60,"elapsed":5476,"user":{"displayName":"Gianluca Amato","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GhEmlMukD8qDnxG1PlDxK7Dzm1rjUKZSz0BhiJc9w=s64","userId":"18269286707108730791"}},"outputId":"99d4a305-dd9c-4349-e541-608e38b0214a"},"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["Epoch 1/3\n","49/49 [==============================] - 2s 27ms/step - loss: 0.4543 - accuracy: 0.8213\n","Epoch 2/3\n","49/49 [==============================] - 1s 28ms/step - loss: 0.2602 - accuracy: 0.9112\n","Epoch 3/3\n","49/49 [==============================] - 1s 27ms/step - loss: 0.2008 - accuracy: 0.9305\n"]}]},{"cell_type":"code","source":["imdb_network3_full.evaluate(x_test, y_test)"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"PhaTtthpKYFL","executionInfo":{"status":"ok","timestamp":1647953454525,"user_tz":-60,"elapsed":3404,"user":{"displayName":"Gianluca Amato","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GhEmlMukD8qDnxG1PlDxK7Dzm1rjUKZSz0BhiJc9w=s64","userId":"18269286707108730791"}},"outputId":"317fdef9-2bc2-4904-9496-016442f5e9d3"},"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["782/782 [==============================] - 2s 2ms/step - loss: 0.2879 - accuracy: 0.8853\n"]},{"output_type":"execute_result","data":{"text/plain":["[0.2878996729850769, 0.8853200078010559]"]},"metadata":{},"execution_count":50}]},{"cell_type":"markdown","source":["Sebbene addestrata su meno epoche di quella precedente, la nuova rete ha un'accuratezza migliore."],"metadata":{"id":"5Ks8JEkxRrNE"}}]}