{ "metadata": { "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.9.4" }, "orig_nbformat": 2, "kernelspec": { "name": "python394jvsc74a57bd0d55a872fb12b64c3eb6a530d12935ddebcb38da0925d2cc3bd9c2ebc1d370b0d", "display_name": "Python 3.9.4 64-bit" }, "metadata": { "interpreter": { "hash": "d55a872fb12b64c3eb6a530d12935ddebcb38da0925d2cc3bd9c2ebc1d370b0d" } } }, "nbformat": 4, "nbformat_minor": 2, "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "INFO:tensorflow:Enabling eager execution\n", "INFO:tensorflow:Enabling v2 tensorshape\n", "INFO:tensorflow:Enabling resource variables\n", "INFO:tensorflow:Enabling tensor equality\n", "INFO:tensorflow:Enabling control flow v2\n", "WARNING:tensorflow:SavedModel saved prior to TF 2.5 detected when loading Keras model. Please ensure that you are saving the model with model.save() or tf.keras.models.save_model(), *NOT* tf.saved_model.save(). To confirm, there should be a file named \"keras_metadata.pb\" in the SavedModel directory.\n", "Model used: firstModel\n" ] } ], "source": [ "#@title Imports\n", "#%load_ext autoreload #Need to uncomment for import sometime, dont understand\n", "\n", "#Tensorflow :\n", "import tensorflow as tf\n", "from tensorflow import keras\n", "from tensorflow.keras import datasets, layers, models, losses\n", "import tensorflow_datasets as tfds\n", "#from google.colab import files\n", "\n", "#Others :\n", "from matplotlib import image\n", "import os\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "import matplotlib\n", "import random as rd\n", "import cv2\n", "import csv\n", "\n", "#Data loaders :\n", "from loadFer2013DS import *\n", "from loadRavdessDS import *\n", "from loadExpWDS import *\n", "from loadAffwildDS import *\n", "\n", "#Others\n", "from utils import *\n", "from config import *" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "array([[1, 2, 3, 4],\n", " [1, 2, 3, 4],\n", " [1, 2, 3, 4],\n", " [1, 2, 3, 4]])" ] }, "metadata": {}, "execution_count": 14 } ], "source": [ "a = np.array([[1,2], [3,4]])\t \n", "np.resize(a, (4,4))" ] }, { "source": [ "#CHargement des données\n", "Xf, Yf = loadFer2013Data()\n", "Xr, Yr = loadRavdessData()\n", "Xe, Ye = loadExpWData(90000, count=True)\n", "Xa, Ya = loadAffwildData()\n", "\n", "X_train, Y_train, X_test, Y_test = mergeToDatabase([Xf, Xr, Xe, Xa], [Yf, Yr, Ye, Ya])" ], "cell_type": "code", "metadata": { "tags": [] }, "execution_count": 3, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "\n", "CHARGEMENT DE 35887 DONNEES DEPUIS FER2013 ...\n" ] }, { "output_type": "error", "ename": "KeyboardInterrupt", "evalue": "", "traceback": [ "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[1;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)", "\u001b[1;32m<ipython-input-3-3417f05429fb>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[1;31m#CHargement des données\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 2\u001b[1;33m \u001b[0mXf\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mYf\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mloadFer2013Data\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 3\u001b[0m \u001b[0mXr\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mYr\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mloadRavdessData\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 4\u001b[0m \u001b[0mXe\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mYe\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mloadExpWData\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;36m90000\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mcount\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;32mTrue\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 5\u001b[0m \u001b[0mXa\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mYa\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mloadAffwildData\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32mc:\\Users\\timot\\facial-expression-detection\\loadFer2013DS.py\u001b[0m in \u001b[0;36mloadFer2013Data\u001b[1;34m(maxNbrImages)\u001b[0m\n\u001b[0;32m 57\u001b[0m \u001b[0memotionNbr\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mstringImage\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mtypeImage\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mrow\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 58\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 59\u001b[1;33m \u001b[0mX\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mappend\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mnormAndResize\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mstrToArray\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mstringImage\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0minput_shape\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 60\u001b[0m \u001b[0mY\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mappend\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0memotionNbr\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 61\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32mc:\\Users\\timot\\facial-expression-detection\\utils.py\u001b[0m in \u001b[0;36mnormAndResize\u001b[1;34m(image, input_shape)\u001b[0m\n\u001b[0;32m 28\u001b[0m \u001b[1;31m# resize for h and l\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 29\u001b[0m \u001b[1;31m# print(image.shape) #\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 30\u001b[1;33m \u001b[0mimage\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mcv2\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mresize\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mimage\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mdsize\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mh\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0ml\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0minterpolation\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mcv2\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mINTER_CUBIC\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 31\u001b[0m \u001b[1;31m# if we want (h,l,3) -> (h,l,1) , we first transform it in to (h,l) (grey the image)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 32\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mlen\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mimage\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mshape\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;33m==\u001b[0m \u001b[1;36m3\u001b[0m \u001b[1;32mand\u001b[0m \u001b[0mp\u001b[0m \u001b[1;33m==\u001b[0m \u001b[1;36m1\u001b[0m \u001b[1;32mand\u001b[0m \u001b[0mimage\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mshape\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m2\u001b[0m\u001b[1;33m]\u001b[0m \u001b[1;33m!=\u001b[0m \u001b[1;36m1\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;31mKeyboardInterrupt\u001b[0m: " ] } ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#@title Visualisation de chaque dataset\n", "for X, Y, name in zip([Xf, Xr, Xe, Xa], [Yf, Yr, Ye, Ya], [\"fer2013\", \"ravdess\", \"expW\", \"affwild\"]):\n", " N=5\n", " M=5\n", " print(\"Dataset:\", name)\n", " print(\"Images:\", X.shape, \"La bels:\", Y.shape)\n", " plt.figure()\n", " for i in range(N*M):\n", " if X.shape[0] == 0: continue\n", " k = rd.randrange(X.shape[0])\n", " plt.subplot(N, M, i+1)\n", " plt.xticks([])\n", " plt.yticks([])\n", " plt.grid(False)\n", "\n", " afficher(X[k])\n", " plt.title(emotions[int(Y[k])])\n", " plt.show()" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "output_type": "error", "ename": "NameError", "evalue": "name 'X_train' is not defined", "traceback": [ "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[1;31mNameError\u001b[0m Traceback (most recent call last)", "\u001b[1;32m<ipython-input-5-6d0d9ec25cf6>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[1;31m#Visualisation du dataset global\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 2\u001b[1;33m \u001b[0mprint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"X_train:\"\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mX_train\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mshape\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 3\u001b[0m \u001b[0mprint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"Y_train:\"\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mY_train\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mshape\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 4\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 5\u001b[0m \u001b[0mprint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"\\nX_test:\"\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mX_test\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mshape\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;31mNameError\u001b[0m: name 'X_train' is not defined" ] } ], "source": [ "#Visualisation du dataset global\n", "print(\"X_train:\", X_train.shape)\n", "print(\"Y_train:\", Y_train.shape)\n", "\n", "print(\"\\nX_test:\", X_test.shape)\n", "print(\"Y_test:\", Y_test.shape)\n", "\n", "N=5\n", "M=5\n", "plt.figure()\n", "for i in range(N*M):\n", " k = rd.randrange(X_train.shape[0])\n", " plt.subplot(N, M, i+1)\n", " plt.xticks([])\n", " plt.yticks([])\n", " plt.grid(False)\n", "\n", " afficher(X_train[k])\n", " plt.title(emotions[int(Y_train[k])])\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "#@title Hyperparamètres\n", "epochs = \n", "batch_size = 128\n", "validation_size = 0.1" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "X_train: (81000, 48, 48, 1)\nY_train: (81000, 7)\n\nX_test_cat: (9001, 48, 48, 1)\nY_test_cat: (9001, 7)\n" ] } ], "source": [ "#Labels catégoriques\n", "Y_train_cat = keras.utils.to_categorical(Y_train)\n", "Y_test_cat = keras.utils.to_categorical(Y_test)\n", "\n", "print(\"X_train:\", X_train.shape)\n", "print(\"Y_train:\", Y_train_cat.shape)\n", "\n", "print(\"\\nX_test_cat:\", X_test.shape)\n", "print(\"Y_test_cat:\", Y_test_cat.shape)" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "#MODELE\n", "class MyModel(keras.Sequential):\n", "\n", " def __init__(self, input_shape):\n", " super(MyModel, self).__init__()\n", " self.add(keras.layers.Conv2D(32, kernel_size = (3, 3), activation = 'relu', input_shape = input_shape)) \n", " self.add(keras.layers.MaxPooling2D(pool_size = 2))\n", " self.add(keras.layers.BatchNormalization())\n", "\n", " self.add(keras.layers.Conv2D(64, kernel_size = (3, 3), activation = 'relu'))\n", " self.add(keras.layers.MaxPooling2D(pool_size = 2))\n", " self.add(keras.layers.BatchNormalization())\n", "\n", " self.add(keras.layers.Conv2D(96, kernel_size = (3, 3), activation = 'relu'))\n", " self.add(keras.layers.MaxPooling2D(pool_size = 2))\n", " self.add(keras.layers.BatchNormalization())\n", "\n", " self.add(keras.layers.Flatten())\n", "\n", " self.add(keras.layers.Dense(64, activation = 'relu'))\n", " self.add(keras.layers.BatchNormalization())\n", " \n", " self.add(keras.layers.Dense(7, activation = 'softmax'))\n", " \n", " def predir(self, monImage):\n", " return self.predict(np.array([monImage]))[0,:]\n", "\n", " def compile_o(self):\n", " self.compile(optimizer = 'adam', loss=losses.categorical_crossentropy, metrics = ['accuracy'])\n", "\n", "myModel = MyModel(input_shape)\n", "myModel.compile_o()" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "[0.15433358 0.14506394 0.16671737 0.1411671 0.13488784 0.13087346\n 0.12695667]\n" ] }, { "output_type": "display_data", "data": { "text/plain": "<Figure size 432x288 with 1 Axes>", "image/svg+xml": "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\r\n<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\r\n \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\r\n<svg height=\"250.052344pt\" version=\"1.1\" viewBox=\"0 0 251.565 250.052344\" width=\"251.565pt\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\r\n <metadata>\r\n <rdf:RDF xmlns:cc=\"http://creativecommons.org/ns#\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\r\n <cc:Work>\r\n <dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\"/>\r\n <dc:date>2021-05-04T23:17:39.951349</dc:date>\r\n <dc:format>image/svg+xml</dc:format>\r\n <dc:creator>\r\n <cc:Agent>\r\n <dc:title>Matplotlib v3.4.1, https://matplotlib.org/</dc:title>\r\n </cc:Agent>\r\n </dc:creator>\r\n </cc:Work>\r\n </rdf:RDF>\r\n </metadata>\r\n <defs>\r\n <style type=\"text/css\">*{stroke-linecap:butt;stroke-linejoin:round;}</style>\r\n </defs>\r\n <g id=\"figure_1\">\r\n <g id=\"patch_1\">\r\n <path d=\"M 0 250.052344 \r\nL 251.565 250.052344 \r\nL 251.565 0 \r\nL 0 0 \r\nz\r\n\" style=\"fill:none;\"/>\r\n </g>\r\n <g id=\"axes_1\">\r\n <g id=\"patch_2\">\r\n <path d=\"M 26.925 226.174219 \r\nL 244.365 226.174219 \r\nL 244.365 8.734219 \r\nL 26.925 8.734219 \r\nz\r\n\" style=\"fill:#ffffff;\"/>\r\n </g>\r\n <g clip-path=\"url(#pb9c2e2cd6d)\">\r\n <image height=\"218\" id=\"image727a5096cb\" transform=\"scale(1 -1)translate(0 -218)\" width=\"218\" x=\"26.925\" xlink:href=\"data:image/png;base64,\r\n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\" y=\"-8.174219\"/>\r\n </g>\r\n <g id=\"matplotlib.axis_1\">\r\n <g id=\"xtick_1\">\r\n <g id=\"line2d_1\">\r\n <defs>\r\n <path d=\"M 0 0 \r\nL 0 3.5 \r\n\" id=\"md0bafdaabc\" style=\"stroke:#000000;stroke-width:0.8;\"/>\r\n </defs>\r\n <g>\r\n <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"29.19\" xlink:href=\"#md0bafdaabc\" y=\"226.174219\"/>\r\n </g>\r\n </g>\r\n <g id=\"text_1\">\r\n <!-- 0 -->\r\n <g transform=\"translate(26.00875 240.772656)scale(0.1 -0.1)\">\r\n <defs>\r\n <path d=\"M 2034 4250 \r\nQ 1547 4250 1301 3770 \r\nQ 1056 3291 1056 2328 \r\nQ 1056 1369 1301 889 \r\nQ 1547 409 2034 409 \r\nQ 2525 409 2770 889 \r\nQ 3016 1369 3016 2328 \r\nQ 3016 3291 2770 3770 \r\nQ 2525 4250 2034 4250 \r\nz\r\nM 2034 4750 \r\nQ 2819 4750 3233 4129 \r\nQ 3647 3509 3647 2328 \r\nQ 3647 1150 3233 529 \r\nQ 2819 -91 2034 -91 \r\nQ 1250 -91 836 529 \r\nQ 422 1150 422 2328 \r\nQ 422 3509 836 4129 \r\nQ 1250 4750 2034 4750 \r\nz\r\n\" id=\"DejaVuSans-30\" transform=\"scale(0.015625)\"/>\r\n </defs>\r\n <use xlink:href=\"#DejaVuSans-30\"/>\r\n </g>\r\n </g>\r\n </g>\r\n <g id=\"xtick_2\">\r\n <g id=\"line2d_2\">\r\n <g>\r\n <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"74.49\" xlink:href=\"#md0bafdaabc\" y=\"226.174219\"/>\r\n </g>\r\n </g>\r\n <g id=\"text_2\">\r\n <!-- 10 -->\r\n <g transform=\"translate(68.1275 240.772656)scale(0.1 -0.1)\">\r\n <defs>\r\n <path d=\"M 794 531 \r\nL 1825 531 \r\nL 1825 4091 \r\nL 703 3866 \r\nL 703 4441 \r\nL 1819 4666 \r\nL 2450 4666 \r\nL 2450 531 \r\nL 3481 531 \r\nL 3481 0 \r\nL 794 0 \r\nL 794 531 \r\nz\r\n\" id=\"DejaVuSans-31\" transform=\"scale(0.015625)\"/>\r\n </defs>\r\n <use xlink:href=\"#DejaVuSans-31\"/>\r\n <use x=\"63.623047\" xlink:href=\"#DejaVuSans-30\"/>\r\n </g>\r\n </g>\r\n </g>\r\n <g id=\"xtick_3\">\r\n <g id=\"line2d_3\">\r\n <g>\r\n <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"119.79\" xlink:href=\"#md0bafdaabc\" y=\"226.174219\"/>\r\n </g>\r\n </g>\r\n <g id=\"text_3\">\r\n <!-- 20 -->\r\n <g transform=\"translate(113.4275 240.772656)scale(0.1 -0.1)\">\r\n <defs>\r\n <path d=\"M 1228 531 \r\nL 3431 531 \r\nL 3431 0 \r\nL 469 0 \r\nL 469 531 \r\nQ 828 903 1448 1529 \r\nQ 2069 2156 2228 2338 \r\nQ 2531 2678 2651 2914 \r\nQ 2772 3150 2772 3378 \r\nQ 2772 3750 2511 3984 \r\nQ 2250 4219 1831 4219 \r\nQ 1534 4219 1204 4116 \r\nQ 875 4013 500 3803 \r\nL 500 4441 \r\nQ 881 4594 1212 4672 \r\nQ 1544 4750 1819 4750 \r\nQ 2544 4750 2975 4387 \r\nQ 3406 4025 3406 3419 \r\nQ 3406 3131 3298 2873 \r\nQ 3191 2616 2906 2266 \r\nQ 2828 2175 2409 1742 \r\nQ 1991 1309 1228 531 \r\nz\r\n\" id=\"DejaVuSans-32\" transform=\"scale(0.015625)\"/>\r\n </defs>\r\n <use xlink:href=\"#DejaVuSans-32\"/>\r\n <use x=\"63.623047\" xlink:href=\"#DejaVuSans-30\"/>\r\n </g>\r\n </g>\r\n </g>\r\n <g id=\"xtick_4\">\r\n <g id=\"line2d_4\">\r\n <g>\r\n <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"165.09\" xlink:href=\"#md0bafdaabc\" y=\"226.174219\"/>\r\n </g>\r\n </g>\r\n <g id=\"text_4\">\r\n <!-- 30 -->\r\n <g transform=\"translate(158.7275 240.772656)scale(0.1 -0.1)\">\r\n <defs>\r\n <path d=\"M 2597 2516 \r\nQ 3050 2419 3304 2112 \r\nQ 3559 1806 3559 1356 \r\nQ 3559 666 3084 287 \r\nQ 2609 -91 1734 -91 \r\nQ 1441 -91 1130 -33 \r\nQ 819 25 488 141 \r\nL 488 750 \r\nQ 750 597 1062 519 \r\nQ 1375 441 1716 441 \r\nQ 2309 441 2620 675 \r\nQ 2931 909 2931 1356 \r\nQ 2931 1769 2642 2001 \r\nQ 2353 2234 1838 2234 \r\nL 1294 2234 \r\nL 1294 2753 \r\nL 1863 2753 \r\nQ 2328 2753 2575 2939 \r\nQ 2822 3125 2822 3475 \r\nQ 2822 3834 2567 4026 \r\nQ 2313 4219 1838 4219 \r\nQ 1578 4219 1281 4162 \r\nQ 984 4106 628 3988 \r\nL 628 4550 \r\nQ 988 4650 1302 4700 \r\nQ 1616 4750 1894 4750 \r\nQ 2613 4750 3031 4423 \r\nQ 3450 4097 3450 3541 \r\nQ 3450 3153 3228 2886 \r\nQ 3006 2619 2597 2516 \r\nz\r\n\" id=\"DejaVuSans-33\" transform=\"scale(0.015625)\"/>\r\n </defs>\r\n <use xlink:href=\"#DejaVuSans-33\"/>\r\n <use x=\"63.623047\" xlink:href=\"#DejaVuSans-30\"/>\r\n </g>\r\n </g>\r\n </g>\r\n <g id=\"xtick_5\">\r\n <g id=\"line2d_5\">\r\n <g>\r\n <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"210.39\" xlink:href=\"#md0bafdaabc\" y=\"226.174219\"/>\r\n </g>\r\n </g>\r\n <g id=\"text_5\">\r\n <!-- 40 -->\r\n <g transform=\"translate(204.0275 240.772656)scale(0.1 -0.1)\">\r\n <defs>\r\n <path d=\"M 2419 4116 \r\nL 825 1625 \r\nL 2419 1625 \r\nL 2419 4116 \r\nz\r\nM 2253 4666 \r\nL 3047 4666 \r\nL 3047 1625 \r\nL 3713 1625 \r\nL 3713 1100 \r\nL 3047 1100 \r\nL 3047 0 \r\nL 2419 0 \r\nL 2419 1100 \r\nL 313 1100 \r\nL 313 1709 \r\nL 2253 4666 \r\nz\r\n\" id=\"DejaVuSans-34\" transform=\"scale(0.015625)\"/>\r\n </defs>\r\n <use xlink:href=\"#DejaVuSans-34\"/>\r\n <use x=\"63.623047\" xlink:href=\"#DejaVuSans-30\"/>\r\n </g>\r\n </g>\r\n </g>\r\n </g>\r\n <g id=\"matplotlib.axis_2\">\r\n <g id=\"ytick_1\">\r\n <g id=\"line2d_6\">\r\n <defs>\r\n <path d=\"M 0 0 \r\nL -3.5 0 \r\n\" id=\"mcfe59a5668\" style=\"stroke:#000000;stroke-width:0.8;\"/>\r\n </defs>\r\n <g>\r\n <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"26.925\" xlink:href=\"#mcfe59a5668\" y=\"10.999219\"/>\r\n </g>\r\n </g>\r\n <g id=\"text_6\">\r\n <!-- 0 -->\r\n <g transform=\"translate(13.5625 14.798437)scale(0.1 -0.1)\">\r\n <use xlink:href=\"#DejaVuSans-30\"/>\r\n </g>\r\n </g>\r\n </g>\r\n <g id=\"ytick_2\">\r\n <g id=\"line2d_7\">\r\n <g>\r\n <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"26.925\" xlink:href=\"#mcfe59a5668\" y=\"56.299219\"/>\r\n </g>\r\n </g>\r\n <g id=\"text_7\">\r\n <!-- 10 -->\r\n <g transform=\"translate(7.2 60.098437)scale(0.1 -0.1)\">\r\n <use xlink:href=\"#DejaVuSans-31\"/>\r\n <use x=\"63.623047\" xlink:href=\"#DejaVuSans-30\"/>\r\n </g>\r\n </g>\r\n </g>\r\n <g id=\"ytick_3\">\r\n <g id=\"line2d_8\">\r\n <g>\r\n <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"26.925\" xlink:href=\"#mcfe59a5668\" y=\"101.599219\"/>\r\n </g>\r\n </g>\r\n <g id=\"text_8\">\r\n <!-- 20 -->\r\n <g transform=\"translate(7.2 105.398437)scale(0.1 -0.1)\">\r\n <use xlink:href=\"#DejaVuSans-32\"/>\r\n <use x=\"63.623047\" xlink:href=\"#DejaVuSans-30\"/>\r\n </g>\r\n </g>\r\n </g>\r\n <g id=\"ytick_4\">\r\n <g id=\"line2d_9\">\r\n <g>\r\n <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"26.925\" xlink:href=\"#mcfe59a5668\" y=\"146.899219\"/>\r\n </g>\r\n </g>\r\n <g id=\"text_9\">\r\n <!-- 30 -->\r\n <g transform=\"translate(7.2 150.698437)scale(0.1 -0.1)\">\r\n <use xlink:href=\"#DejaVuSans-33\"/>\r\n <use x=\"63.623047\" xlink:href=\"#DejaVuSans-30\"/>\r\n </g>\r\n </g>\r\n </g>\r\n <g id=\"ytick_5\">\r\n <g id=\"line2d_10\">\r\n <g>\r\n <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"26.925\" xlink:href=\"#mcfe59a5668\" y=\"192.199219\"/>\r\n </g>\r\n </g>\r\n <g id=\"text_10\">\r\n <!-- 40 -->\r\n <g transform=\"translate(7.2 195.998437)scale(0.1 -0.1)\">\r\n <use xlink:href=\"#DejaVuSans-34\"/>\r\n <use x=\"63.623047\" xlink:href=\"#DejaVuSans-30\"/>\r\n </g>\r\n </g>\r\n </g>\r\n </g>\r\n <g id=\"patch_3\">\r\n <path d=\"M 26.925 226.174219 \r\nL 26.925 8.734219 \r\n\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\r\n </g>\r\n <g id=\"patch_4\">\r\n <path d=\"M 244.365 226.174219 \r\nL 244.365 8.734219 \r\n\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\r\n </g>\r\n <g id=\"patch_5\">\r\n <path d=\"M 26.925 226.174219 \r\nL 244.365 226.174219 \r\n\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\r\n </g>\r\n <g id=\"patch_6\">\r\n <path d=\"M 26.925 8.734219 \r\nL 244.365 8.734219 \r\n\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\r\n </g>\r\n </g>\r\n </g>\r\n <defs>\r\n <clipPath id=\"pb9c2e2cd6d\">\r\n <rect height=\"217.44\" width=\"217.44\" x=\"26.925\" y=\"8.734219\"/>\r\n </clipPath>\r\n </defs>\r\n</svg>\r\n", "image/png": "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\n" }, "metadata": { "needs_background": "light" } } ], "source": [ "theImage = X_train[5]\n", "afficher(theImage)\n", "print(predir(myModel, theImage))" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Epoch 1/5\n", " 880/2532 [=========>....................] - ETA: 1:01 - loss: 0.8081 - accuracy: 0.7104" ] } ], "source": [ "history = myModel.fit(X_train, Y_train_cat, epochs=epochs, validation_data=(X_test, Y_test_cat))\n", "\n", "#Affichage de l'historique de l'apprentissage\n", "plt.plot(history.history['accuracy'], label='accuracy')\n", "plt.plot(history.history['val_accuracy'], label='val_accuracy')\n", "plt.legend()\n", "plt.ylim([min(history.history['val_accuracy']+history.history['accuracy']), 1])\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "INFO:tensorflow:Assets written to: exp901\\assets\n" ] } ], "source": [ "myModel.save('exp901')" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ] }