{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"<table>\n    <tr><th><img src='http://www.fst.ac.ma/site/sites/default/files/fs_logo.png'/></th><br></tr>\n  <tr>\n    <th></th>\n    <th><h1>PROJET FIN DE MODULE DEEP LEARNINIG</h1><h1>La classification d'objets CIFAR-10</h1></th>\n    <th></th>\n  </tr>\n  <tr>\n    <td><h2>Réalisé par : </h2></td>\n    <td></td>\n    <td><h2>Sous la direction de :</h2></td>\n  </tr>\n    <tr>\n    <td></td>\n    <td><h2>OUAARA Sara<br>EZ-ZAKKAR Mohammed<br>Anass Elmoussaoui<br>Mohssin El Baghdadi</h2></td>\n    <td></td>\n    <td><h2>M.Chahhou Mohammed</h2></td>\n  </tr>\n</table>","metadata":{"papermill":{"duration":0.035882,"end_time":"2022-02-27T23:36:51.905214","exception":false,"start_time":"2022-02-27T23:36:51.869332","status":"completed"},"tags":[]}},{"cell_type":"markdown","source":"# <h1>Description des données :</h1>\n<h4>Les données CIFAR-10 consistent en 60 000 images couleur 32x32 en 10 classes, avec 6 000 images par classe. Il y a 50 000 images d'entraînement<br> et 10 000 images de test dans les données officielles.\n<br><br>Les classes d'étiquettes dans l'ensemble de données sont :\n\n0 : avion<br>\n1 : voiture<br>\n2 : oiseau<br>\n3 : chat<br>\n4 : cerf<br>\n5 : chien<br>\n6 : grenouille<br>\n7 : cheval<br>\n8 : bateau<br>\n9 : un camion</h4><br><br>\n<img src=\"https://production-media.paperswithcode.com/datasets/CIFAR-100-0000000433-b71f61c0_hPEzMRg.jpg\"/>","metadata":{"papermill":{"duration":0.024644,"end_time":"2022-02-27T23:36:51.954696","exception":false,"start_time":"2022-02-27T23:36:51.930052","status":"completed"},"tags":[]}},{"cell_type":"markdown","source":"# <h3>Téléchargement et prétraitement des donnees :<h3>","metadata":{"papermill":{"duration":0.024162,"end_time":"2022-02-27T23:36:52.003512","exception":false,"start_time":"2022-02-27T23:36:51.97935","status":"completed"},"tags":[]}},{"cell_type":"code","source":"import numpy as np\nimport tensorflow as tf\nimport matplotlib.pyplot as plt\nfrom keras.datasets import cifar10\nfrom keras.utils.np_utils import to_categorical","metadata":{"_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","papermill":{"duration":4.612416,"end_time":"2022-02-27T23:36:56.64032","exception":false,"start_time":"2022-02-27T23:36:52.027904","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-03-01T12:06:25.599636Z","iopub.execute_input":"2022-03-01T12:06:25.599912Z","iopub.status.idle":"2022-03-01T12:06:25.606980Z","shell.execute_reply.started":"2022-03-01T12:06:25.599881Z","shell.execute_reply":"2022-03-01T12:06:25.606230Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"data=cifar10.load_data()","metadata":{"papermill":{"duration":5.761503,"end_time":"2022-02-27T23:37:02.426923","exception":false,"start_time":"2022-02-27T23:36:56.66542","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-03-01T12:06:25.920400Z","iopub.execute_input":"2022-03-01T12:06:25.921131Z","iopub.status.idle":"2022-03-01T12:06:26.740780Z","shell.execute_reply.started":"2022-03-01T12:06:25.921060Z","shell.execute_reply":"2022-03-01T12:06:26.739975Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"(x_train, y_train), (x_test, y_test) = data","metadata":{"papermill":{"duration":0.048364,"end_time":"2022-02-27T23:37:02.518945","exception":false,"start_time":"2022-02-27T23:37:02.470581","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-03-01T12:20:15.605923Z","iopub.execute_input":"2022-03-01T12:20:15.606605Z","iopub.status.idle":"2022-03-01T12:20:15.617597Z","shell.execute_reply.started":"2022-03-01T12:20:15.606567Z","shell.execute_reply":"2022-03-01T12:20:15.616881Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print(x_train.shape, 'train shape')\nprint(x_test.shape, 'test shape')\nprint(y_train.shape, 'train samples')\nprint(y_test.shape, 'test samples')","metadata":{"papermill":{"duration":0.051567,"end_time":"2022-02-27T23:37:02.611951","exception":false,"start_time":"2022-02-27T23:37:02.560384","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-03-01T12:20:16.050971Z","iopub.execute_input":"2022-03-01T12:20:16.051392Z","iopub.status.idle":"2022-03-01T12:20:16.057888Z","shell.execute_reply.started":"2022-03-01T12:20:16.051339Z","shell.execute_reply":"2022-03-01T12:20:16.057115Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"class_names = ['airplane', 'automobile', 'bird', 'cat', 'deer', 'dog', 'frog', 'horse', 'ship', 'truck']\nplt.figure(figsize=(16,16))\nfor i in range(5):\n    plt.subplot(6,5,i+1)\n    plt.xticks([])\n    plt.yticks([])\n    plt.imshow(x_train[i])\n    plt.xlabel(class_names[y_train[i][0]])\nplt.show()","metadata":{"papermill":{"duration":0.267178,"end_time":"2022-02-27T23:37:02.920705","exception":false,"start_time":"2022-02-27T23:37:02.653527","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-03-01T12:20:16.753882Z","iopub.execute_input":"2022-03-01T12:20:16.754591Z","iopub.status.idle":"2022-03-01T12:20:16.952044Z","shell.execute_reply.started":"2022-03-01T12:20:16.754555Z","shell.execute_reply":"2022-03-01T12:20:16.951123Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#Normalisation\nx_train = x_train.astype('float32')\nx_train/=255\nx_test = x_test.astype('float32')\nx_test/=255\n\n#convertir en un vecteur de 10 qui a des valeurs binaires et des colonnes égales au nombre de catégories dans les données.\n#exemple : 2 --> 0100000000\nnum_classes = 10\ny_train_ohe = to_categorical(y_train, num_classes) \ny_test_ohe = to_categorical(y_test, num_classes)","metadata":{"papermill":{"duration":0.301466,"end_time":"2022-02-27T23:37:03.292856","exception":false,"start_time":"2022-02-27T23:37:02.99139","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-03-01T12:20:17.743625Z","iopub.execute_input":"2022-03-01T12:20:17.743889Z","iopub.status.idle":"2022-03-01T12:20:17.999204Z","shell.execute_reply.started":"2022-03-01T12:20:17.743859Z","shell.execute_reply":"2022-03-01T12:20:17.998427Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# <h2>La création de modéle d'apprentissage :</h2>\n<h3>l'archetecture CNN :</h3>\n<h4>Au cours des dernières années, Deep Learning a prouvé qu'il s'agissait d'un outil très puissant en raison de sa capacité à gérer d'énormes quantités de données. L'utilisation de couches cachées dépasse les techniques traditionnelles, en particulier pour la reconnaissance de formes. L'un des réseaux de neurones profonds les plus populaires est le réseau de neurones convolutifs (CNN).<h4>\n<img src='https://i.morioh.com/200516/91e28a8b.jpg'/>","metadata":{"papermill":{"duration":0.042854,"end_time":"2022-02-27T23:37:03.37863","exception":false,"start_time":"2022-02-27T23:37:03.335776","status":"completed"},"tags":[]}},{"cell_type":"code","source":"from keras.models import Sequential\nfrom keras.layers import Dense, Conv2D, MaxPooling2D, Flatten, Dropout\nfrom keras.activations import relu, softmax\nfrom keras.layers.normalization import batch_normalization\nfrom keras import layers, activations\n","metadata":{"papermill":{"duration":0.051337,"end_time":"2022-02-27T23:37:03.472991","exception":false,"start_time":"2022-02-27T23:37:03.421654","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-03-01T12:20:23.390987Z","iopub.execute_input":"2022-03-01T12:20:23.391271Z","iopub.status.idle":"2022-03-01T12:20:23.396008Z","shell.execute_reply.started":"2022-03-01T12:20:23.391234Z","shell.execute_reply":"2022-03-01T12:20:23.395055Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<h4>Notre modele CNN se compose de:<br><br><br>\nI-Réseau des neuronnes convolutif de 4 layers chacune contient :\n<br><br>1- Une couche de convolution 2D avec la methode Conv2D ou il applique des filtres aléatoirement en fixant leurs nombre et dimention(layer1 :64 filtres de (2,2))\n<br>2- Une couche de normalisation par batch avec la methode BatchNormalization() qui normalise chaque batch de données indépendamment. Pour accélérer le training du réseau neuronal convolutif et réduire la sensibilité à l'initialisation du réseau.\n<br>3- Puit l'application de fonction d'activation relu qui elimine les valeurs negatives et assuré la non linearité de notre réseau.\n<br>4- Et on termine par la compression des images on appliquant le pooling pour réduire leur taille iniciale en gardent les valeurs les plus important via la methode MaxPooling2D.\n\n<br><br>II-Un Perceptron Multicouch :<br><br>\n   1- Appliquer la fonction Flatten qui transférer les entrées multidimensionnels en une seule dimension.<br>\n   2- Puis trois couche lineaire chacune suivi par une fonction d'activation relu<br>\n   3- On appliquant la fonction dropout qui est une technique de régularisation ou on supprime un pourcentage des neurones aleatoirement de maniére temporaireet pendant le training les autres neurones faire leurs prédiction pour obtien un réseau moins sensible au poid specifique des neurones.</h4>","metadata":{"papermill":{"duration":0.042252,"end_time":"2022-02-27T23:37:03.558272","exception":false,"start_time":"2022-02-27T23:37:03.51602","status":"completed"},"tags":[]}},{"cell_type":"code","source":"model_=Sequential()\nmodel_.add(Conv2D(64, kernel_size=(2,2), input_shape=(32, 32, 3), padding='same'))\nmodel_.add(batch_normalization.BatchNormalization())\nmodel_.add(layers.Activation(activations.relu))\nmodel_.add(MaxPooling2D(pool_size=(2,2)))\n\nmodel_.add(Conv2D(64, kernel_size=(2,2), padding='same'))\nmodel_.add(batch_normalization.BatchNormalization())\nmodel_.add(layers.Activation(activations.relu))\nmodel_.add(MaxPooling2D(pool_size=(2,2)))\n\nmodel_.add(Conv2D(128, kernel_size=(2,2), padding='same'))\nmodel_.add(batch_normalization.BatchNormalization())\nmodel_.add(layers.Activation(activations.relu))\nmodel_.add(MaxPooling2D(pool_size=(2,2)))\n\nmodel_.add(Conv2D(128, kernel_size=(2,2), padding='same'))\nmodel_.add(batch_normalization.BatchNormalization())\nmodel_.add(layers.Activation(activations.relu))\nmodel_.add(MaxPooling2D(pool_size=(2,2)))\n\n\n\n\nmodel_.add(Flatten())\nmodel_.add(Dense(512))\nmodel_.add(Dropout(0.25))\nmodel_.add(layers.Activation(activations.relu))\nmodel_.add(Dense(10, activation='softmax'))\n\n\nmodel_.summary()","metadata":{"papermill":{"duration":2.358482,"end_time":"2022-02-27T23:37:05.959878","exception":false,"start_time":"2022-02-27T23:37:03.601396","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-03-01T12:21:08.513840Z","iopub.execute_input":"2022-03-01T12:21:08.514116Z","iopub.status.idle":"2022-03-01T12:21:08.643383Z","shell.execute_reply.started":"2022-03-01T12:21:08.514085Z","shell.execute_reply":"2022-03-01T12:21:08.642679Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# La Compilation et L'Apprentissage du Modèle :","metadata":{"papermill":{"duration":0.052421,"end_time":"2022-02-27T23:37:06.06159","exception":false,"start_time":"2022-02-27T23:37:06.009169","status":"completed"},"tags":[]}},{"cell_type":"code","source":"from keras.callbacks import EarlyStopping, ModelCheckpoint","metadata":{"papermill":{"duration":0.624434,"end_time":"2022-02-27T23:37:06.73884","exception":false,"start_time":"2022-02-27T23:37:06.114406","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-03-01T12:21:14.134738Z","iopub.execute_input":"2022-03-01T12:21:14.135001Z","iopub.status.idle":"2022-03-01T12:21:14.140786Z","shell.execute_reply.started":"2022-03-01T12:21:14.134971Z","shell.execute_reply":"2022-03-01T12:21:14.140114Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"es = EarlyStopping(monitor='val_accuracy', mode='max', patience=20 )# cad si la valeur minimale d'erreur ne diminue pas même après 20 epoche le programe  s'arrête\nmc=ModelCheckpoint('./weights1.h5', save_best_only=True)#on enregistre les régles qui nous permet d'obtenir la meilleure prediction  avec le  minimum des erreurs dans weights1.h5\nmodel_.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])#Nous précisons la configuration de training #optimizer: optimise les poids d'entrée en comparant la prédiction et la fonction de perte #loss : c'es fct d'erreur #metrics: évaluer les performances de modèle during training and testing\nh1=model_.fit( x_train, y_train_ohe, batch_size=100, epochs=50, validation_data= (x_test,y_test_ohe ), callbacks=[es, mc])#Trains the model ","metadata":{"papermill":{"duration":264.203057,"end_time":"2022-02-27T23:41:30.985128","exception":false,"start_time":"2022-02-27T23:37:06.782071","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-03-01T12:21:24.601612Z","iopub.execute_input":"2022-03-01T12:21:24.601868Z","iopub.status.idle":"2022-03-01T12:24:48.698951Z","shell.execute_reply.started":"2022-03-01T12:21:24.601839Z","shell.execute_reply":"2022-03-01T12:24:48.698139Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model_.load_weights(\"weights1.h5\")\nmodel_.evaluate(x_test,y_test_ohe)","metadata":{"papermill":{"duration":2.767198,"end_time":"2022-02-27T23:41:34.765356","exception":false,"start_time":"2022-02-27T23:41:31.998158","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-03-01T12:25:04.145629Z","iopub.execute_input":"2022-03-01T12:25:04.145928Z","iopub.status.idle":"2022-03-01T12:25:05.936795Z","shell.execute_reply.started":"2022-03-01T12:25:04.145894Z","shell.execute_reply":"2022-03-01T12:25:05.935930Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plt.plot(h1.history['accuracy'])\nplt.plot(h1.history['val_accuracy'])\nplt.title('model accuracy')\nplt.ylabel('accuracy')\nplt.xlabel('epoch')\nplt.legend(['train', 'test'], loc='upper left')\nplt.show()\n# summarize history for loss\nplt.plot(h1.history['loss'])\nplt.plot(h1.history['val_loss'])\nplt.title('model loss')\nplt.ylabel('loss')\nplt.xlabel('epoch')\nplt.legend(['train', 'test'], loc='upper left')\nplt.show()","metadata":{"papermill":{"duration":1.490035,"end_time":"2022-02-27T23:41:37.261759","exception":false,"start_time":"2022-02-27T23:41:35.771724","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-03-01T12:25:09.820985Z","iopub.execute_input":"2022-03-01T12:25:09.821265Z","iopub.status.idle":"2022-03-01T12:25:10.187696Z","shell.execute_reply.started":"2022-03-01T12:25:09.821235Z","shell.execute_reply":"2022-03-01T12:25:10.186962Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# **Transfert d'apprentissage : The Fine Tuning VGG16(imagenet)**","metadata":{"papermill":{"duration":1.020954,"end_time":"2022-02-27T23:41:39.392902","exception":false,"start_time":"2022-02-27T23:41:38.371948","status":"completed"},"tags":[]}},{"cell_type":"markdown","source":"<h4>Transfert d'apprentissage est une méthode d'apprentissage automatique où l'application des connaissances obtenues à partir d'un modèle utilisé dans une task peut être réutilisée comme point de départ pour une autre task.\ndans ce qui suit on va appliqué le transfert d'apprentissage de modéle VGG16 entrainé sur ImageNet à notre dataset</h4>\n<h4>Puisque notre dataset est un peut different de ImageNet dataset et petite le Fine Tuning nous permettra généralement d'obtenir un meilleur résultat. C'est le meme que transfert d'apprentissage sauf qu'on peut retrain the layers of the feature extraction.</h4>","metadata":{"papermill":{"duration":1.118989,"end_time":"2022-02-27T23:41:41.789853","exception":false,"start_time":"2022-02-27T23:41:40.670864","status":"completed"},"tags":[]}},{"cell_type":"code","source":"from keras.applications.vgg16 import VGG16\nfrom keras.utils.np_utils import to_categorical\nfrom keras.applications.vgg16 import preprocess_input","metadata":{"papermill":{"duration":1.067489,"end_time":"2022-02-27T23:41:43.858873","exception":false,"start_time":"2022-02-27T23:41:42.791384","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-03-01T12:36:00.642392Z","iopub.execute_input":"2022-03-01T12:36:00.642648Z","iopub.status.idle":"2022-03-01T12:36:00.646688Z","shell.execute_reply.started":"2022-03-01T12:36:00.642620Z","shell.execute_reply":"2022-03-01T12:36:00.645732Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"(x_train, _), (x_test, _) = data\n\n\nx_train=preprocess_input(x_train)#convertira les images d'entrée de RVB en BGR, puis centrera à zéro chaque canal de couleur par rapport au ImageNet dataset.\nx_train/=255\n\nx_test=preprocess_input(x_test)\nx_test/=255\n\n\n#x_train[0]\nprint(x_train[0])","metadata":{"papermill":{"duration":1.486271,"end_time":"2022-02-27T23:41:46.389065","exception":false,"start_time":"2022-02-27T23:41:44.902794","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-03-01T12:36:01.131572Z","iopub.execute_input":"2022-03-01T12:36:01.131865Z","iopub.status.idle":"2022-03-01T12:36:01.547931Z","shell.execute_reply.started":"2022-03-01T12:36:01.131835Z","shell.execute_reply":"2022-03-01T12:36:01.547146Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import tensorflow as tf\nvggmdl = tf.keras.applications.VGG16(include_top=False, weights='imagenet', input_shape=(32,32,3))\n\nmodel = Sequential()\nfor layer in vggmdl.layers:\n    model.add(layer)\n\n\nfor layer in model.layers[-7:]:\n    layer.trainable = False\n\n    \nfor layer in model.layers:\n    print(layer.trainable)","metadata":{"execution":{"iopub.status.busy":"2022-03-01T12:47:48.818622Z","iopub.execute_input":"2022-03-01T12:47:48.819009Z","iopub.status.idle":"2022-03-01T12:47:49.160263Z","shell.execute_reply.started":"2022-03-01T12:47:48.818974Z","shell.execute_reply":"2022-03-01T12:47:49.159445Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model.add(Flatten())\n\nmodel.add(Dense(512))\nmodel.add(Dropout(0.25))\nmodel.add(layers.Activation(activations.relu))\n#model.add(Dense(512, activation='relu'))\nmodel.add(Dense(10, activation='softmax'))\n\n\nmodel.summary()","metadata":{"papermill":{"duration":2.369387,"end_time":"2022-02-27T23:46:42.796561","exception":false,"start_time":"2022-02-27T23:46:40.427174","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-03-01T12:47:49.605604Z","iopub.execute_input":"2022-03-01T12:47:49.606281Z","iopub.status.idle":"2022-03-01T12:47:49.654722Z","shell.execute_reply.started":"2022-03-01T12:47:49.606242Z","shell.execute_reply":"2022-03-01T12:47:49.654024Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"es = EarlyStopping(monitor='val_loss', mode='min', patience=20 )\nmc=ModelCheckpoint('./weights2.h5', save_best_only=True)\nmodel.compile(optimizer='adam', loss='categorical_crossentropy',metrics='accuracy')\nh2=model.fit( x_train, y_train_ohe, batch_size=100, epochs=50, validation_data= (x_test,y_test_ohe ), callbacks=[es, mc])","metadata":{"papermill":{"duration":358.408122,"end_time":"2022-02-27T23:52:43.110358","exception":false,"start_time":"2022-02-27T23:46:44.702236","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-03-01T12:48:44.492823Z","iopub.execute_input":"2022-03-01T12:48:44.493264Z","iopub.status.idle":"2022-03-01T12:54:10.367905Z","shell.execute_reply.started":"2022-03-01T12:48:44.493219Z","shell.execute_reply":"2022-03-01T12:54:10.367223Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model.load_weights(\"weights2.h5\")\nmodel.evaluate(x_test,y_test_ohe)","metadata":{"papermill":{"duration":8.832889,"end_time":"2022-02-27T23:52:55.167683","exception":false,"start_time":"2022-02-27T23:52:46.334794","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-03-01T12:54:36.497006Z","iopub.execute_input":"2022-03-01T12:54:36.497355Z","iopub.status.idle":"2022-03-01T12:54:39.648734Z","shell.execute_reply.started":"2022-03-01T12:54:36.497317Z","shell.execute_reply":"2022-03-01T12:54:39.647994Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plt.plot(h2.history['accuracy'])\nplt.plot(h2.history['val_accuracy'])\nplt.title('model accuracy')\nplt.ylabel('accuracy')\nplt.xlabel('epoch')\nplt.legend(['train', 'test'], loc='upper left')\nplt.show()\n# summarize history for loss\nplt.plot(h2.history['loss'])\nplt.plot(h2.history['val_loss'])\nplt.title('model loss')\nplt.ylabel('loss')\nplt.xlabel('epoch')\nplt.legend(['train', 'test'], loc='upper left')\nplt.show()","metadata":{"papermill":{"duration":4.18215,"end_time":"2022-02-27T23:53:02.552549","exception":false,"start_time":"2022-02-27T23:52:58.370399","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-03-01T12:54:43.709742Z","iopub.execute_input":"2022-03-01T12:54:43.710015Z","iopub.status.idle":"2022-03-01T12:54:44.090605Z","shell.execute_reply.started":"2022-03-01T12:54:43.709983Z","shell.execute_reply":"2022-03-01T12:54:44.089932Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Submission","metadata":{"papermill":{"duration":3.163913,"end_time":"2022-02-27T23:53:08.950717","exception":false,"start_time":"2022-02-27T23:53:05.786804","status":"completed"},"tags":[]}},{"cell_type":"code","source":"!pip install py7zr\nimport py7zr\nfrom keras.preprocessing.image import ImageDataGenerator\nfrom py7zr import unpack_7zarchive\nimport shutil\nimport os\nimport csv","metadata":{"papermill":{"duration":15.98178,"end_time":"2022-02-27T23:53:28.151383","exception":false,"start_time":"2022-02-27T23:53:12.169603","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-03-01T11:37:49.326002Z","iopub.execute_input":"2022-03-01T11:37:49.326464Z","iopub.status.idle":"2022-03-01T11:38:01.789376Z","shell.execute_reply.started":"2022-03-01T11:37:49.326428Z","shell.execute_reply":"2022-03-01T11:38:01.788603Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"shutil.register_unpack_format('7zip', ['.7z'], unpack_7zarchive)","metadata":{"papermill":{"duration":3.951781,"end_time":"2022-02-27T23:53:35.381371","exception":false,"start_time":"2022-02-27T23:53:31.42959","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-03-01T11:38:01.79091Z","iopub.execute_input":"2022-03-01T11:38:01.791217Z","iopub.status.idle":"2022-03-01T11:38:01.796121Z","shell.execute_reply.started":"2022-03-01T11:38:01.791178Z","shell.execute_reply":"2022-03-01T11:38:01.795007Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"shutil.unpack_archive('/kaggle/input/cifar-10/test.7z')","metadata":{"papermill":{"duration":841.494168,"end_time":"2022-02-28T00:07:40.029931","exception":false,"start_time":"2022-02-27T23:53:38.535763","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-03-01T11:38:01.797555Z","iopub.execute_input":"2022-03-01T11:38:01.797818Z","iopub.status.idle":"2022-03-01T11:51:56.673531Z","shell.execute_reply.started":"2022-03-01T11:38:01.797786Z","shell.execute_reply":"2022-03-01T11:51:56.672708Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_data_generator = ImageDataGenerator(rescale=1./255.)\ntest_generator = test_data_generator.flow_from_directory(\n            directory='/kaggle/working',\n            shuffle=False,\n            color_mode='rgb',\n            target_size=(32,32),\n            class_mode=None\n)","metadata":{"papermill":{"duration":9.837501,"end_time":"2022-02-28T00:07:54.684626","exception":false,"start_time":"2022-02-28T00:07:44.847125","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-03-01T12:15:27.310327Z","iopub.execute_input":"2022-03-01T12:15:27.311116Z","iopub.status.idle":"2022-03-01T12:15:33.818104Z","shell.execute_reply.started":"2022-03-01T12:15:27.311061Z","shell.execute_reply":"2022-03-01T12:15:33.817266Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**Predict With Model 1 (model_):**","metadata":{}},{"cell_type":"code","source":"all_test_images_pred_ = model_.predict_generator(generator=test_generator)\nall_pred_ = np.round(all_test_images_pred_)","metadata":{"execution":{"iopub.status.busy":"2022-03-01T12:30:52.801761Z","iopub.execute_input":"2022-03-01T12:30:52.802173Z","iopub.status.idle":"2022-03-01T12:32:19.893102Z","shell.execute_reply.started":"2022-03-01T12:30:52.802135Z","shell.execute_reply":"2022-03-01T12:32:19.892268Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"with open('./submissionA.csv', 'w', encoding='UTF8') as f:\n    # create the csv writer\n    writer = csv.writer(f)\n    writer.writerow([\"id\",\"label\"])\n    i = 1\n    for prediction in all_pred_:\n        writer.writerow([i,class_names[np.argmax(prediction)]])\n        i+=1","metadata":{"execution":{"iopub.status.busy":"2022-03-01T12:32:19.894511Z","iopub.execute_input":"2022-03-01T12:32:19.894765Z","iopub.status.idle":"2022-03-01T12:32:21.047832Z","shell.execute_reply.started":"2022-03-01T12:32:19.894729Z","shell.execute_reply":"2022-03-01T12:32:21.047097Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plt.figure(figsize=(16,16))\nfor i in range(30):\n    plt.subplot(6,5,i+1)\n    plt.xticks([])\n    plt.yticks([])\n    plt.imshow(test_generator[0][i])\n    plt.xlabel(class_names[np.argmax(all_pred_[i])])\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2022-03-01T12:32:21.048974Z","iopub.execute_input":"2022-03-01T12:32:21.050042Z","iopub.status.idle":"2022-03-01T12:32:22.253596Z","shell.execute_reply.started":"2022-03-01T12:32:21.050009Z","shell.execute_reply":"2022-03-01T12:32:22.252996Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**Predict With Model 2 (model):**","metadata":{}},{"cell_type":"code","source":"all_test_images_pred = model.predict_generator(generator=test_generator)\nall_pred = np.round(all_test_images_pred)","metadata":{"papermill":{"duration":100.20575,"end_time":"2022-02-28T00:09:38.019309","exception":false,"start_time":"2022-02-28T00:07:57.813559","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-03-01T12:55:20.325161Z","iopub.execute_input":"2022-03-01T12:55:20.325508Z","iopub.status.idle":"2022-03-01T12:57:10.651465Z","shell.execute_reply.started":"2022-03-01T12:55:20.325451Z","shell.execute_reply":"2022-03-01T12:57:10.650593Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"with open('./submissionB.csv', 'w', encoding='UTF8') as f:\n    # create the csv writer\n    writer = csv.writer(f)\n    writer.writerow([\"id\",\"label\"])\n    i = 1\n    for prediction in all_pred:\n        writer.writerow([i,class_names[np.argmax(prediction)]])\n        i+=1","metadata":{"papermill":{"duration":5.093572,"end_time":"2022-02-28T00:09:46.281512","exception":false,"start_time":"2022-02-28T00:09:41.18794","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-03-01T12:57:10.653031Z","iopub.execute_input":"2022-03-01T12:57:10.653543Z","iopub.status.idle":"2022-03-01T12:57:11.875051Z","shell.execute_reply.started":"2022-03-01T12:57:10.653506Z","shell.execute_reply":"2022-03-01T12:57:11.874152Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plt.figure(figsize=(16,16))\nfor i in range(30):\n    plt.subplot(6,5,i+1)\n    plt.xticks([])\n    plt.yticks([])\n    plt.imshow(test_generator[0][i])\n    plt.xlabel(class_names[np.argmax(all_pred[i])])\nplt.show()","metadata":{"papermill":{"duration":4.799676,"end_time":"2022-02-28T00:09:54.226365","exception":false,"start_time":"2022-02-28T00:09:49.426689","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-03-01T12:57:11.876866Z","iopub.execute_input":"2022-03-01T12:57:11.877191Z","iopub.status.idle":"2022-03-01T12:57:13.107656Z","shell.execute_reply.started":"2022-03-01T12:57:11.877153Z","shell.execute_reply":"2022-03-01T12:57:13.106989Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**Delete \"test\"directory**","metadata":{}},{"cell_type":"code","source":"folder_path = \"./test\"\nif os.path.exists(folder_path):\n    try:\n        shutil.rmtree(folder_path)\n    except OSError as e:\n        print(\"Error: %s - %s.\" % (e.filename, e.strerror))","metadata":{"execution":{"iopub.status.busy":"2022-03-01T12:57:35.080531Z","iopub.execute_input":"2022-03-01T12:57:35.080788Z","iopub.status.idle":"2022-03-01T12:57:47.996386Z","shell.execute_reply.started":"2022-03-01T12:57:35.080759Z","shell.execute_reply":"2022-03-01T12:57:47.993614Z"},"trusted":true},"execution_count":null,"outputs":[]}]}