Ce serveur Gitlab sera éteint le 30 juin 2020, pensez à migrer vos projets vers les serveurs gitlab-research.centralesupelec.fr et gitlab-student.centralesupelec.fr !

Spectrum_Keras-Multi-Cat-2007.ipynb 96 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294
{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 1. CNN"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Récupération des genres"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Permet de récupérer les labels qui seront mis dans une array"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Using TensorFlow backend.\n"
     ]
    }
   ],
   "source": [
    "import ast\n",
    "import pandas as pd\n",
    "from __future__ import absolute_import\n",
    "from __future__ import division\n",
    "from __future__ import print_function\n",
    "from keras.preprocessing.sequence import pad_sequences\n",
    "import argparse\n",
    "import sys\n",
    "import numpy as np\n",
    "import matplotlib as mpl\n",
    "import matplotlib.pyplot as plt\n",
    "import matplotlib.image as mpimg\n",
    "import tensorflow as tf\n",
    "import os\n",
    "import cv2\n",
    "from math import floor"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "list_of_eligible_spectrums = []\n",
    "for file in os.listdir(\"SpectrumImages/SpectrumImages2007\"):\n",
    "    if str(file)[-4:] == '.jpg':\n",
    "        list_of_eligible_spectrums += [file]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "{\"genres\":[{\"id\":28,\"name\":\"Action\"},{\"id\":12,\"name\":\"Adventure\"},{\"id\":16,\"name\":\"Animation\"},{\"id\":35,\"name\":\"Comedy\"},{\"id\":80,\"name\":\"Crime\"},{\"id\":99,\"name\":\"Documentary\"},{\"id\":18,\"name\":\"Drama\"},{\"id\":10751,\"name\":\"Family\"},{\"id\":14,\"name\":\"Fantasy\"},{\"id\":36,\"name\":\"History\"},{\"id\":27,\"name\":\"Horror\"},{\"id\":10402,\"name\":\"Music\"},{\"id\":9648,\"name\":\"Mystery\"},{\"id\":10749,\"name\":\"Romance\"},{\"id\":878,\"name\":\"Science Fiction\"},{\"id\":10770,\"name\":\"TV Movie\"},{\"id\":53,\"name\":\"Thriller\"},{\"id\":10752,\"name\":\"War\"},{\"id\":37,\"name\":\"Western\"}]}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [],
   "source": [
    "genres = [28, 35, 18, 99, 10749, 10752, 10402, 53, 878, 27, 9648, 80, 14, 12, 36, 10769, 16, 10751, 37, 10770]\n",
    "\n",
    "def get_genre_from_link():\n",
    "    path = \"./Link-dictionaries/Link-dictionnary2007.txt\"\n",
    "    file = open(path, \"r\").read()\n",
    "    dictyear = ast.literal_eval(file)\n",
    "    dict_inverse = {}\n",
    "    links_to_be_removed = []\n",
    "    for movie_id in dictyear.keys():\n",
    "        if dictyear[movie_id][1] != []:\n",
    "            dict_inverse[str(dictyear[movie_id][2])] = {}\n",
    "            for genre in genres:\n",
    "                if genre in dictyear[movie_id][1]:\n",
    "                    dict_inverse[str(dictyear[movie_id][2])][genre] = 1\n",
    "                else:\n",
    "                    dict_inverse[str(dictyear[movie_id][2])][genre] = 0\n",
    "        else:\n",
    "            #print(f'careful, link {dictyear[movie_id][2]} needs to be removed from the list')\n",
    "            links_to_be_removed += [dictyear[movie_id][2]]\n",
    "    return dict_inverse, links_to_be_removed\n",
    "\n",
    "def get_output_list(L):\n",
    "    dict_inverse, links_to_be_removed = get_genre_from_link()\n",
    "    eligible_links = []\n",
    "    output = []\n",
    "    for link in L:\n",
    "        link = str(link)\n",
    "        #print(dict_inverse[str(link)])\n",
    "        if link[-1] == \".\":\n",
    "            print(\"do something! Too many points.......\")\n",
    "            eligible_links += [link[:-5]]\n",
    "        elif link[:-4] not in links_to_be_removed:\n",
    "            eligible_links += [link[:-4]]\n",
    "    return dict_inverse, eligible_links\n",
    "\n",
    "\n",
    "dict_inverse, eligible_links = get_output_list(list_of_eligible_spectrums)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#for element in labels:\n",
    "#   for genre in element:\n",
    "#       if genre not in genres:\n",
    "#           genres += [genre]\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [],
   "source": [
    "eligible_links2 = []\n",
    "for link in eligible_links:\n",
    "    if link[-1] == '.':\n",
    "        eligible_links2 += [link[:-1]]\n",
    "    else:\n",
    "        eligible_links2 += [link]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#Modif pour ajouter des catégories\n",
    "trY[2][3]=1\n",
    "trY.shape\n",
    "from random import randint\n",
    "for i in range(1225):\n",
    "    rand = randint(0,19)\n",
    "    trY[i][rand] = 1\n",
    "trY[3]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Bien vérifier la taille des données !"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(1225, 20)"
      ]
     },
     "execution_count": 59,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "trY.shape"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Extraction des images"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "SpectrumImages/SpectrumImages2007/--85qsvHPaI.jpg\n",
      "SpectrumImages/SpectrumImages2007/-11tP8-hnjE.jpg\n",
      "SpectrumImages/SpectrumImages2007/-6jgkXHdNi4.jpg\n",
      "SpectrumImages/SpectrumImages2007/-75GdfTNTDU.jpg\n",
      "SpectrumImages/SpectrumImages2007/-avN0AfPrd4.jpg\n",
      "SpectrumImages/SpectrumImages2007/-B4-V7rYVNM.jpg\n",
      "SpectrumImages/SpectrumImages2007/-b6h0lsiQcw.jpg\n",
      "SpectrumImages/SpectrumImages2007/-BKH5RxmHYs.jpg\n",
      "SpectrumImages/SpectrumImages2007/-d99AgBmxyw.jpg\n",
      "SpectrumImages/SpectrumImages2007/-DCDNd5nUqk.jpg\n",
      "SpectrumImages/SpectrumImages2007/-HRkRfxfXt0.jpg\n",
      "SpectrumImages/SpectrumImages2007/-tHigCYpoOo.jpg\n",
      "SpectrumImages/SpectrumImages2007/-tMO-5sCacQ.jpg\n",
      "SpectrumImages/SpectrumImages2007/-TnX4JkM8Zc.jpg\n",
      "SpectrumImages/SpectrumImages2007/-tzgIMsPqq4.jpg\n",
      "SpectrumImages/SpectrumImages2007/-ukNZizqrrg.jpg\n",
      "SpectrumImages/SpectrumImages2007/-V2jTVP5cOg.jpg\n",
      "SpectrumImages/SpectrumImages2007/-w6duQhWuVk.jpg\n",
      "SpectrumImages/SpectrumImages2007/-yMo_ftGQvA.jpg\n",
      "SpectrumImages/SpectrumImages2007/0-DZHoxW3UY.jpg\n",
      "SpectrumImages/SpectrumImages2007/045FCkvs87c.jpg\n",
      "SpectrumImages/SpectrumImages2007/0arNIvSWfak.jpg\n",
      "SpectrumImages/SpectrumImages2007/0gIa0CEPh6I.jpg\n",
      "SpectrumImages/SpectrumImages2007/0IOXw6NHCVA.jpg\n",
      "SpectrumImages/SpectrumImages2007/0kqNGq1VVX4.jpg\n",
      "SpectrumImages/SpectrumImages2007/0kwpQG7k2zU.jpg\n",
      "SpectrumImages/SpectrumImages2007/0LHprMHPOyE.jpg\n",
      "SpectrumImages/SpectrumImages2007/0M-aGZF-TGA.jpg\n",
      "SpectrumImages/SpectrumImages2007/0mWELJ08-9g.jpg\n",
      "SpectrumImages/SpectrumImages2007/0O6YPAv1Hx8.jpg\n",
      "SpectrumImages/SpectrumImages2007/0oGGpulYsZY.jpg\n",
      "SpectrumImages/SpectrumImages2007/0P5x71CvZHM.jpg\n",
      "SpectrumImages/SpectrumImages2007/0plD1gXw9qg.jpg\n",
      "SpectrumImages/SpectrumImages2007/0PTTRQIFO7U.jpg\n",
      "SpectrumImages/SpectrumImages2007/0pVkiod6V0U.jpg\n",
      "SpectrumImages/SpectrumImages2007/0rpxP4vTX9o.jpg\n",
      "SpectrumImages/SpectrumImages2007/0RWfPy1ehDs.jpg\n",
      "SpectrumImages/SpectrumImages2007/0SXB8eSkL34.jpg\n",
      "SpectrumImages/SpectrumImages2007/0V0q_lhEa8Q.jpg\n",
      "SpectrumImages/SpectrumImages2007/0W0Wc1E8ffk.jpg\n",
      "SpectrumImages/SpectrumImages2007/0XDdo6a_UZA.jpg\n",
      "SpectrumImages/SpectrumImages2007/0y1xhFQjaDs.jpg\n",
      "SpectrumImages/SpectrumImages2007/0ZDXDvlpu6I.jpg\n",
      "SpectrumImages/SpectrumImages2007/101qM1nm2gs.jpg\n",
      "SpectrumImages/SpectrumImages2007/12wdi73Kbxk.jpg\n",
      "SpectrumImages/SpectrumImages2007/16miEJ-tKjM.jpg\n",
      "SpectrumImages/SpectrumImages2007/17syMJ295Bg.jpg\n",
      "SpectrumImages/SpectrumImages2007/1Abu6_8cYD0.jpg\n",
      "SpectrumImages/SpectrumImages2007/1bjwQgSEoyo.jpg\n",
      "SpectrumImages/SpectrumImages2007/1EAqu28Dd-M.jpg\n",
      "SpectrumImages/SpectrumImages2007/1f_Gv-Gd76I.jpg\n",
      "SpectrumImages/SpectrumImages2007/1GNwlqtv7Oc.jpg\n",
      "SpectrumImages/SpectrumImages2007/1H3Qdqk5-LI.jpg\n",
      "SpectrumImages/SpectrumImages2007/1hC_83SYs34.jpg\n",
      "SpectrumImages/SpectrumImages2007/1HZuQkITY64.jpg\n",
      "SpectrumImages/SpectrumImages2007/1KaOLDZe2GI.jpg\n",
      "SpectrumImages/SpectrumImages2007/1kjm4oXC6NA.jpg\n",
      "SpectrumImages/SpectrumImages2007/1l8JO0q0fDc.jpg\n",
      "SpectrumImages/SpectrumImages2007/1lGDBt250-o.jpg\n",
      "SpectrumImages/SpectrumImages2007/1LlazPgxKrA.jpg\n",
      "SpectrumImages/SpectrumImages2007/1nkn9C0HD6E.jpg\n",
      "SpectrumImages/SpectrumImages2007/1NtcAwY9HSw.jpg\n",
      "SpectrumImages/SpectrumImages2007/1oevR8c35Qk.jpg\n",
      "SpectrumImages/SpectrumImages2007/1OZTV7Zu2bo.jpg\n",
      "SpectrumImages/SpectrumImages2007/1QWLyi03twg.jpg\n",
      "SpectrumImages/SpectrumImages2007/1uaDma1o6VY.jpg\n",
      "SpectrumImages/SpectrumImages2007/1zhJcFgQiak.jpg\n",
      "SpectrumImages/SpectrumImages2007/1zjWNnchvN4.jpg\n",
      "SpectrumImages/SpectrumImages2007/202uOuNsgow.jpg\n",
      "SpectrumImages/SpectrumImages2007/22XGp20H-A4.jpg\n",
      "SpectrumImages/SpectrumImages2007/23QoNhfK_qg.jpg\n",
      "SpectrumImages/SpectrumImages2007/24wV5J63ecg.jpg\n",
      "SpectrumImages/SpectrumImages2007/25a42588F6A.jpg\n",
      "SpectrumImages/SpectrumImages2007/26DF79_UoPg.jpg\n",
      "SpectrumImages/SpectrumImages2007/26FBhM_pjoc.jpg\n",
      "SpectrumImages/SpectrumImages2007/28y7iMAQRDQ.jpg\n",
      "SpectrumImages/SpectrumImages2007/29u6vC7YcNA.jpg\n",
      "SpectrumImages/SpectrumImages2007/2_QQkB54Cg0.jpg\n",
      "SpectrumImages/SpectrumImages2007/2aVxJawNIO8.jpg\n",
      "SpectrumImages/SpectrumImages2007/2CrieyeMffo.jpg\n",
      "SpectrumImages/SpectrumImages2007/2e-eXJ6HgkQ.jpg\n",
      "SpectrumImages/SpectrumImages2007/2gwYwm2kA9A.jpg\n",
      "SpectrumImages/SpectrumImages2007/2k-oNOYRxnk.jpg\n"
     ]
    },
    {
     "ename": "KeyError",
     "evalue": "'2k-oNOYRxnk'",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mKeyError\u001b[0m                                  Traceback (most recent call last)",
      "\u001b[0;32m<ipython-input-35-2a9d1f202f7c>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m      4\u001b[0m     \u001b[0mimg\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mimg\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      5\u001b[0m     \u001b[0mimg\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mimg\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mreshape\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mimg\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mshape\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mimg\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mshape\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 6\u001b[0;31m     \u001b[0mdict_inverse\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mfile\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'image'\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mimg\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
      "\u001b[0;31mKeyError\u001b[0m: '2k-oNOYRxnk'"
     ]
    }
   ],
   "source": [
    "for file in eligible_links2:\n",
    "    print('SpectrumImages/SpectrumImages2007/' + file + '.jpg')\n",
    "    img = cv2.imread('SpectrumImages/SpectrumImages2007/' + file + '.jpg', 1)\n",
    "    img = img[0:1]\n",
    "    img = img.reshape((img.shape[1], img.shape[2]))\n",
    "    dict_inverse[file]['image'] = img\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 205,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "df = pd.DataFrame.from_dict(dict_inverse)\n",
    "df = df.transpose()\n",
    "df = df.reset_index(drop=True)\n",
    "#shuffling\n",
    "df = df.sample(frac=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 206,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "df2 = df.dropna(axis=0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 207,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(1563, 21)"
      ]
     },
     "execution_count": 207,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 208,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(1225, 21)"
      ]
     },
     "execution_count": 208,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df2.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 209,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>12</th>\n",
       "      <th>14</th>\n",
       "      <th>16</th>\n",
       "      <th>18</th>\n",
       "      <th>27</th>\n",
       "      <th>28</th>\n",
       "      <th>35</th>\n",
       "      <th>36</th>\n",
       "      <th>37</th>\n",
       "      <th>53</th>\n",
       "      <th>...</th>\n",
       "      <th>99</th>\n",
       "      <th>878</th>\n",
       "      <th>9648</th>\n",
       "      <th>10402</th>\n",
       "      <th>10749</th>\n",
       "      <th>10751</th>\n",
       "      <th>10752</th>\n",
       "      <th>10769</th>\n",
       "      <th>10770</th>\n",
       "      <th>image</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>1225</td>\n",
       "      <td>1225</td>\n",
       "      <td>1225</td>\n",
       "      <td>1225</td>\n",
       "      <td>1225</td>\n",
       "      <td>1225</td>\n",
       "      <td>1225</td>\n",
       "      <td>1225</td>\n",
       "      <td>1225</td>\n",
       "      <td>1225</td>\n",
       "      <td>...</td>\n",
       "      <td>1225</td>\n",
       "      <td>1225</td>\n",
       "      <td>1225</td>\n",
       "      <td>1225</td>\n",
       "      <td>1225</td>\n",
       "      <td>1225</td>\n",
       "      <td>1225</td>\n",
       "      <td>1225</td>\n",
       "      <td>1225</td>\n",
       "      <td>1225</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>unique</th>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "      <td>...</td>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "      <td>1225</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>top</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>[[3, 1, 0], [1, 2, 0], [11, 12, 10], [11, 12, ...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>freq</th>\n",
       "      <td>1103</td>\n",
       "      <td>1149</td>\n",
       "      <td>1164</td>\n",
       "      <td>631</td>\n",
       "      <td>1060</td>\n",
       "      <td>1018</td>\n",
       "      <td>856</td>\n",
       "      <td>1182</td>\n",
       "      <td>1213</td>\n",
       "      <td>993</td>\n",
       "      <td>...</td>\n",
       "      <td>1093</td>\n",
       "      <td>1155</td>\n",
       "      <td>1154</td>\n",
       "      <td>1156</td>\n",
       "      <td>1015</td>\n",
       "      <td>1139</td>\n",
       "      <td>1186</td>\n",
       "      <td>1175</td>\n",
       "      <td>1213</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>4 rows × 21 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "          12    14    16    18    27    28    35    36    37    53  \\\n",
       "count   1225  1225  1225  1225  1225  1225  1225  1225  1225  1225   \n",
       "unique     2     2     2     2     2     2     2     2     2     2   \n",
       "top        0     0     0     0     0     0     0     0     0     0   \n",
       "freq    1103  1149  1164   631  1060  1018   856  1182  1213   993   \n",
       "\n",
       "                              ...                            99   878  9648  \\\n",
       "count                         ...                          1225  1225  1225   \n",
       "unique                        ...                             2     2     2   \n",
       "top                           ...                             0     0     0   \n",
       "freq                          ...                          1093  1155  1154   \n",
       "\n",
       "        10402  10749  10751  10752  10769  10770  \\\n",
       "count    1225   1225   1225   1225   1225   1225   \n",
       "unique      2      2      2      2      2      2   \n",
       "top         0      0      0      0      0      0   \n",
       "freq     1156   1015   1139   1186   1175   1213   \n",
       "\n",
       "                                                    image  \n",
       "count                                                1225  \n",
       "unique                                               1225  \n",
       "top     [[3, 1, 0], [1, 2, 0], [11, 12, 10], [11, 12, ...  \n",
       "freq                                                    1  \n",
       "\n",
       "[4 rows x 21 columns]"
      ]
     },
     "execution_count": 209,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df2.describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 210,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "980"
      ]
     },
     "execution_count": 210,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_len = int(df2.shape[0]*0.8)\n",
    "train_len"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 211,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "train = df2.iloc[:train_len, :]\n",
    "test = df2.iloc[train_len:, :]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 212,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1019    [[0, 0, 1], [1, 2, 0], [0, 1, 0], [0, 0, 1], [...\n",
       "165     [[5, 0, 1], [1, 2, 0], [0, 6, 0], [24, 54, 25]...\n",
       "582     [[15, 16, 7], [46, 44, 36], [54, 51, 43], [53,...\n",
       "388     [[0, 1, 0], [2, 0, 0], [38, 32, 25], [66, 56, ...\n",
       "1115    [[29, 35, 34], [28, 34, 33], [28, 34, 33], [29...\n",
       "Name: image, dtype: object"
      ]
     },
     "execution_count": 212,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train['image'].head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 213,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "((980, 21), (245, 21))"
      ]
     },
     "execution_count": 213,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train.shape, test.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 214,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/soleneduchamp/anaconda3/lib/python3.6/site-packages/ipykernel_launcher.py:3: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame.\n",
      "Try using .loc[row_indexer,col_indexer] = value instead\n",
      "\n",
      "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n",
      "  This is separate from the ipykernel package so we can avoid doing imports until\n",
      "/Users/soleneduchamp/anaconda3/lib/python3.6/site-packages/ipykernel_launcher.py:4: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame.\n",
      "Try using .loc[row_indexer,col_indexer] = value instead\n",
      "\n",
      "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n",
      "  after removing the cwd from sys.path.\n"
     ]
    }
   ],
   "source": [
    "selected_genre = 18\n",
    "name = 'not' + str(selected_genre)\n",
    "train[name] = np.where(train[selected_genre] == 1, 0, 1)\n",
    "test[name] = np.where(test[selected_genre] == 1, 0, 1)\n",
    "X_train = train['image']\n",
    "Y_train = train[[selected_genre, name]]\n",
    "#Y_train = train.drop('image', 1)\n",
    "X_test = test['image']\n",
    "Y_test = test[[selected_genre, name]]\n",
    "#Y_test = test.drop('image', 1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 215,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>12</th>\n",
       "      <th>14</th>\n",
       "      <th>16</th>\n",
       "      <th>18</th>\n",
       "      <th>27</th>\n",
       "      <th>28</th>\n",
       "      <th>35</th>\n",
       "      <th>36</th>\n",
       "      <th>37</th>\n",
       "      <th>53</th>\n",
       "      <th>...</th>\n",
       "      <th>878</th>\n",
       "      <th>9648</th>\n",
       "      <th>10402</th>\n",
       "      <th>10749</th>\n",
       "      <th>10751</th>\n",
       "      <th>10752</th>\n",
       "      <th>10769</th>\n",
       "      <th>10770</th>\n",
       "      <th>image</th>\n",
       "      <th>not18</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>1019</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>[[0, 0, 1], [1, 2, 0], [0, 1, 0], [0, 0, 1], [...</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>165</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>[[5, 0, 1], [1, 2, 0], [0, 6, 0], [24, 54, 25]...</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>582</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>[[15, 16, 7], [46, 44, 36], [54, 51, 43], [53,...</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>388</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>[[0, 1, 0], [2, 0, 0], [38, 32, 25], [66, 56, ...</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1115</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>[[29, 35, 34], [28, 34, 33], [28, 34, 33], [29...</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 22 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "     12 14 16 18 27 28 35 36 37 53  ...  878 9648 10402 10749 10751 10752  \\\n",
       "1019  0  0  0  1  0  0  1  0  0  0  ...    0    0     0     0     0     0   \n",
       "165   0  0  0  0  0  0  1  0  0  0  ...    0    0     0     0     0     0   \n",
       "582   1  0  0  1  0  0  0  0  0  0  ...    0    0     0     0     0     0   \n",
       "388   1  1  0  0  0  0  1  0  0  0  ...    0    0     1     0     1     0   \n",
       "1115  0  0  0  1  0  1  0  0  0  1  ...    0    0     0     0     0     0   \n",
       "\n",
       "     10769 10770                                              image not18  \n",
       "1019     0     0  [[0, 0, 1], [1, 2, 0], [0, 1, 0], [0, 0, 1], [...     0  \n",
       "165      0     0  [[5, 0, 1], [1, 2, 0], [0, 6, 0], [24, 54, 25]...     1  \n",
       "582      0     0  [[15, 16, 7], [46, 44, 36], [54, 51, 43], [53,...     0  \n",
       "388      0     0  [[0, 1, 0], [2, 0, 0], [38, 32, 25], [66, 56, ...     1  \n",
       "1115     1     0  [[29, 35, 34], [28, 34, 33], [28, 34, 33], [29...     0  \n",
       "\n",
       "[5 rows x 22 columns]"
      ]
     },
     "execution_count": 215,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 219,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>not18</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>121</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>124</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    not18\n",
       "18       \n",
       "0     121\n",
       "1     124"
      ]
     },
     "execution_count": 219,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Y_test.groupby(selected_genre).count()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 220,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.5204081632653061"
      ]
     },
     "execution_count": 220,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "510/(510+470)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Vérifications des données"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 110,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 221,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "X_train = pad_sequences(X_train)\n",
    "X_test = pad_sequences(X_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Modèle"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 225,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Conv1D 1 : (None, 17027, 2)\n",
      "MaxP1D 1 : (None, 8513, 2)\n",
      "Conv1D 2 : (None, 8511, 4)\n",
      "MaxP1D 2 : (None, 4255, 4)\n",
      "Flatten : (None, 17020)\n",
      "Dense  2 : (None, 2)\n"
     ]
    }
   ],
   "source": [
    "from keras.models import Sequential\n",
    "from keras.layers import Dense, Activation\n",
    "from keras.layers import Conv1D, MaxPooling1D\n",
    "from keras.layers import Dropout, Average, BatchNormalization\n",
    "from keras.layers import Flatten\n",
    "\n",
    "num_classes=2\n",
    "\n",
    "#Hyperparameters\n",
    "filtersCNN1=2 #pourquoi ??\n",
    "kernelSize1=3\n",
    "\n",
    "filtersCNN2=4\n",
    "kernelSize2=3\n",
    "\n",
    "unitsFC1=1000\n",
    "unitsFC2=num_classes\n",
    "\n",
    "#defining the layers architecture\n",
    "\n",
    "model = Sequential()\n",
    "model.add(Conv1D(filtersCNN1,kernelSize1,strides=1, padding=\"valid\", activation='relu',input_shape=(17029,3)))\n",
    "print(\"Conv1D 1 : {}\".format(model.output_shape))\n",
    "model.add(MaxPooling1D(pool_size=2,padding=\"valid\"))\n",
    "print(\"MaxP1D 1 : {}\".format(model.output_shape))\n",
    "#BatchNormalization(axis=3)\n",
    "#model.add(Dropout(0.25))\n",
    "\n",
    "model.add(Conv1D(filtersCNN2,kernelSize2,strides=1, padding=\"valid\", activation='relu'))\n",
    "print(\"Conv1D 2 : {}\".format(model.output_shape))\n",
    "model.add(MaxPooling1D(pool_size=2,strides=None,padding=\"valid\"))\n",
    "print(\"MaxP1D 2 : {}\".format(model.output_shape))\n",
    "#BatchNormalization(axis=3)\n",
    "\n",
    "model.add(Flatten())\n",
    "print(\"Flatten : {}\".format(model.output_shape))\n",
    "#model.add(Dense(1000, activation='relu'))\n",
    "#print(\"Dense  1 : {}\".format(model.output_shape))\n",
    "model.add(Dense(num_classes, activation='softmax'))\n",
    "print(\"Dense  2 : {}\".format(model.output_shape))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 226,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "_________________________________________________________________\n",
      "Layer (type)                 Output Shape              Param #   \n",
      "=================================================================\n",
      "conv1d_21 (Conv1D)           (None, 17027, 2)          20        \n",
      "_________________________________________________________________\n",
      "max_pooling1d_21 (MaxPooling (None, 8513, 2)           0         \n",
      "_________________________________________________________________\n",
      "conv1d_22 (Conv1D)           (None, 8511, 4)           28        \n",
      "_________________________________________________________________\n",
      "max_pooling1d_22 (MaxPooling (None, 4255, 4)           0         \n",
      "_________________________________________________________________\n",
      "flatten_11 (Flatten)         (None, 17020)             0         \n",
      "_________________________________________________________________\n",
      "dense_11 (Dense)             (None, 2)                 34042     \n",
      "=================================================================\n",
      "Total params: 34,090\n",
      "Trainable params: 34,090\n",
      "Non-trainable params: 0\n",
      "_________________________________________________________________\n"
     ]
    }
   ],
   "source": [
    "model.summary()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Entrainement du modèle"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Train on 686 samples, validate on 294 samples\n",
      "Epoch 1/100\n",
      "686/686 [==============================] - 3s 4ms/step - loss: 4.1739 - acc: 0.5277 - val_loss: 3.3459 - val_acc: 0.5306\n",
      "Epoch 2/100\n",
      "686/686 [==============================] - 2s 3ms/step - loss: 3.2553 - acc: 0.5496 - val_loss: 2.7612 - val_acc: 0.5272\n",
      "Epoch 3/100\n",
      "686/686 [==============================] - 2s 3ms/step - loss: 2.3555 - acc: 0.5729 - val_loss: 2.0513 - val_acc: 0.5340\n",
      "Epoch 4/100\n",
      "686/686 [==============================] - 2s 3ms/step - loss: 1.9205 - acc: 0.5554 - val_loss: 1.9397 - val_acc: 0.5068\n",
      "Epoch 5/100\n",
      "686/686 [==============================] - 2s 3ms/step - loss: 1.4642 - acc: 0.5554 - val_loss: 1.5057 - val_acc: 0.5476\n",
      "Epoch 6/100\n",
      "686/686 [==============================] - 2s 3ms/step - loss: 1.2592 - acc: 0.5816 - val_loss: 1.6383 - val_acc: 0.5204\n",
      "Epoch 7/100\n",
      "686/686 [==============================] - 2s 3ms/step - loss: 1.0177 - acc: 0.6050 - val_loss: 1.2937 - val_acc: 0.5476\n",
      "Epoch 8/100\n",
      "686/686 [==============================] - 2s 3ms/step - loss: 0.7526 - acc: 0.6589 - val_loss: 1.1247 - val_acc: 0.5408\n",
      "Epoch 9/100\n",
      "686/686 [==============================] - 2s 3ms/step - loss: 0.6826 - acc: 0.6764 - val_loss: 1.0250 - val_acc: 0.5408\n",
      "Epoch 10/100\n",
      "686/686 [==============================] - 2s 3ms/step - loss: 0.7175 - acc: 0.6778 - val_loss: 1.1485 - val_acc: 0.5476\n",
      "Epoch 11/100\n",
      "686/686 [==============================] - 2s 3ms/step - loss: 0.6187 - acc: 0.6983 - val_loss: 1.0167 - val_acc: 0.5510\n",
      "Epoch 12/100\n",
      "686/686 [==============================] - 2s 3ms/step - loss: 0.5728 - acc: 0.7187 - val_loss: 0.9978 - val_acc: 0.5374\n",
      "Epoch 13/100\n",
      "686/686 [==============================] - 2s 3ms/step - loss: 0.5632 - acc: 0.7259 - val_loss: 1.0047 - val_acc: 0.5646\n",
      "Epoch 14/100\n",
      "686/686 [==============================] - 2s 3ms/step - loss: 0.5763 - acc: 0.7143 - val_loss: 1.0150 - val_acc: 0.5408\n",
      "Epoch 15/100\n",
      "686/686 [==============================] - 2s 3ms/step - loss: 0.5622 - acc: 0.7274 - val_loss: 1.0649 - val_acc: 0.5306\n",
      "Epoch 16/100\n",
      "686/686 [==============================] - 2s 3ms/step - loss: 0.5516 - acc: 0.7449 - val_loss: 0.9923 - val_acc: 0.5442\n",
      "Epoch 17/100\n",
      "686/686 [==============================] - 2s 3ms/step - loss: 0.5519 - acc: 0.7464 - val_loss: 1.1769 - val_acc: 0.5306\n",
      "Epoch 18/100\n",
      "686/686 [==============================] - 2s 3ms/step - loss: 0.5387 - acc: 0.7434 - val_loss: 1.0005 - val_acc: 0.5408\n",
      "Epoch 19/100\n",
      "686/686 [==============================] - 2s 3ms/step - loss: 0.5216 - acc: 0.7405 - val_loss: 1.0589 - val_acc: 0.5510\n",
      "Epoch 20/100\n",
      "686/686 [==============================] - 2s 3ms/step - loss: 0.5270 - acc: 0.7464 - val_loss: 1.0016 - val_acc: 0.5442\n",
      "Epoch 21/100\n",
      "686/686 [==============================] - 2s 3ms/step - loss: 0.5577 - acc: 0.7303 - val_loss: 1.0140 - val_acc: 0.5544\n",
      "Epoch 22/100\n",
      "686/686 [==============================] - 2s 3ms/step - loss: 0.5664 - acc: 0.7230 - val_loss: 1.1155 - val_acc: 0.5238\n",
      "Epoch 23/100\n",
      "686/686 [==============================] - 2s 3ms/step - loss: 0.5153 - acc: 0.7653 - val_loss: 1.0169 - val_acc: 0.5578\n",
      "Epoch 24/100\n",
      "686/686 [==============================] - 2s 3ms/step - loss: 0.5096 - acc: 0.7580 - val_loss: 1.0344 - val_acc: 0.5408\n",
      "Epoch 25/100\n",
      "686/686 [==============================] - 2s 3ms/step - loss: 0.5031 - acc: 0.7566 - val_loss: 1.0393 - val_acc: 0.5510\n",
      "Epoch 26/100\n",
      "686/686 [==============================] - 2s 4ms/step - loss: 0.5165 - acc: 0.7464 - val_loss: 1.0217 - val_acc: 0.5340\n",
      "Epoch 27/100\n",
      "686/686 [==============================] - 2s 3ms/step - loss: 0.5000 - acc: 0.7566 - val_loss: 1.0629 - val_acc: 0.5510\n",
      "Epoch 28/100\n",
      "686/686 [==============================] - 2s 3ms/step - loss: 0.5040 - acc: 0.7711 - val_loss: 1.0451 - val_acc: 0.5510\n",
      "Epoch 29/100\n",
      "686/686 [==============================] - 2s 3ms/step - loss: 0.4934 - acc: 0.7682 - val_loss: 1.0677 - val_acc: 0.5442\n",
      "Epoch 30/100\n",
      "650/686 [===========================>..] - ETA: 0s - loss: 0.4866 - acc: 0.7800"
     ]
    }
   ],
   "source": [
    "model.compile(loss='categorical_crossentropy',\n",
    "              optimizer='adam',\n",
    "              metrics=['accuracy'])\n",
    "\n",
    "history = model.fit(X_train, Y_train, epochs=100, validation_split=0.3, batch_size=50 , verbose=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 203,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x181dad8278>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\nMDOzwi+YWs13VGJ2jQAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x182d6494a8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "train, =plt.plot(history.history['acc'], label='Train set')\n",
    "val, =plt.plot(history.history['val_acc'], label='Validation set')\n",
    "plt.title('model accuracy')\n",
    "plt.ylabel('Accuracy')\n",
    "plt.xlabel('Epochs')\n",
    "plt.legend(handles=[train, val])\n",
    "plt.show()\n",
    "train, =plt.plot(history.history['loss'], label='Train set')\n",
    "val, =plt.plot(history.history['val_loss'], label='Validation set')\n",
    "plt.title('model Loss')\n",
    "plt.ylabel('Cross entropy')\n",
    "plt.xlabel('Epochs')\n",
    "plt.legend(handles=[train, val])\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "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.6.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}