{"nbformat":4,"nbformat_minor":0,"metadata":{"colab":{"name":"FINAL-ensemble_fc_predictions_v2-with-laugh-with-boost.ipynb","provenance":[],"collapsed_sections":[],"toc_visible":true},"kernelspec":{"name":"python3","display_name":"Python 3"},"accelerator":"GPU","widgets":{"application/vnd.jupyter.widget-state+json":{"71c781a6e1f949dc988c795e1cbed930":{"model_module":"@jupyter-widgets/controls","model_name":"HBoxModel","state":{"_view_name":"HBoxView","_dom_classes":[],"_model_name":"HBoxModel","_view_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_view_count":null,"_view_module_version":"1.5.0","box_style":"","layout":"IPY_MODEL_815ccf4c91104e0db1a4065a7f943725","_model_module":"@jupyter-widgets/controls","children":["IPY_MODEL_41caaab83dc44ea9923817256beeea60","IPY_MODEL_d3dd8f3c8b154cc39338fb8ad1b11e74"]}},"815ccf4c91104e0db1a4065a7f943725":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","state":{"_view_name":"LayoutView","grid_template_rows":null,"right":null,"justify_content":null,"_view_module":"@jupyter-widgets/base","overflow":null,"_model_module_version":"1.2.0","_view_count":null,"flex_flow":null,"width":null,"min_width":null,"border":null,"align_items":null,"bottom":null,"_model_module":"@jupyter-widgets/base","top":null,"grid_column":null,"overflow_y":null,"overflow_x":null,"grid_auto_flow":null,"grid_area":null,"grid_template_columns":null,"flex":null,"_model_name":"LayoutModel","justify_items":null,"grid_row":null,"max_height":null,"align_content":null,"visibility":null,"align_self":null,"height":null,"min_height":null,"padding":null,"grid_auto_rows":null,"grid_gap":null,"max_width":null,"order":null,"_view_module_version":"1.2.0","grid_template_areas":null,"object_position":null,"object_fit":null,"grid_auto_columns":null,"margin":null,"display":null,"left":null}},"41caaab83dc44ea9923817256beeea60":{"model_module":"@jupyter-widgets/controls","model_name":"FloatProgressModel","state":{"_view_name":"ProgressView","style":"IPY_MODEL_581232e286c04db4989bdbe11f119e49","_dom_classes":[],"description":"Processing 2661 examples on 2 cores: 100%","_model_name":"FloatProgressModel","bar_style":"success","max":2661,"_view_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","value":2661,"_view_count":null,"_view_module_version":"1.5.0","orientation":"horizontal","min":0,"description_tooltip":null,"_model_module":"@jupyter-widgets/controls","layout":"IPY_MODEL_2dd5f4b0fb4643cab2f7d8b2932f7d81"}},"d3dd8f3c8b154cc39338fb8ad1b11e74":{"model_module":"@jupyter-widgets/controls","model_name":"HTMLModel","state":{"_view_name":"HTMLView","style":"IPY_MODEL_6c9d548da24541aa8eada24a5b5985d6","_dom_classes":[],"description":"","_model_name":"HTMLModel","placeholder":"​","_view_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","value":" 2661/2661 [05:31&lt;00:00,  8.04it/s]","_view_count":null,"_view_module_version":"1.5.0","description_tooltip":null,"_model_module":"@jupyter-widgets/controls","layout":"IPY_MODEL_d73d30e03fd84384a2a6f5e88b8d371e"}},"581232e286c04db4989bdbe11f119e49":{"model_module":"@jupyter-widgets/controls","model_name":"ProgressStyleModel","state":{"_view_name":"StyleView","_model_name":"ProgressStyleModel","description_width":"initial","_view_module":"@jupyter-widgets/base","_model_module_version":"1.5.0","_view_count":null,"_view_module_version":"1.2.0","bar_color":null,"_model_module":"@jupyter-widgets/controls"}},"2dd5f4b0fb4643cab2f7d8b2932f7d81":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","state":{"_view_name":"LayoutView","grid_template_rows":null,"right":null,"justify_content":null,"_view_module":"@jupyter-widgets/base","overflow":null,"_model_module_version":"1.2.0","_view_count":null,"flex_flow":null,"width":null,"min_width":null,"border":null,"align_items":null,"bottom":null,"_model_module":"@jupyter-widgets/base","top":null,"grid_column":null,"overflow_y":null,"overflow_x":null,"grid_auto_flow":null,"grid_area":null,"grid_template_columns":null,"flex":null,"_model_name":"LayoutModel","justify_items":null,"grid_row":null,"max_height":null,"align_content":null,"visibility":null,"align_self":null,"height":null,"min_height":null,"padding":null,"grid_auto_rows":null,"grid_gap":null,"max_width":null,"order":null,"_view_module_version":"1.2.0","grid_template_areas":null,"object_position":null,"object_fit":null,"grid_auto_columns":null,"margin":null,"display":null,"left":null}},"6c9d548da24541aa8eada24a5b5985d6":{"model_module":"@jupyter-widgets/controls","model_name":"DescriptionStyleModel","state":{"_view_name":"StyleView","_model_name":"DescriptionStyleModel","description_width":"","_view_module":"@jupyter-widgets/base","_model_module_version":"1.5.0","_view_count":null,"_view_module_version":"1.2.0","_model_module":"@jupyter-widgets/controls"}},"d73d30e03fd84384a2a6f5e88b8d371e":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","state":{"_view_name":"LayoutView","grid_template_rows":null,"right":null,"justify_content":null,"_view_module":"@jupyter-widgets/base","overflow":null,"_model_module_version":"1.2.0","_view_count":null,"flex_flow":null,"width":null,"min_width":null,"border":null,"align_items":null,"bottom":null,"_model_module":"@jupyter-widgets/base","top":null,"grid_column":null,"overflow_y":null,"overflow_x":null,"grid_auto_flow":null,"grid_area":null,"grid_template_columns":null,"flex":null,"_model_name":"LayoutModel","justify_items":null,"grid_row":null,"max_height":null,"align_content":null,"visibility":null,"align_self":null,"height":null,"min_height":null,"padding":null,"grid_auto_rows":null,"grid_gap":null,"max_width":null,"order":null,"_view_module_version":"1.2.0","grid_template_areas":null,"object_position":null,"object_fit":null,"grid_auto_columns":null,"margin":null,"display":null,"left":null}},"db9f9863216b4616a4f8d46bbfa7c3ce":{"model_module":"@jupyter-widgets/controls","model_name":"HBoxModel","state":{"_view_name":"HBoxView","_dom_classes":[],"_model_name":"HBoxModel","_view_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_view_count":null,"_view_module_version":"1.5.0","box_style":"","layout":"IPY_MODEL_c32e02a584554cada71c0529d1eeeb58","_model_module":"@jupyter-widgets/controls","children":["IPY_MODEL_ba25bd32b1ed460aa025d3a4dbc628c1","IPY_MODEL_e8486c84c97d4db383515c5207c1790e"]}},"c32e02a584554cada71c0529d1eeeb58":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","state":{"_view_name":"LayoutView","grid_template_rows":null,"right":null,"justify_content":null,"_view_module":"@jupyter-widgets/base","overflow":null,"_model_module_version":"1.2.0","_view_count":null,"flex_flow":null,"width":null,"min_width":null,"border":null,"align_items":null,"bottom":null,"_model_module":"@jupyter-widgets/base","top":null,"grid_column":null,"overflow_y":null,"overflow_x":null,"grid_auto_flow":null,"grid_area":null,"grid_template_columns":null,"flex":null,"_model_name":"LayoutModel","justify_items":null,"grid_row":null,"max_height":null,"align_content":null,"visibility":null,"align_self":null,"height":null,"min_height":null,"padding":null,"grid_auto_rows":null,"grid_gap":null,"max_width":null,"order":null,"_view_module_version":"1.2.0","grid_template_areas":null,"object_position":null,"object_fit":null,"grid_auto_columns":null,"margin":null,"display":null,"left":null}},"ba25bd32b1ed460aa025d3a4dbc628c1":{"model_module":"@jupyter-widgets/controls","model_name":"FloatProgressModel","state":{"_view_name":"ProgressView","style":"IPY_MODEL_92799b3ca797492f83ad922eda616a88","_dom_classes":[],"description":"Processing 766 examples on 2 cores: 100%","_model_name":"FloatProgressModel","bar_style":"success","max":766,"_view_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","value":766,"_view_count":null,"_view_module_version":"1.5.0","orientation":"horizontal","min":0,"description_tooltip":null,"_model_module":"@jupyter-widgets/controls","layout":"IPY_MODEL_ea273c48ba6846508cf8c013a2018c66"}},"e8486c84c97d4db383515c5207c1790e":{"model_module":"@jupyter-widgets/controls","model_name":"HTMLModel","state":{"_view_name":"HTMLView","style":"IPY_MODEL_9f279e4610cd4e208e7e333f44474461","_dom_classes":[],"description":"","_model_name":"HTMLModel","placeholder":"​","_view_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","value":" 766/766 [02:36&lt;00:00,  4.88it/s]","_view_count":null,"_view_module_version":"1.5.0","description_tooltip":null,"_model_module":"@jupyter-widgets/controls","layout":"IPY_MODEL_1c7d408c45844205b2d85d5b3d7ba48f"}},"92799b3ca797492f83ad922eda616a88":{"model_module":"@jupyter-widgets/controls","model_name":"ProgressStyleModel","state":{"_view_name":"StyleView","_model_name":"ProgressStyleModel","description_width":"initial","_view_module":"@jupyter-widgets/base","_model_module_version":"1.5.0","_view_count":null,"_view_module_version":"1.2.0","bar_color":null,"_model_module":"@jupyter-widgets/controls"}},"ea273c48ba6846508cf8c013a2018c66":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","state":{"_view_name":"LayoutView","grid_template_rows":null,"right":null,"justify_content":null,"_view_module":"@jupyter-widgets/base","overflow":null,"_model_module_version":"1.2.0","_view_count":null,"flex_flow":null,"width":null,"min_width":null,"border":null,"align_items":null,"bottom":null,"_model_module":"@jupyter-widgets/base","top":null,"grid_column":null,"overflow_y":null,"overflow_x":null,"grid_auto_flow":null,"grid_area":null,"grid_template_columns":null,"flex":null,"_model_name":"LayoutModel","justify_items":null,"grid_row":null,"max_height":null,"align_content":null,"visibility":null,"align_self":null,"height":null,"min_height":null,"padding":null,"grid_auto_rows":null,"grid_gap":null,"max_width":null,"order":null,"_view_module_version":"1.2.0","grid_template_areas":null,"object_position":null,"object_fit":null,"grid_auto_columns":null,"margin":null,"display":null,"left":null}},"9f279e4610cd4e208e7e333f44474461":{"model_module":"@jupyter-widgets/controls","model_name":"DescriptionStyleModel","state":{"_view_name":"StyleView","_model_name":"DescriptionStyleModel","description_width":"","_view_module":"@jupyter-widgets/base","_model_module_version":"1.5.0","_view_count":null,"_view_module_version":"1.2.0","_model_module":"@jupyter-widgets/controls"}},"1c7d408c45844205b2d85d5b3d7ba48f":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","state":{"_view_name":"LayoutView","grid_template_rows":null,"right":null,"justify_content":null,"_view_module":"@jupyter-widgets/base","overflow":null,"_model_module_version":"1.2.0","_view_count":null,"flex_flow":null,"width":null,"min_width":null,"border":null,"align_items":null,"bottom":null,"_model_module":"@jupyter-widgets/base","top":null,"grid_column":null,"overflow_y":null,"overflow_x":null,"grid_auto_flow":null,"grid_area":null,"grid_template_columns":null,"flex":null,"_model_name":"LayoutModel","justify_items":null,"grid_row":null,"max_height":null,"align_content":null,"visibility":null,"align_self":null,"height":null,"min_height":null,"padding":null,"grid_auto_rows":null,"grid_gap":null,"max_width":null,"order":null,"_view_module_version":"1.2.0","grid_template_areas":null,"object_position":null,"object_fit":null,"grid_auto_columns":null,"margin":null,"display":null,"left":null}}}}},"cells":[{"cell_type":"markdown","metadata":{"id":"view-in-github","colab_type":"text"},"source":["<a href=\"https://colab.research.google.com/github/kevincong95/cs231n-emotiw/blob/master/notebooks/2.4-tj-la-ak-kc-vl-FINAL-ensemble_fc_predictions.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"]},{"cell_type":"markdown","metadata":{"id":"0rWTS99OI8l-","colab_type":"text"},"source":["## Video Sentiment Analysis in the Wild\n","### Ensembling Notebook with BOOST | FC | CS231n\n","\n","This notebook runs a basic FC classifier on the predicted outputs of each individual modality. Assumes the preprocessing has already been completed.\n","\n","### Modalities Used\n","- Scene (ResNet - three LSTM heads) [model](https://storage.googleapis.com/cs231n-emotiw/models/scene-classifier-resnet-lstm-x3.h5)\n","- Pose [model](https://storage.googleapis.com/cs231n-emotiw/models/pose-classifier-64lstm-0.01reg.h5)\n","- Audio [model](https://storage.googleapis.com/cs231n-emotiw/models/openl3-cnn-lstm-tuned-lr.h5)\n","- Image Captioning [model](https://storage.googleapis.com/cs231n-emotiw/models/sentiment-transformer_sentiment-transformer_756.pth) and [model metadata](https://storage.googleapis.com/cs231n-emotiw/models/sentiment-transformer-16.metadata.bin)\n","- Laugh [notebook](https://github.com/kevincong95/cs231n-emotiw/blob/master/notebooks/laugh_detection/laugh-vggish.ipynb)\n","\n","Val Accuracy = **64.2%**\n","\n","FC Model [model](https://storage.googleapis.com/cs231n-emotiw/models/ensemble-fc-laugh-boost-final-v2.h5)\n","\n","### Excluded Modalities\n","**NOTE:** This notebook produces a concatenated vector containing features from modalities in addition to the ones listed above but some are excluded for the FC model as we observed a decrease in performance when compared to the modalities above. \n","- Face [model](https://storage.googleapis.com/cs231n-emotiw/models/face-classifier-cp-0001.h5)\n","- VGG - single LSTM head [model](https://storage.googleapis.com/cs231n-emotiw/models/vgg19-lstm-cp-0003.h5)"]},{"cell_type":"markdown","metadata":{"id":"AKBv4jZKrhQ0","colab_type":"text"},"source":["### Copy Pre-Processed Files"]},{"cell_type":"code","metadata":{"id":"QdlpDjXpdiqz","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":34},"executionInfo":{"status":"ok","timestamp":1593061101124,"user_tz":420,"elapsed":1384,"user":{"displayName":"Tom Jin","photoUrl":"","userId":"10159799883240069996"}},"outputId":"69c30f32-cd9b-4164-b15a-f102ca4cf22c"},"source":["!ls"],"execution_count":null,"outputs":[{"output_type":"stream","text":["sample_data\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"C40EhGh9kopZ","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":357},"executionInfo":{"status":"ok","timestamp":1593061103542,"user_tz":420,"elapsed":1370,"user":{"displayName":"Tom Jin","photoUrl":"","userId":"10159799883240069996"}},"outputId":"3ab2dbcb-3bb1-4b89-b3cf-b8cde8912b18"},"source":["!nvidia-smi"],"execution_count":null,"outputs":[{"output_type":"stream","text":["Thu Jun 25 04:58:22 2020       \n","+-----------------------------------------------------------------------------+\n","| NVIDIA-SMI 450.36.06    Driver Version: 418.67       CUDA Version: 10.1     |\n","|-------------------------------+----------------------+----------------------+\n","| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |\n","| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |\n","|                               |                      |               MIG M. |\n","|===============================+======================+======================|\n","|   0  Tesla P100-PCIE...  Off  | 00000000:00:04.0 Off |                    0 |\n","| N/A   37C    P0    25W / 250W |      0MiB / 16280MiB |      0%      Default |\n","|                               |                      |                 ERR! |\n","+-------------------------------+----------------------+----------------------+\n","                                                                               \n","+-----------------------------------------------------------------------------+\n","| Processes:                                                                  |\n","|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |\n","|        ID   ID                                                   Usage      |\n","|=============================================================================|\n","|  No running processes found                                                 |\n","+-----------------------------------------------------------------------------+\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"XQnFc3BdeCVL","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":513},"executionInfo":{"status":"ok","timestamp":1592690537191,"user_tz":420,"elapsed":235759,"user":{"displayName":"Tom Jin","photoUrl":"","userId":"10159799883240069996"}},"outputId":"2a1c8c64-618c-4a6c-b729-f83849e1df83"},"source":["\n","# FULL_PATH = 'My Drive/Machine-Learning-Projects/cs231n-project/datasets/emotiw'\n","FULL_PATH = 'My Drive/cs231n-project/datasets/emotiw'\n","\n","print(\"Using final dataset...\")\n","!cp /content/drive/'$FULL_PATH'/train-final-* .\n","!cp /content/drive/'$FULL_PATH'/val-final-* .\n","\n","!wget https://storage.googleapis.com/cs231n-emotiw/data/Train_labels.txt\n","!wget https://storage.googleapis.com/cs231n-emotiw/data/Val_labels.txt\n"],"execution_count":null,"outputs":[{"output_type":"stream","text":["Go to this URL in a browser: https://accounts.google.com/o/oauth2/auth?client_id=947318989803-6bn6qk8qdgf4n4g3pfee6491hc0brc4i.apps.googleusercontent.com&redirect_uri=urn%3aietf%3awg%3aoauth%3a2.0%3aoob&response_type=code&scope=email%20https%3a%2f%2fwww.googleapis.com%2fauth%2fdocs.test%20https%3a%2f%2fwww.googleapis.com%2fauth%2fdrive%20https%3a%2f%2fwww.googleapis.com%2fauth%2fdrive.photos.readonly%20https%3a%2f%2fwww.googleapis.com%2fauth%2fpeopleapi.readonly\n","\n","Enter your authorization code:\n","··········\n","Mounted at /content/drive\n","Using final dataset...\n","--2020-06-20 22:02:14--  https://storage.googleapis.com/cs231n-emotiw/data/Train_labels.txt\n","Resolving storage.googleapis.com (storage.googleapis.com)... 64.233.189.128, 2404:6800:4008:c03::80\n","Connecting to storage.googleapis.com (storage.googleapis.com)|64.233.189.128|:443... connected.\n","HTTP request sent, awaiting response... 200 OK\n","Length: 21653 (21K) [text/plain]\n","Saving to: ‘Train_labels.txt’\n","\n","Train_labels.txt    100%[===================>]  21.15K  --.-KB/s    in 0s      \n","\n","2020-06-20 22:02:14 (99.3 MB/s) - ‘Train_labels.txt’ saved [21653/21653]\n","\n","--2020-06-20 22:02:15--  https://storage.googleapis.com/cs231n-emotiw/data/Val_labels.txt\n","Resolving storage.googleapis.com (storage.googleapis.com)... 64.233.189.128, 2404:6800:4008:c06::80\n","Connecting to storage.googleapis.com (storage.googleapis.com)|64.233.189.128|:443... connected.\n","HTTP request sent, awaiting response... 200 OK\n","Length: 6265 (6.1K) [text/plain]\n","Saving to: ‘Val_labels.txt’\n","\n","Val_labels.txt      100%[===================>]   6.12K  --.-KB/s    in 0s      \n","\n","2020-06-20 22:02:16 (52.0 MB/s) - ‘Val_labels.txt’ saved [6265/6265]\n","\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"yXxCkE_DUvEv","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":104},"outputId":"9812567a-52b0-43ce-e203-74cb990d8404"},"source":["!ls"],"execution_count":null,"outputs":[{"output_type":"stream","text":["drive\t\t       train-final-frames.zip  val-final-fer.zip\n","sample_data\t       train-final-pose.zip    val-final-frames.zip\n","train-final-audio.zip  Train_labels.txt        val-final-pose.zip\n","train-final-faces.zip  val-final-audio.zip     Val_labels.txt\n","train-final-fer.zip    val-final-faces.zip\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"sqHRPvB5Cm4F","colab_type":"code","colab":{}},"source":["# RUN THIS FOR FINAL FILES (zip includes root folder)\n","\n","!unzip train-final-audio.zip\n","!unzip train-final-faces.zip\n","!unzip train-final-frames.zip\n","!unzip train-final-pose.zip\n","!unzip -d train-final-fer train-final-fer.zip\n","\n","!unzip val-final-audio.zip\n","!unzip val-final-faces.zip\n","!unzip val-final-frames.zip\n","!unzip val-final-pose.zip\n","!unzip -d val-final-fer val-final-fer.zip\n","\n"],"execution_count":null,"outputs":[]},{"cell_type":"code","metadata":{"id":"gF6Fy4-SLJVP","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":170},"executionInfo":{"status":"ok","timestamp":1592691050508,"user_tz":420,"elapsed":3599,"user":{"displayName":"Tom Jin","photoUrl":"","userId":"10159799883240069996"}},"outputId":"87905680-7a90-4957-8a5c-23d4b0f9e198"},"source":["!ls"],"execution_count":null,"outputs":[{"output_type":"stream","text":["drive\t\t\t  train-final-frames\t  val-final-faces.zip\n","sample_data\t\t  train-final-frames.zip  val-final-fer\n","train-final-audio\t  train-final-pose\t  val-final-fer.zip\n","train-final-audio.zip\t  train-final-pose.zip\t  val-final-frames\n","train-final-captions.pkl  Train_labels.txt\t  val-final-frames.zip\n","train-final-faces\t  val-final-audio\t  val-final-pose\n","train-final-faces.zip\t  val-final-audio.zip\t  val-final-pose.zip\n","train-final-fer\t\t  val-final-captions.pkl  Val_labels.txt\n","train-final-fer.zip\t  val-final-faces\n"],"name":"stdout"}]},{"cell_type":"markdown","metadata":{"id":"0jEaDQAsS8XQ","colab_type":"text"},"source":["### Run Classifiers"]},{"cell_type":"code","metadata":{"id":"w0_gfpBjXP6S","colab_type":"code","colab":{}},"source":["%tensorflow_version 2.x"],"execution_count":null,"outputs":[]},{"cell_type":"code","metadata":{"id":"dPXBx950Xd8z","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":34},"executionInfo":{"status":"ok","timestamp":1593061444738,"user_tz":420,"elapsed":1595,"user":{"displayName":"Tom Jin","photoUrl":"","userId":"10159799883240069996"}},"outputId":"3e966e59-6423-4cc4-d0fa-90f3589ee79f"},"source":["import tensorflow\n","print(tensorflow.__version__)"],"execution_count":null,"outputs":[{"output_type":"stream","text":["2.2.0\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"pp_USHxwRAVB","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":34},"executionInfo":{"status":"ok","timestamp":1593061445517,"user_tz":420,"elapsed":2107,"user":{"displayName":"Tom Jin","photoUrl":"","userId":"10159799883240069996"}},"outputId":"d5598b6b-e77c-47c7-e65c-7f84417947b4"},"source":["!pwd"],"execution_count":null,"outputs":[{"output_type":"stream","text":["/content\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"_Nybv6fMJV4X","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":51},"executionInfo":{"status":"ok","timestamp":1593061465377,"user_tz":420,"elapsed":21530,"user":{"displayName":"Tom Jin","photoUrl":"","userId":"10159799883240069996"}},"outputId":"991026cd-79db-49a9-bca4-8bd07c038149"},"source":["import urllib\n","from getpass import getpass\n","import os\n","user = input('User name: ')\n","password = getpass('Password: ')\n","password = urllib.parse.quote(password) # your password is converted into url format\n","\n","cmd_string = 'git clone https://{0}:{1}@github.com/kevincong95/cs231n-emotiw.git'.format(user, password)\n","\n","os.system(cmd_string)\n","cmd_string, password = \"\", \"\" # removing the password from the variable"],"execution_count":null,"outputs":[{"output_type":"stream","text":["User name: tbj128\n","Password: ··········\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"Z7kRhNvrVnbt","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":51},"executionInfo":{"status":"ok","timestamp":1592980340742,"user_tz":420,"elapsed":12876,"user":{"displayName":"Tom Jin","photoUrl":"","userId":"10159799883240069996"}},"outputId":"112cc328-561c-4d2c-953f-e64c9747d55b"},"source":["!mv train-* cs231n-emotiw\n","!mv val-* cs231n-emotiw"],"execution_count":null,"outputs":[{"output_type":"stream","text":["mv: cannot stat 'train-*': No such file or directory\n","mv: cannot stat 'val-*': No such file or directory\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"tauiFf5eVtpP","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":51},"executionInfo":{"status":"ok","timestamp":1592980342470,"user_tz":420,"elapsed":14279,"user":{"displayName":"Tom Jin","photoUrl":"","userId":"10159799883240069996"}},"outputId":"34e2e143-8e02-4caf-b001-8f858e18e565"},"source":["!mv Train* cs231n-emotiw\n","!mv Val* cs231n-emotiw"],"execution_count":null,"outputs":[{"output_type":"stream","text":["mv: cannot stat 'Train*': No such file or directory\n","mv: cannot stat 'Val*': No such file or directory\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"qiVbcNhfVwa2","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":34},"executionInfo":{"status":"ok","timestamp":1592980343244,"user_tz":420,"elapsed":12548,"user":{"displayName":"Tom Jin","photoUrl":"","userId":"10159799883240069996"}},"outputId":"9a8bc85c-a5c1-4e1f-ca9d-dc9c4a7e1f81"},"source":["!pwd"],"execution_count":null,"outputs":[{"output_type":"stream","text":["/content\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"hPM9Vm7gVxuR","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":34},"executionInfo":{"status":"ok","timestamp":1593061466498,"user_tz":420,"elapsed":14327,"user":{"displayName":"Tom Jin","photoUrl":"","userId":"10159799883240069996"}},"outputId":"9bd291d2-a67a-4fe4-8b7e-1b643f7c44a6"},"source":["import os\n","os.chdir('/content/cs231n-emotiw')\n","!pwd"],"execution_count":null,"outputs":[{"output_type":"stream","text":["/content/cs231n-emotiw\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"oxC5BZIRKyrq","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":632},"executionInfo":{"status":"ok","timestamp":1593061472155,"user_tz":420,"elapsed":16478,"user":{"displayName":"Tom Jin","photoUrl":"","userId":"10159799883240069996"}},"outputId":"75e6acd2-72ac-4d65-ed84-b70d3ada50ed"},"source":["!pip install pytorch-transformers"],"execution_count":null,"outputs":[{"output_type":"stream","text":["Collecting pytorch-transformers\n","\u001b[?25l  Downloading https://files.pythonhosted.org/packages/a3/b7/d3d18008a67e0b968d1ab93ad444fc05699403fa662f634b2f2c318a508b/pytorch_transformers-1.2.0-py3-none-any.whl (176kB)\n","\u001b[K     |████████████████████████████████| 184kB 3.4MB/s \n","\u001b[?25hRequirement already satisfied: regex in /usr/local/lib/python3.6/dist-packages (from pytorch-transformers) (2019.12.20)\n","Requirement already satisfied: boto3 in /usr/local/lib/python3.6/dist-packages (from pytorch-transformers) (1.14.5)\n","Requirement already satisfied: numpy in /usr/local/lib/python3.6/dist-packages (from pytorch-transformers) (1.18.5)\n","Requirement already satisfied: requests in /usr/local/lib/python3.6/dist-packages (from pytorch-transformers) (2.23.0)\n","Requirement already satisfied: torch>=1.0.0 in /usr/local/lib/python3.6/dist-packages (from pytorch-transformers) (1.5.1+cu101)\n","Collecting sacremoses\n","\u001b[?25l  Downloading https://files.pythonhosted.org/packages/7d/34/09d19aff26edcc8eb2a01bed8e98f13a1537005d31e95233fd48216eed10/sacremoses-0.0.43.tar.gz (883kB)\n","\u001b[K     |████████████████████████████████| 890kB 8.6MB/s \n","\u001b[?25hRequirement already satisfied: tqdm in /usr/local/lib/python3.6/dist-packages (from pytorch-transformers) (4.41.1)\n","Collecting sentencepiece\n","\u001b[?25l  Downloading https://files.pythonhosted.org/packages/d4/a4/d0a884c4300004a78cca907a6ff9a5e9fe4f090f5d95ab341c53d28cbc58/sentencepiece-0.1.91-cp36-cp36m-manylinux1_x86_64.whl (1.1MB)\n","\u001b[K     |████████████████████████████████| 1.1MB 17.0MB/s \n","\u001b[?25hRequirement already satisfied: jmespath<1.0.0,>=0.7.1 in /usr/local/lib/python3.6/dist-packages (from boto3->pytorch-transformers) (0.10.0)\n","Requirement already satisfied: s3transfer<0.4.0,>=0.3.0 in /usr/local/lib/python3.6/dist-packages (from boto3->pytorch-transformers) (0.3.3)\n","Requirement already satisfied: botocore<1.18.0,>=1.17.5 in /usr/local/lib/python3.6/dist-packages (from boto3->pytorch-transformers) (1.17.5)\n","Requirement already satisfied: chardet<4,>=3.0.2 in /usr/local/lib/python3.6/dist-packages (from requests->pytorch-transformers) (3.0.4)\n","Requirement already satisfied: idna<3,>=2.5 in /usr/local/lib/python3.6/dist-packages (from requests->pytorch-transformers) (2.9)\n","Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.6/dist-packages (from requests->pytorch-transformers) (2020.4.5.2)\n","Requirement already satisfied: urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 in /usr/local/lib/python3.6/dist-packages (from requests->pytorch-transformers) (1.24.3)\n","Requirement already satisfied: future in /usr/local/lib/python3.6/dist-packages (from torch>=1.0.0->pytorch-transformers) (0.16.0)\n","Requirement already satisfied: six in /usr/local/lib/python3.6/dist-packages (from sacremoses->pytorch-transformers) (1.12.0)\n","Requirement already satisfied: click in /usr/local/lib/python3.6/dist-packages (from sacremoses->pytorch-transformers) (7.1.2)\n","Requirement already satisfied: joblib in /usr/local/lib/python3.6/dist-packages (from sacremoses->pytorch-transformers) (0.15.1)\n","Requirement already satisfied: python-dateutil<3.0.0,>=2.1 in /usr/local/lib/python3.6/dist-packages (from botocore<1.18.0,>=1.17.5->boto3->pytorch-transformers) (2.8.1)\n","Requirement already satisfied: docutils<0.16,>=0.10 in /usr/local/lib/python3.6/dist-packages (from botocore<1.18.0,>=1.17.5->boto3->pytorch-transformers) (0.15.2)\n","Building wheels for collected packages: sacremoses\n","  Building wheel for sacremoses (setup.py) ... \u001b[?25l\u001b[?25hdone\n","  Created wheel for sacremoses: filename=sacremoses-0.0.43-cp36-none-any.whl size=893260 sha256=20809d1e9e8974e576c67497eb62ae2c0e2836c4bfc42d7d8074fd8524334765\n","  Stored in directory: /root/.cache/pip/wheels/29/3c/fd/7ce5c3f0666dab31a50123635e6fb5e19ceb42ce38d4e58f45\n","Successfully built sacremoses\n","Installing collected packages: sacremoses, sentencepiece, pytorch-transformers\n","Successfully installed pytorch-transformers-1.2.0 sacremoses-0.0.43 sentencepiece-0.1.91\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"9xwIeRF_x40m","colab_type":"code","colab":{}},"source":["# Create the concatenated input layer to feed into FC\n","\n","from src.classifiers.audio_classifier import AudioClassifier\n","from src.classifiers.frames_classifier import FramesClassifier\n","from src.classifiers.pose_classifier import PoseClassifier\n","from src.classifiers.face_classifier import FaceClassifier\n","from src.classifiers.image_captioning_classifier import ImageCaptioningClassifier, FineTuningConfig\n","from src.classifiers.utils import get_num_samples\n","import numpy as np\n","\n","IS_TINY = False\n","def run_classifier(layers_to_extract, audio_folder='train-final-audio', frames_folder='train-final-frames', pose_folder='train-final-pose', face_folder='train-final-fer', image_caption_pkl=\"train-final-captions.pkl\", image_caption_prefix=\"train_\", labels_file=\"Train_labels.txt\"):\n","    audio_classifier = AudioClassifier(audio_folder, model_location='https://storage.googleapis.com/cs231n-emotiw/models/openl3-cnn-lstm-tuned-lr.h5', is_test=False)\n","    frames_classifier = FramesClassifier(frames_folder, model_location='https://storage.googleapis.com/cs231n-emotiw/models/scene-classifier-resnet-lstm-x3.h5', is_test=False)\n","    frames_classifier_vgg = FramesClassifier(frames_folder, location_prefix=\"vgg\", model_location='https://storage.googleapis.com/cs231n-emotiw/models/vgg19-lstm-cp-0003.h5', is_test=False, batch_size=4)\n","    pose_classifier = PoseClassifier(pose_folder, model_location='https://storage.googleapis.com/cs231n-emotiw/models/pose-classifier-64lstm-0.01reg.h5', is_test=False)\n","    face_classifier = FaceClassifier(face_folder, model_location='/content/drive/My Drive/cs231n-project/models/face-classifier-playground/cp-0001.h5', is_test=False)\n","    image_captioning_classifier = ImageCaptioningClassifier(image_caption_pkl, image_caption_prefix, model_metadata_location=\"https://storage.googleapis.com/cs231n-emotiw/models/sentiment-transformer-16.metadata.bin\", model_location='https://storage.googleapis.com/cs231n-emotiw/models/sentiment-transformer_sentiment-transformer_756.pth', is_test=False)\n","    \n","    # classifiers = [audio_classifier, frames_classifier, pose_classifier] # face_classifier]\n","    classifiers = [audio_classifier, frames_classifier, frames_classifier_vgg, pose_classifier, face_classifier, image_captioning_classifier]\n","    # classifiers = [frames_classifier_vgg]\n","    \n","    sample_to_true_label = {}\n","    with open(labels_file) as f:\n","        l = 0\n","        for line in f:\n","            if l == 0:\n","                # Skip headers\n","                l += 1\n","                continue\n","            line_arr = line.split(\" \")\n","            sample_to_true_label[line_arr[0].strip()] = int(line_arr[1].strip()) - 1 # subtract one to make labels from 0 to 2\n","            l += 1\n","\n","    classifier_outputs = []\n","    classifier_samples = []\n","    classifier_dim_sizes = []\n","    output_dim_size = 0\n","    num_samples = 0\n","    sample_to_row = {}\n","\n","    for i, classifier in enumerate(classifiers):\n","        output, samples = classifier.predict(layers_to_extract[i])\n","        output_dim_size += output.shape[1]\n","        classifier_dim_sizes.append(output.shape[1])\n","        num_samples = len(samples)\n","        classifier_outputs.append(output)\n","        classifier_samples.append(samples)\n","\n","\n","    X_train = np.zeros(shape=(num_samples, output_dim_size))\n","    y_train = []\n","\n","    print(f\"Number of samples: {num_samples}\")\n","    print(f\"Dim shapes: \")\n","    print(classifier_dim_sizes)\n","\n","    for i, sample in enumerate(classifier_samples[0]):\n","        sample_to_row[sample] = i\n","        y_train.append(sample_to_true_label[sample])\n","\n","    last_classifier_index = 0\n","    for c, output in enumerate(classifier_outputs):\n","        samples = classifier_samples[c]\n","        print(len(output))\n","        for i, row in enumerate(output):\n","            sample = samples[i]\n","            X_train[sample_to_row[sample], last_classifier_index:last_classifier_index+classifier_dim_sizes[c]] += row\n","        last_classifier_index += classifier_dim_sizes[c]\n","\n","    return X_train, tf.keras.utils.to_categorical(y_train, num_classes=3)\n","\n","\n","\n"],"execution_count":null,"outputs":[]},{"cell_type":"code","metadata":{"id":"1VGA1fl2pNvE","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":1000,"referenced_widgets":["71c781a6e1f949dc988c795e1cbed930","815ccf4c91104e0db1a4065a7f943725","41caaab83dc44ea9923817256beeea60","d3dd8f3c8b154cc39338fb8ad1b11e74","581232e286c04db4989bdbe11f119e49","2dd5f4b0fb4643cab2f7d8b2932f7d81","6c9d548da24541aa8eada24a5b5985d6","d73d30e03fd84384a2a6f5e88b8d371e","db9f9863216b4616a4f8d46bbfa7c3ce","c32e02a584554cada71c0529d1eeeb58","ba25bd32b1ed460aa025d3a4dbc628c1","e8486c84c97d4db383515c5207c1790e","92799b3ca797492f83ad922eda616a88","ea273c48ba6846508cf8c013a2018c66","9f279e4610cd4e208e7e333f44474461","1c7d408c45844205b2d85d5b3d7ba48f"]},"executionInfo":{"status":"ok","timestamp":1592703526102,"user_tz":420,"elapsed":661289,"user":{"displayName":"Tom Jin","photoUrl":"","userId":"10159799883240069996"}},"outputId":"e435e8ea-241c-4e11-d9ef-b60855f0d3d6"},"source":["import tensorflow as tf\n","# For each classifier, extract the specific desired layer \n","# (refer to the model summary for the layer names)\n","\n","layers_to_extract = [\n","    \"dense\", # Audio\n","    \"concatenate_5\", # ResNet\n","    \"global_average_pooling3d_1\", # VGG\n","    \"bidirectional_1\", # Pose\n","    \"dense_27\", # FER\n","    \"classification_head\" # Image Caption\n","]\n","\n","prefix = \"final\"\n","if IS_TINY:\n","    prefix = \"tiny\"\n","\n","# X_train, y_train = run_classifier(layers_to_extract, audio_folder=f\"train-{prefix}-audio\", frames_folder=f\"train-{prefix}-frames\", pose_folder=f\"train-{prefix}-pose\", face_folder=f\"train-{prefix}-fer\" ,labels_file=\"Train_labels.txt\")\n","# X_valid, y_valid = run_classifier(layers_to_extract, audio_folder=f\"val-{prefix}-audio\", frames_folder=f\"val-{prefix}-frames\", pose_folder=f\"val-{prefix}-pose\", face_folder=f\"val-{prefix}-fer\" , labels_file=\"Val_labels.txt\")\n","\n","\n","X_train, y_train = run_classifier(layers_to_extract, audio_folder=f\"train-{prefix}-audio\", frames_folder=f\"train-{prefix}-frames\", pose_folder=f\"train-{prefix}-pose\" , face_folder=f\"train-{prefix}-fer\" , image_caption_pkl=\"train-final-captions.pkl\", image_caption_prefix=\"train_\", labels_file=\"Train_labels.txt\")\n","X_valid, y_valid = run_classifier(layers_to_extract, audio_folder=f\"val-{prefix}-audio\", frames_folder=f\"val-{prefix}-frames\", pose_folder=f\"val-{prefix}-pose\" , face_folder=f\"val-{prefix}-fer\" , image_caption_pkl=\"val-final-captions.pkl\", image_caption_prefix=\"val_\", labels_file=\"Val_labels.txt\")\n","\n","print(X_train.shape)\n","print(y_train.shape)"],"execution_count":null,"outputs":[{"output_type":"stream","text":["AudioClassifier created with audio_folder = train-final-audio , is_test = False , model_location = https://storage.googleapis.com/cs231n-emotiw/models/openl3-cnn-lstm-tuned-lr.h5\n","WARNING:tensorflow:Layer lstm will not use cuDNN kernel since it doesn't meet the cuDNN kernel criteria. It will use generic GPU kernel as fallback when running on GPU\n","WARNING:tensorflow:Layer lstm will not use cuDNN kernel since it doesn't meet the cuDNN kernel criteria. It will use generic GPU kernel as fallback when running on GPU\n","WARNING:tensorflow:Layer lstm will not use cuDNN kernel since it doesn't meet the cuDNN kernel criteria. It will use generic GPU kernel as fallback when running on GPU\n","FramesClassifier created with frames_folder = train-final-frames , is_test = False , model_location = https://storage.googleapis.com/cs231n-emotiw/models/scene-classifier-resnet-lstm-x3.h5\n","FramesClassifier created with frames_folder = train-final-frames , is_test = False , model_location = https://storage.googleapis.com/cs231n-emotiw/models/vgg19-lstm-cp-0003.h5\n","PoseClassifier created with pose_folder = train-final-pose , is_test = False , model_location = https://storage.googleapis.com/cs231n-emotiw/models/pose-classifier-64lstm-0.01reg.h5\n","load data\n","FacesClassifier created with face_folder = train-final-fer , is_test = False , model_location = /content/drive/My Drive/cs231n-project/models/face-classifier-playground/cp-0001.h5\n","ImageCaptioningClassifier created with caption_pkl = train-final-captions.pkl , is_test = False , model_location = https://storage.googleapis.com/cs231n-emotiw/models/sentiment-transformer_sentiment-transformer_756.pth\n","Skipping unzipping files as input is a folder\n","Customizing model by returning layer dense\n","Skipping unzipping files as input is a folder\n","Found 2661 frames belonging to 2661 videos belonging to 3 classes.\n","Min frames determined to be 7\n","Customizing model by returning layer concatenate_5\n","Skipping unzipping files as input is a folder\n","Found 2661 frames belonging to 2661 videos belonging to 3 classes.\n","Min frames determined to be 7\n","Customizing model by returning layer global_average_pooling3d_1\n","Skipping unzipping files as input is a folder\n","['3', '2', '1']\n","Found 2661 frames belonging to 2661 videos belonging to 3 classes.\n","Min frames determined to be 7\n","Customizing model by returning layer bidirectional_1\n"],"name":"stdout"},{"output_type":"stream","text":["/content/cs231n-emotiw/src/generators/pose_generator.py:135: RuntimeWarning: invalid value encountered in double_scalars\n","  x_new.append((lx[i] - origin_x) / len_x)\n","/content/cs231n-emotiw/src/generators/pose_generator.py:136: RuntimeWarning: invalid value encountered in double_scalars\n","  x_new.append((ly[i] - origin_y) / len_y)\n"],"name":"stderr"},{"output_type":"stream","text":["Customizing model by returning layer dense_27\n"],"name":"stdout"},{"output_type":"display_data","data":{"application/vnd.jupyter.widget-view+json":{"model_id":"71c781a6e1f949dc988c795e1cbed930","version_minor":0,"version_major":2},"text/plain":["HBox(children=(FloatProgress(value=0.0, description='Processing 2661 examples on 2 cores', max=2661.0, style=P…"]},"metadata":{"tags":[]}},{"output_type":"stream","text":["\n","Number of samples: 2661\n","Dim shapes: \n","[32, 30, 40, 128, 8, 16]\n","2661\n","2661\n","2661\n","2661\n","2661\n","2661\n","AudioClassifier created with audio_folder = val-final-audio , is_test = False , model_location = https://storage.googleapis.com/cs231n-emotiw/models/openl3-cnn-lstm-tuned-lr.h5\n","WARNING:tensorflow:Layer lstm will not use cuDNN kernel since it doesn't meet the cuDNN kernel criteria. It will use generic GPU kernel as fallback when running on GPU\n","WARNING:tensorflow:Layer lstm will not use cuDNN kernel since it doesn't meet the cuDNN kernel criteria. It will use generic GPU kernel as fallback when running on GPU\n","WARNING:tensorflow:Layer lstm will not use cuDNN kernel since it doesn't meet the cuDNN kernel criteria. It will use generic GPU kernel as fallback when running on GPU\n","FramesClassifier created with frames_folder = val-final-frames , is_test = False , model_location = https://storage.googleapis.com/cs231n-emotiw/models/scene-classifier-resnet-lstm-x3.h5\n","FramesClassifier created with frames_folder = val-final-frames , is_test = False , model_location = https://storage.googleapis.com/cs231n-emotiw/models/vgg19-lstm-cp-0003.h5\n","PoseClassifier created with pose_folder = val-final-pose , is_test = False , model_location = https://storage.googleapis.com/cs231n-emotiw/models/pose-classifier-64lstm-0.01reg.h5\n","load data\n","FacesClassifier created with face_folder = val-final-fer , is_test = False , model_location = /content/drive/My Drive/cs231n-project/models/face-classifier-playground/cp-0001.h5\n","ImageCaptioningClassifier created with caption_pkl = val-final-captions.pkl , is_test = False , model_location = https://storage.googleapis.com/cs231n-emotiw/models/sentiment-transformer_sentiment-transformer_756.pth\n","Skipping unzipping files as input is a folder\n","Customizing model by returning layer dense\n","Skipping unzipping files as input is a folder\n","Found 766 frames belonging to 766 videos belonging to 3 classes.\n","Min frames determined to be 7\n","Customizing model by returning layer concatenate_5\n","Skipping unzipping files as input is a folder\n","Found 766 frames belonging to 766 videos belonging to 3 classes.\n","Min frames determined to be 7\n","Customizing model by returning layer global_average_pooling3d_1\n","Skipping unzipping files as input is a folder\n","['3', '2', '1']\n","Found 766 frames belonging to 766 videos belonging to 3 classes.\n","Min frames determined to be 7\n","Customizing model by returning layer bidirectional_1\n"],"name":"stdout"},{"output_type":"stream","text":["/content/cs231n-emotiw/src/generators/pose_generator.py:135: RuntimeWarning: invalid value encountered in double_scalars\n","  x_new.append((lx[i] - origin_x) / len_x)\n","/content/cs231n-emotiw/src/generators/pose_generator.py:136: RuntimeWarning: invalid value encountered in double_scalars\n","  x_new.append((ly[i] - origin_y) / len_y)\n"],"name":"stderr"},{"output_type":"stream","text":["Customizing model by returning layer dense_27\n"],"name":"stdout"},{"output_type":"display_data","data":{"application/vnd.jupyter.widget-view+json":{"model_id":"db9f9863216b4616a4f8d46bbfa7c3ce","version_minor":0,"version_major":2},"text/plain":["HBox(children=(FloatProgress(value=0.0, description='Processing 766 examples on 2 cores', max=766.0, style=Pro…"]},"metadata":{"tags":[]}},{"output_type":"stream","text":["\n","Number of samples: 766\n","Dim shapes: \n","[32, 30, 40, 128, 8, 16]\n","766\n","766\n","766\n","766\n","766\n","766\n","(2661, 254)\n","(2661, 3)\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"kXNhfFvFho1Q","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":295},"outputId":"d6a8b8c7-224d-484e-b907-57dd86d0bd8c"},"source":["!ls"],"execution_count":null,"outputs":[{"output_type":"stream","text":[" data\t\t\t\t\t     train-final-frames\n"," LICENSE\t\t\t\t     train-final-frames.zip\n"," models\t\t\t\t\t     train-final-pose\n"," notebooks\t\t\t\t     train-final-pose.zip\n"," README.md\t\t\t\t     Train_labels.txt\n"," reports\t\t\t\t     val-final-audio\n"," requirements-predictions.txt\t\t     val-final-audio.zip\n"," requirements.txt\t\t\t     val-final-faces\n","'Screen Shot 2020-05-26 at 8.53.32 PM.png'   val-final-faces.zip\n"," src\t\t\t\t\t     val-final-fer\n"," train-final-audio\t\t\t     val-final-fer.zip\n"," train-final-audio.zip\t\t\t     val-final-frames\n"," train-final-faces\t\t\t     val-final-frames.zip\n"," train-final-faces.zip\t\t\t     val-final-pose\n"," train-final-fer\t\t\t     val-final-pose.zip\n"," train-final-fer.zip\t\t\t     Val_labels.txt\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"G0zv6L6hhzsP","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":102},"executionInfo":{"status":"ok","timestamp":1592703596350,"user_tz":420,"elapsed":7264,"user":{"displayName":"Tom Jin","photoUrl":"","userId":"10159799883240069996"}},"outputId":"e5ae6b5c-4d00-405d-8233-b7590b7f3a24"},"source":["!rm -rf ensemble-scene-scene-pose-audio-face-caption-v1\n","!mkdir ensemble-scene-scene-pose-audio-face-caption-v1\n","np.save(\"ensemble-scene-scene-pose-audio-face-caption-v1/X_train.npy\", X_train)\n","np.save(\"ensemble-scene-scene-pose-audio-face-caption-v1/y_train.npy\", y_train)\n","np.save(\"ensemble-scene-scene-pose-audio-face-caption-v1/X_valid.npy\", X_valid)\n","np.save(\"ensemble-scene-scene-pose-audio-face-caption-v1/y_valid.npy\", y_valid)\n","!zip -r ensemble-scene-scene-pose-audio-face-caption-v1.zip ensemble-scene-scene-pose-audio-face-caption-v1\n","# !cp ensemble-scene-pose-audio-v1.zip ../drive/'My Drive/Machine-Learning-Projects'/cs231n-project/datasets/emotiw\n","!cp ensemble-scene-scene-pose-audio-face-caption-v1.zip ../drive/'My Drive'/cs231n-project/datasets/emotiw\n"],"execution_count":null,"outputs":[{"output_type":"stream","text":["updating: ensemble-scene-scene-pose-audio-face-caption-v1/ (stored 0%)\n","updating: ensemble-scene-scene-pose-audio-face-caption-v1/X_train.npy (deflated 49%)\n","updating: ensemble-scene-scene-pose-audio-face-caption-v1/y_valid.npy (deflated 96%)\n","updating: ensemble-scene-scene-pose-audio-face-caption-v1/y_train.npy (deflated 97%)\n","updating: ensemble-scene-scene-pose-audio-face-caption-v1/X_valid.npy (deflated 49%)\n"],"name":"stdout"}]},{"cell_type":"markdown","metadata":{"id":"xGS2rrUIZ_YX","colab_type":"text"},"source":["## START HERE IF YOU DON'T WANT TO REMAKE THE CONCAT ABOVE"]},{"cell_type":"code","metadata":{"id":"a3uocKM6CN7a","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":124},"executionInfo":{"status":"ok","timestamp":1593132734048,"user_tz":240,"elapsed":15832,"user":{"displayName":"Leila Abdelrahman","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GiiOBijfsdVdWn4yrdWM-_fgxn37DQ4bPiUdT7W=s64","userId":"10595688673230464384"}},"outputId":"5a18de99-613c-47b6-c596-e9c10ac1769c"},"source":["from google.colab import drive\n","drive.mount('/content/drive')"],"execution_count":null,"outputs":[{"output_type":"stream","text":["Go to this URL in a browser: https://accounts.google.com/o/oauth2/auth?client_id=947318989803-6bn6qk8qdgf4n4g3pfee6491hc0brc4i.apps.googleusercontent.com&redirect_uri=urn%3aietf%3awg%3aoauth%3a2.0%3aoob&response_type=code&scope=email%20https%3a%2f%2fwww.googleapis.com%2fauth%2fdocs.test%20https%3a%2f%2fwww.googleapis.com%2fauth%2fdrive%20https%3a%2f%2fwww.googleapis.com%2fauth%2fdrive.photos.readonly%20https%3a%2f%2fwww.googleapis.com%2fauth%2fpeopleapi.readonly\n","\n","Enter your authorization code:\n","··········\n","Mounted at /content/drive\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"EkbMvFKG4IvD","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":72},"executionInfo":{"status":"ok","timestamp":1593131280791,"user_tz":240,"elapsed":4129,"user":{"displayName":"Leila Abdelrahman","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GiiOBijfsdVdWn4yrdWM-_fgxn37DQ4bPiUdT7W=s64","userId":"10595688673230464384"}},"outputId":"475c9e7f-fa13-46bb-83d7-ed9daf09518d"},"source":["!cp ../drive/'My Drive'/cs231n-project/datasets/emotiw/train-final-audio.zip .\n","!unzip -q -d train-final-audio train-final-audio.zip\n"],"execution_count":null,"outputs":[{"output_type":"stream","text":["cp: cannot stat '../drive/My Drive/cs231n-project/datasets/emotiw/train-final-audio.zip': No such file or directory\n","unzip:  cannot find or open train-final-audio.zip, train-final-audio.zip.zip or train-final-audio.zip.ZIP.\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"4t07onWM4QIZ","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":187},"executionInfo":{"status":"ok","timestamp":1593061756804,"user_tz":420,"elapsed":982,"user":{"displayName":"Tom Jin","photoUrl":"","userId":"10159799883240069996"}},"outputId":"c40cb00a-50ae-47ef-f548-aafee9c347d3"},"source":["!ls train-final-audio/train-final-audio/audio-pickle | head"],"execution_count":null,"outputs":[{"output_type":"stream","text":["10_10.mp4-openl3.pkl\n","101_10.mp4-openl3.pkl\n","101_11.mp4-openl3.pkl\n","101_12.mp4-openl3.pkl\n","101_13.mp4-openl3.pkl\n","101_14.mp4-openl3.pkl\n","101_15.mp4-openl3.pkl\n","101_16.mp4-openl3.pkl\n","101_17.mp4-openl3.pkl\n","101_18.mp4-openl3.pkl\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"t74F7g-72k8U","colab_type":"code","colab":{}},"source":["!cp /content/drive/'My Drive/Machine-Learning-Projects'/cs231n-project/datasets/emotiw/train-final-laugh-prob.pkl .\n","!cp /content/drive/'My Drive/Machine-Learning-Projects'/cs231n-project/datasets/emotiw/val-final-laugh-prob.pkl ."],"execution_count":null,"outputs":[]},{"cell_type":"code","metadata":{"id":"I_XuLCf_3SzK","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":52},"executionInfo":{"status":"ok","timestamp":1593132740617,"user_tz":240,"elapsed":1772,"user":{"displayName":"Leila Abdelrahman","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GiiOBijfsdVdWn4yrdWM-_fgxn37DQ4bPiUdT7W=s64","userId":"10595688673230464384"}},"outputId":"998b023f-9e91-42d6-e074-d042c82d07ad"},"source":["import pickle\n","train_vid_to_laugh = {}\n","val_vid_to_laugh = {}\n","train_laugh_vec = []\n","val_laugh_vec = []\n","with open('train-final-laugh-prob.pkl', 'rb') as handle:\n","    train_laugh_obj = pickle.load(handle)\n","    i = 0\n","    for vid in train_laugh_obj[\"vids\"]:\n","        train_vid_to_laugh[vid] = train_laugh_obj[\"actual_preds\"][i]\n","        i += 1\n","    \n","    for vid in sorted(train_laugh_obj[\"vids\"]):\n","        train_laugh_vec.append(train_vid_to_laugh[vid])\n","\n","import pickle\n","with open('val-final-laugh-prob.pkl', 'rb') as handle:\n","    val_laugh_obj = pickle.load(handle)\n","    i = 0\n","    for vid in val_laugh_obj[\"vids\"]:\n","        val_vid_to_laugh[vid] = val_laugh_obj[\"actual_preds\"][i]\n","        i += 1\n","    for vid in sorted(val_laugh_obj[\"vids\"]):\n","        val_laugh_vec.append(val_vid_to_laugh[vid])\n","\n","print(len(train_laugh_vec))\n","print(len(val_laugh_vec))"],"execution_count":null,"outputs":[{"output_type":"stream","text":["2661\n","766\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"SvJo_G-jp8Au","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":139},"executionInfo":{"status":"ok","timestamp":1593132744178,"user_tz":240,"elapsed":3676,"user":{"displayName":"Leila Abdelrahman","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GiiOBijfsdVdWn4yrdWM-_fgxn37DQ4bPiUdT7W=s64","userId":"10595688673230464384"}},"outputId":"03e2279f-c5a2-4d0a-c3e6-0ad01db42635"},"source":["import numpy as np\n","\n","!cp /content/drive/'My Drive/Machine-Learning-Projects'/cs231n-project/datasets/emotiw/ensemble-scene-scene-pose-audio-face-caption-v1.zip .\n","!unzip ensemble-scene-scene-pose-audio-face-caption-v1.zip\n","\n","X_train = np.load(\"ensemble-scene-scene-pose-audio-face-caption-v1/X_train.npy\")\n","y_train = np.load(\"ensemble-scene-scene-pose-audio-face-caption-v1/y_train.npy\")\n","X_valid = np.load(\"ensemble-scene-scene-pose-audio-face-caption-v1/X_valid.npy\")\n","y_valid = np.load(\"ensemble-scene-scene-pose-audio-face-caption-v1/y_valid.npy\")\n","X_train.shape"],"execution_count":null,"outputs":[{"output_type":"stream","text":["Archive:  ensemble-scene-scene-pose-audio-face-caption-v1.zip\n","   creating: ensemble-scene-scene-pose-audio-face-caption-v1/\n","  inflating: ensemble-scene-scene-pose-audio-face-caption-v1/X_train.npy  \n","  inflating: ensemble-scene-scene-pose-audio-face-caption-v1/y_valid.npy  \n","  inflating: ensemble-scene-scene-pose-audio-face-caption-v1/y_train.npy  \n","  inflating: ensemble-scene-scene-pose-audio-face-caption-v1/X_valid.npy  \n"],"name":"stdout"},{"output_type":"execute_result","data":{"text/plain":["(2661, 254)"]},"metadata":{"tags":[]},"execution_count":4}]},{"cell_type":"code","metadata":{"id":"bRqCC6cr5xvS","colab_type":"code","colab":{}},"source":["# Adding laughter probability as an additional dimension\n","train_laugh_vec = np.expand_dims(train_laugh_vec, 1)\n","val_laugh_vec = np.expand_dims(val_laugh_vec, 1)\n","X_train = np.hstack((X_train, train_laugh_vec))\n","X_valid = np.hstack((X_valid, val_laugh_vec))"],"execution_count":null,"outputs":[]},{"cell_type":"code","metadata":{"id":"OatM9hSd6utC","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":35},"executionInfo":{"status":"ok","timestamp":1593132744179,"user_tz":240,"elapsed":1628,"user":{"displayName":"Leila Abdelrahman","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GiiOBijfsdVdWn4yrdWM-_fgxn37DQ4bPiUdT7W=s64","userId":"10595688673230464384"}},"outputId":"ad91b451-d37a-48ed-d091-48c932af2e7b"},"source":["X_train.shape"],"execution_count":null,"outputs":[{"output_type":"execute_result","data":{"text/plain":["(2661, 255)"]},"metadata":{"tags":[]},"execution_count":6}]},{"cell_type":"code","metadata":{"id":"y8rAjjncdrrJ","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":1000},"executionInfo":{"status":"ok","timestamp":1593110857874,"user_tz":240,"elapsed":20599,"user":{"displayName":"Leila Abdelrahman","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GiiOBijfsdVdWn4yrdWM-_fgxn37DQ4bPiUdT7W=s64","userId":"10595688673230464384"}},"outputId":"77aaaf2d-5af5-4b2c-e0bc-0f04cfd25cac"},"source":["#\n","# CONFIGURATION\n","#\n","# Define any constants for the model here\n","#\n","\n","MODEL_NAME = \"ensemble-scene-scene-pose-audio-face-caption-laugh-for-boost-NORMALIZED-v2\"\n","\n","from pathlib import Path\n","import tensorflow as tf\n","import matplotlib.pyplot as plt\n","\n","sizes = [32, 30, 40, 128, 8, 16, 1]\n","\n","# # UNCOMMENT IF EXCLUDING FER, IMAGE CAP, AND VGG\n","# mask = []\n","# for x in range(sum(sizes)):\n","#     if x >= 32 and x < 62:\n","#         mask.append(False)\n","#     elif x < 230:\n","#         mask.append(True)\n","#     else:\n","#         mask.append(False)\n","\n","# # UNCOMMENT IF EXCLUDING FER, IMAGE CAP, POSE, AND RESNET\n","# mask = []\n","# for x in range(sum(sizes)):\n","#     if x >= 62 and x < 102:\n","#         mask.append(False)\n","#     elif x < 62:\n","#         mask.append(True)\n","#     else:\n","#         mask.append(False)\n","  \n","# # UNCOMMENT IF EXCLUDING FER, AND VGG\n","# mask = []\n","# for x in range(sum(sizes)):\n","#     if x >= 30 and x < 62:\n","#         mask.append(False)\n","#     elif x < 230:\n","#         mask.append(True)\n","#     elif x >= 238:\n","#         mask.append(True)\n","#     else:\n","#         mask.append(False)\n","\n","# UNCOMMENT IF EXCLUDING FER, AND RESNET [best]\n","mask = []\n","for x in range(sum(sizes)):\n","    if x >= 62 and x < 102:\n","        mask.append(False)\n","    elif x < 230:\n","        mask.append(True)\n","    elif x >= 238:\n","        mask.append(True)\n","    else:\n","        mask.append(False)\n","\n","# # UNCOMMENT IF EXCLUDING FER, IMAGE CAP, AND RESNET [best]\n","# mask = []\n","# for x in range(sum(sizes)):\n","#     if x >= 62 and x < 102:\n","#         mask.append(False)\n","#     elif x < 230:\n","#         mask.append(True)\n","#     else:\n","#         mask.append(False)\n","\n","# UNCOMMENT IF EXCLUDING FER AND IMAGE CAP\n","# mask = []\n","# for x in range(sum(sizes)):\n","#     if x < 230:\n","#         mask.append(True)\n","#     else:\n","#         mask.append(False)\n","\n","# # UNCOMMENT IF EXCLUDING FER\n","# mask = []\n","# for x in range(sum(sizes)):\n","#     if x < 230:\n","#         mask.append(True)\n","#     elif x >= 238:\n","#         mask.append(True)\n","#     else:\n","#         mask.append(False)\n","\n","\n","def build_model():\n","    def create_model(inputs):\n","        # x = tf.keras.layers.Dense(hp.Int('units', min_value=8, max_value=128, step=8), activation='relu', kernel_regularizer=tf.keras.regularizers.l2())(inputs)\n","        # x = tf.keras.layers.Dense(8, activation='relu')(inputs)\n","        # x = tf.keras.layers.Dropout(0.3)(x)\n","        x = tf.keras.layers.BatchNormalization()(inputs)\n","        # x = tf.keras.layers.Dense(64, activation='relu')(inputs)\n","        # x = tf.keras.layers.Dropout(0.2)(x)\n","        # x = tf.keras.layers.Dense(32, activation='relu', kernel_regularizer=tf.keras.regularizers.l2(0.001))(x)\n","        x = tf.keras.layers.Dense(64, activation='relu', kernel_regularizer=tf.keras.regularizers.l2(0.02))(x)\n","        x = tf.keras.layers.Dense(3, activation='softmax', kernel_regularizer=tf.keras.regularizers.l2(0.02))(x)\n","\n","        model = tf.keras.Model(inputs=inputs, outputs=x)\n","        model.compile(optimizer=tf.keras.optimizers.Adam(lr=0.001),\n","                      loss = 'categorical_crossentropy',\n","                      metrics=['accuracy'])\n","        return model\n","\n","    # inputs = tf.keras.Input(shape=(X_train.shape[1]))\n","    inputs = tf.keras.Input(shape=(np.count_nonzero(mask)))\n","    model = create_model(inputs)\n","    # model.summary()\n","    return model\n","\n","Path(f\"/content/drive/My Drive/Machine-Learning-Models/cs231n-project/models/{MODEL_NAME}\").mkdir(parents=True, exist_ok=True)\n","checkpoint_path = \"/content/drive/Machine-Learning-Models/My Drive/cs231n-project/models/\" + MODEL_NAME + \"/cp-{epoch:04d}.h5\"\n","cp_callback = tf.keras.callbacks.ModelCheckpoint(\n","    filepath=checkpoint_path, \n","    verbose=1,\n","    save_weights_only=False,\n","    save_best_only=False,\n","    period=1\n",")\n","model = build_model()\n","\n","import pickle\n","history = model.fit(\n","          x=X_train_norm,\n","          y=y_train,\n","          epochs=50,\n","          callbacks=[cp_callback],\n","          validation_data=(X_valid_norm, y_valid)\n",")\n","\n"],"execution_count":null,"outputs":[{"output_type":"stream","text":["WARNING:tensorflow:`period` argument is deprecated. Please use `save_freq` to specify the frequency in number of batches seen.\n","Epoch 1/50\n","76/84 [==========================>...] - ETA: 0s - loss: 2.0792 - accuracy: 0.7775\n","Epoch 00001: saving model to /content/drive/Machine-Learning-Models/My Drive/cs231n-project/models/ensemble-scene-scene-pose-audio-face-caption-laugh-for-boost-NORMALIZED-v2/cp-0001.h5\n","84/84 [==============================] - 1s 6ms/step - loss: 2.0254 - accuracy: 0.7828 - val_loss: 1.9451 - val_accuracy: 0.5405\n","Epoch 2/50\n","78/84 [==========================>...] - ETA: 0s - loss: 1.1612 - accuracy: 0.8193\n","Epoch 00002: saving model to /content/drive/Machine-Learning-Models/My Drive/cs231n-project/models/ensemble-scene-scene-pose-audio-face-caption-laugh-for-boost-NORMALIZED-v2/cp-0002.h5\n","84/84 [==============================] - 0s 4ms/step - loss: 1.1467 - accuracy: 0.8204 - val_loss: 1.4388 - val_accuracy: 0.5418\n","Epoch 3/50\n","77/84 [==========================>...] - ETA: 0s - loss: 0.8365 - accuracy: 0.8283\n","Epoch 00003: saving model to /content/drive/Machine-Learning-Models/My Drive/cs231n-project/models/ensemble-scene-scene-pose-audio-face-caption-laugh-for-boost-NORMALIZED-v2/cp-0003.h5\n","84/84 [==============================] - 0s 5ms/step - loss: 0.8228 - accuracy: 0.8320 - val_loss: 1.2258 - val_accuracy: 0.5483\n","Epoch 4/50\n","80/84 [===========================>..] - ETA: 0s - loss: 0.6805 - accuracy: 0.8332\n","Epoch 00004: saving model to /content/drive/Machine-Learning-Models/My Drive/cs231n-project/models/ensemble-scene-scene-pose-audio-face-caption-laugh-for-boost-NORMALIZED-v2/cp-0004.h5\n","84/84 [==============================] - 0s 4ms/step - loss: 0.6799 - accuracy: 0.8328 - val_loss: 1.1075 - val_accuracy: 0.5483\n","Epoch 5/50\n","78/84 [==========================>...] - ETA: 0s - loss: 0.6182 - accuracy: 0.8301\n","Epoch 00005: saving model to /content/drive/Machine-Learning-Models/My Drive/cs231n-project/models/ensemble-scene-scene-pose-audio-face-caption-laugh-for-boost-NORMALIZED-v2/cp-0005.h5\n","84/84 [==============================] - 0s 4ms/step - loss: 0.6261 - accuracy: 0.8260 - val_loss: 1.0540 - val_accuracy: 0.5705\n","Epoch 6/50\n","71/84 [========================>.....] - ETA: 0s - loss: 0.5893 - accuracy: 0.8266\n","Epoch 00006: saving model to /content/drive/Machine-Learning-Models/My Drive/cs231n-project/models/ensemble-scene-scene-pose-audio-face-caption-laugh-for-boost-NORMALIZED-v2/cp-0006.h5\n","84/84 [==============================] - 0s 5ms/step - loss: 0.5878 - accuracy: 0.8256 - val_loss: 1.0200 - val_accuracy: 0.5757\n","Epoch 7/50\n","80/84 [===========================>..] - ETA: 0s - loss: 0.5766 - accuracy: 0.8207\n","Epoch 00007: saving model to /content/drive/Machine-Learning-Models/My Drive/cs231n-project/models/ensemble-scene-scene-pose-audio-face-caption-laugh-for-boost-NORMALIZED-v2/cp-0007.h5\n","84/84 [==============================] - 0s 5ms/step - loss: 0.5778 - accuracy: 0.8189 - val_loss: 1.0048 - val_accuracy: 0.5744\n","Epoch 8/50\n","78/84 [==========================>...] - ETA: 0s - loss: 0.5564 - accuracy: 0.8261\n","Epoch 00008: saving model to /content/drive/Machine-Learning-Models/My Drive/cs231n-project/models/ensemble-scene-scene-pose-audio-face-caption-laugh-for-boost-NORMALIZED-v2/cp-0008.h5\n","84/84 [==============================] - 0s 5ms/step - loss: 0.5602 - accuracy: 0.8241 - val_loss: 1.0384 - val_accuracy: 0.5888\n","Epoch 9/50\n","79/84 [===========================>..] - ETA: 0s - loss: 0.5465 - accuracy: 0.8339\n","Epoch 00009: saving model to /content/drive/Machine-Learning-Models/My Drive/cs231n-project/models/ensemble-scene-scene-pose-audio-face-caption-laugh-for-boost-NORMALIZED-v2/cp-0009.h5\n","84/84 [==============================] - 0s 4ms/step - loss: 0.5443 - accuracy: 0.8346 - val_loss: 1.0466 - val_accuracy: 0.5757\n","Epoch 10/50\n","77/84 [==========================>...] - ETA: 0s - loss: 0.5469 - accuracy: 0.8243\n","Epoch 00010: saving model to /content/drive/Machine-Learning-Models/My Drive/cs231n-project/models/ensemble-scene-scene-pose-audio-face-caption-laugh-for-boost-NORMALIZED-v2/cp-0010.h5\n","84/84 [==============================] - 0s 4ms/step - loss: 0.5470 - accuracy: 0.8226 - val_loss: 1.0367 - val_accuracy: 0.5875\n","Epoch 11/50\n","78/84 [==========================>...] - ETA: 0s - loss: 0.5417 - accuracy: 0.8293\n","Epoch 00011: saving model to /content/drive/Machine-Learning-Models/My Drive/cs231n-project/models/ensemble-scene-scene-pose-audio-face-caption-laugh-for-boost-NORMALIZED-v2/cp-0011.h5\n","84/84 [==============================] - 0s 4ms/step - loss: 0.5451 - accuracy: 0.8279 - val_loss: 1.0580 - val_accuracy: 0.5679\n","Epoch 12/50\n","80/84 [===========================>..] - ETA: 0s - loss: 0.5293 - accuracy: 0.8371\n","Epoch 00012: saving model to /content/drive/Machine-Learning-Models/My Drive/cs231n-project/models/ensemble-scene-scene-pose-audio-face-caption-laugh-for-boost-NORMALIZED-v2/cp-0012.h5\n","84/84 [==============================] - 0s 4ms/step - loss: 0.5344 - accuracy: 0.8354 - val_loss: 1.0143 - val_accuracy: 0.5862\n","Epoch 13/50\n","78/84 [==========================>...] - ETA: 0s - loss: 0.5381 - accuracy: 0.8329\n","Epoch 00013: saving model to /content/drive/Machine-Learning-Models/My Drive/cs231n-project/models/ensemble-scene-scene-pose-audio-face-caption-laugh-for-boost-NORMALIZED-v2/cp-0013.h5\n","84/84 [==============================] - 0s 5ms/step - loss: 0.5348 - accuracy: 0.8346 - val_loss: 1.0442 - val_accuracy: 0.5888\n","Epoch 14/50\n","78/84 [==========================>...] - ETA: 0s - loss: 0.5277 - accuracy: 0.8337\n","Epoch 00014: saving model to /content/drive/Machine-Learning-Models/My Drive/cs231n-project/models/ensemble-scene-scene-pose-audio-face-caption-laugh-for-boost-NORMALIZED-v2/cp-0014.h5\n","84/84 [==============================] - 0s 4ms/step - loss: 0.5299 - accuracy: 0.8350 - val_loss: 1.0621 - val_accuracy: 0.5770\n","Epoch 15/50\n","80/84 [===========================>..] - ETA: 0s - loss: 0.5223 - accuracy: 0.8328\n","Epoch 00015: saving model to /content/drive/Machine-Learning-Models/My Drive/cs231n-project/models/ensemble-scene-scene-pose-audio-face-caption-laugh-for-boost-NORMALIZED-v2/cp-0015.h5\n","84/84 [==============================] - 0s 4ms/step - loss: 0.5204 - accuracy: 0.8331 - val_loss: 1.0344 - val_accuracy: 0.5901\n","Epoch 16/50\n","80/84 [===========================>..] - ETA: 0s - loss: 0.5269 - accuracy: 0.8250\n","Epoch 00016: saving model to /content/drive/Machine-Learning-Models/My Drive/cs231n-project/models/ensemble-scene-scene-pose-audio-face-caption-laugh-for-boost-NORMALIZED-v2/cp-0016.h5\n","84/84 [==============================] - 0s 5ms/step - loss: 0.5282 - accuracy: 0.8245 - val_loss: 1.0393 - val_accuracy: 0.5692\n","Epoch 17/50\n","79/84 [===========================>..] - ETA: 0s - loss: 0.5264 - accuracy: 0.8303\n","Epoch 00017: saving model to /content/drive/Machine-Learning-Models/My Drive/cs231n-project/models/ensemble-scene-scene-pose-audio-face-caption-laugh-for-boost-NORMALIZED-v2/cp-0017.h5\n","84/84 [==============================] - 0s 4ms/step - loss: 0.5251 - accuracy: 0.8324 - val_loss: 1.0648 - val_accuracy: 0.5705\n","Epoch 18/50\n","79/84 [===========================>..] - ETA: 0s - loss: 0.5320 - accuracy: 0.8347\n","Epoch 00018: saving model to /content/drive/Machine-Learning-Models/My Drive/cs231n-project/models/ensemble-scene-scene-pose-audio-face-caption-laugh-for-boost-NORMALIZED-v2/cp-0018.h5\n","84/84 [==============================] - 0s 4ms/step - loss: 0.5380 - accuracy: 0.8320 - val_loss: 1.0429 - val_accuracy: 0.5888\n","Epoch 19/50\n","78/84 [==========================>...] - ETA: 0s - loss: 0.5344 - accuracy: 0.8253\n","Epoch 00019: saving model to /content/drive/Machine-Learning-Models/My Drive/cs231n-project/models/ensemble-scene-scene-pose-audio-face-caption-laugh-for-boost-NORMALIZED-v2/cp-0019.h5\n","84/84 [==============================] - 0s 4ms/step - loss: 0.5296 - accuracy: 0.8271 - val_loss: 1.0363 - val_accuracy: 0.5770\n","Epoch 20/50\n","76/84 [==========================>...] - ETA: 0s - loss: 0.5128 - accuracy: 0.8359\n","Epoch 00020: saving model to /content/drive/Machine-Learning-Models/My Drive/cs231n-project/models/ensemble-scene-scene-pose-audio-face-caption-laugh-for-boost-NORMALIZED-v2/cp-0020.h5\n","84/84 [==============================] - 0s 5ms/step - loss: 0.5276 - accuracy: 0.8286 - val_loss: 1.0666 - val_accuracy: 0.5783\n","Epoch 21/50\n","78/84 [==========================>...] - ETA: 0s - loss: 0.5160 - accuracy: 0.8373\n","Epoch 00021: saving model to /content/drive/Machine-Learning-Models/My Drive/cs231n-project/models/ensemble-scene-scene-pose-audio-face-caption-laugh-for-boost-NORMALIZED-v2/cp-0021.h5\n","84/84 [==============================] - 0s 4ms/step - loss: 0.5172 - accuracy: 0.8380 - val_loss: 1.0734 - val_accuracy: 0.5836\n","Epoch 22/50\n","77/84 [==========================>...] - ETA: 0s - loss: 0.5234 - accuracy: 0.8291\n","Epoch 00022: saving model to /content/drive/Machine-Learning-Models/My Drive/cs231n-project/models/ensemble-scene-scene-pose-audio-face-caption-laugh-for-boost-NORMALIZED-v2/cp-0022.h5\n","84/84 [==============================] - 0s 4ms/step - loss: 0.5227 - accuracy: 0.8305 - val_loss: 1.0309 - val_accuracy: 0.5822\n","Epoch 23/50\n","80/84 [===========================>..] - ETA: 0s - loss: 0.5234 - accuracy: 0.8297\n","Epoch 00023: saving model to /content/drive/Machine-Learning-Models/My Drive/cs231n-project/models/ensemble-scene-scene-pose-audio-face-caption-laugh-for-boost-NORMALIZED-v2/cp-0023.h5\n","84/84 [==============================] - 0s 4ms/step - loss: 0.5264 - accuracy: 0.8279 - val_loss: 1.0009 - val_accuracy: 0.5914\n","Epoch 24/50\n","81/84 [===========================>..] - ETA: 0s - loss: 0.5213 - accuracy: 0.8237\n","Epoch 00024: saving model to /content/drive/Machine-Learning-Models/My Drive/cs231n-project/models/ensemble-scene-scene-pose-audio-face-caption-laugh-for-boost-NORMALIZED-v2/cp-0024.h5\n","84/84 [==============================] - 0s 4ms/step - loss: 0.5183 - accuracy: 0.8260 - val_loss: 1.0251 - val_accuracy: 0.5927\n","Epoch 25/50\n","78/84 [==========================>...] - ETA: 0s - loss: 0.5193 - accuracy: 0.8325\n","Epoch 00025: saving model to /content/drive/Machine-Learning-Models/My Drive/cs231n-project/models/ensemble-scene-scene-pose-audio-face-caption-laugh-for-boost-NORMALIZED-v2/cp-0025.h5\n","84/84 [==============================] - 0s 4ms/step - loss: 0.5172 - accuracy: 0.8335 - val_loss: 0.9831 - val_accuracy: 0.5901\n","Epoch 26/50\n","76/84 [==========================>...] - ETA: 0s - loss: 0.5054 - accuracy: 0.8413\n","Epoch 00026: saving model to /content/drive/Machine-Learning-Models/My Drive/cs231n-project/models/ensemble-scene-scene-pose-audio-face-caption-laugh-for-boost-NORMALIZED-v2/cp-0026.h5\n","84/84 [==============================] - 0s 5ms/step - loss: 0.5052 - accuracy: 0.8410 - val_loss: 1.0416 - val_accuracy: 0.5953\n","Epoch 27/50\n","74/84 [=========================>....] - ETA: 0s - loss: 0.5175 - accuracy: 0.8315\n","Epoch 00027: saving model to /content/drive/Machine-Learning-Models/My Drive/cs231n-project/models/ensemble-scene-scene-pose-audio-face-caption-laugh-for-boost-NORMALIZED-v2/cp-0027.h5\n","84/84 [==============================] - 0s 5ms/step - loss: 0.5127 - accuracy: 0.8328 - val_loss: 1.0484 - val_accuracy: 0.5849\n","Epoch 28/50\n","80/84 [===========================>..] - ETA: 0s - loss: 0.5218 - accuracy: 0.8328\n","Epoch 00028: saving model to /content/drive/Machine-Learning-Models/My Drive/cs231n-project/models/ensemble-scene-scene-pose-audio-face-caption-laugh-for-boost-NORMALIZED-v2/cp-0028.h5\n","84/84 [==============================] - 0s 4ms/step - loss: 0.5233 - accuracy: 0.8313 - val_loss: 1.0075 - val_accuracy: 0.6044\n","Epoch 29/50\n","79/84 [===========================>..] - ETA: 0s - loss: 0.5153 - accuracy: 0.8307\n","Epoch 00029: saving model to /content/drive/Machine-Learning-Models/My Drive/cs231n-project/models/ensemble-scene-scene-pose-audio-face-caption-laugh-for-boost-NORMALIZED-v2/cp-0029.h5\n","84/84 [==============================] - 0s 4ms/step - loss: 0.5133 - accuracy: 0.8313 - val_loss: 1.0260 - val_accuracy: 0.5901\n","Epoch 30/50\n","74/84 [=========================>....] - ETA: 0s - loss: 0.5187 - accuracy: 0.8383\n","Epoch 00030: saving model to /content/drive/Machine-Learning-Models/My Drive/cs231n-project/models/ensemble-scene-scene-pose-audio-face-caption-laugh-for-boost-NORMALIZED-v2/cp-0030.h5\n","84/84 [==============================] - 0s 5ms/step - loss: 0.5202 - accuracy: 0.8362 - val_loss: 0.9918 - val_accuracy: 0.5875\n","Epoch 31/50\n","77/84 [==========================>...] - ETA: 0s - loss: 0.5180 - accuracy: 0.8324\n","Epoch 00031: saving model to /content/drive/Machine-Learning-Models/My Drive/cs231n-project/models/ensemble-scene-scene-pose-audio-face-caption-laugh-for-boost-NORMALIZED-v2/cp-0031.h5\n","84/84 [==============================] - 0s 4ms/step - loss: 0.5184 - accuracy: 0.8343 - val_loss: 1.0264 - val_accuracy: 0.5966\n","Epoch 32/50\n","81/84 [===========================>..] - ETA: 0s - loss: 0.5117 - accuracy: 0.8333\n","Epoch 00032: saving model to /content/drive/Machine-Learning-Models/My Drive/cs231n-project/models/ensemble-scene-scene-pose-audio-face-caption-laugh-for-boost-NORMALIZED-v2/cp-0032.h5\n","84/84 [==============================] - 0s 5ms/step - loss: 0.5132 - accuracy: 0.8328 - val_loss: 1.0630 - val_accuracy: 0.5809\n","Epoch 33/50\n","76/84 [==========================>...] - ETA: 0s - loss: 0.5212 - accuracy: 0.8285\n","Epoch 00033: saving model to /content/drive/Machine-Learning-Models/My Drive/cs231n-project/models/ensemble-scene-scene-pose-audio-face-caption-laugh-for-boost-NORMALIZED-v2/cp-0033.h5\n","84/84 [==============================] - 0s 4ms/step - loss: 0.5171 - accuracy: 0.8313 - val_loss: 1.0193 - val_accuracy: 0.5862\n","Epoch 34/50\n","78/84 [==========================>...] - ETA: 0s - loss: 0.5084 - accuracy: 0.8361\n","Epoch 00034: saving model to /content/drive/Machine-Learning-Models/My Drive/cs231n-project/models/ensemble-scene-scene-pose-audio-face-caption-laugh-for-boost-NORMALIZED-v2/cp-0034.h5\n","84/84 [==============================] - 0s 5ms/step - loss: 0.5097 - accuracy: 0.8362 - val_loss: 1.0356 - val_accuracy: 0.5862\n","Epoch 35/50\n","76/84 [==========================>...] - ETA: 0s - loss: 0.5155 - accuracy: 0.8306\n","Epoch 00035: saving model to /content/drive/Machine-Learning-Models/My Drive/cs231n-project/models/ensemble-scene-scene-pose-audio-face-caption-laugh-for-boost-NORMALIZED-v2/cp-0035.h5\n","84/84 [==============================] - 0s 4ms/step - loss: 0.5110 - accuracy: 0.8324 - val_loss: 1.0190 - val_accuracy: 0.5875\n","Epoch 36/50\n","81/84 [===========================>..] - ETA: 0s - loss: 0.5127 - accuracy: 0.8349\n","Epoch 00036: saving model to /content/drive/Machine-Learning-Models/My Drive/cs231n-project/models/ensemble-scene-scene-pose-audio-face-caption-laugh-for-boost-NORMALIZED-v2/cp-0036.h5\n","84/84 [==============================] - 0s 5ms/step - loss: 0.5167 - accuracy: 0.8343 - val_loss: 1.0401 - val_accuracy: 0.5849\n","Epoch 37/50\n","77/84 [==========================>...] - ETA: 0s - loss: 0.5170 - accuracy: 0.8336\n","Epoch 00037: saving model to /content/drive/Machine-Learning-Models/My Drive/cs231n-project/models/ensemble-scene-scene-pose-audio-face-caption-laugh-for-boost-NORMALIZED-v2/cp-0037.h5\n","84/84 [==============================] - 0s 5ms/step - loss: 0.5097 - accuracy: 0.8358 - val_loss: 1.0564 - val_accuracy: 0.5927\n","Epoch 38/50\n","79/84 [===========================>..] - ETA: 0s - loss: 0.5092 - accuracy: 0.8358\n","Epoch 00038: saving model to /content/drive/Machine-Learning-Models/My Drive/cs231n-project/models/ensemble-scene-scene-pose-audio-face-caption-laugh-for-boost-NORMALIZED-v2/cp-0038.h5\n","84/84 [==============================] - 0s 4ms/step - loss: 0.5124 - accuracy: 0.8343 - val_loss: 1.0130 - val_accuracy: 0.5875\n","Epoch 39/50\n","74/84 [=========================>....] - ETA: 0s - loss: 0.5081 - accuracy: 0.8383\n","Epoch 00039: saving model to /content/drive/Machine-Learning-Models/My Drive/cs231n-project/models/ensemble-scene-scene-pose-audio-face-caption-laugh-for-boost-NORMALIZED-v2/cp-0039.h5\n","84/84 [==============================] - 0s 5ms/step - loss: 0.5084 - accuracy: 0.8380 - val_loss: 1.0024 - val_accuracy: 0.5914\n","Epoch 40/50\n","76/84 [==========================>...] - ETA: 0s - loss: 0.5093 - accuracy: 0.8384\n","Epoch 00040: saving model to /content/drive/Machine-Learning-Models/My Drive/cs231n-project/models/ensemble-scene-scene-pose-audio-face-caption-laugh-for-boost-NORMALIZED-v2/cp-0040.h5\n","84/84 [==============================] - 0s 5ms/step - loss: 0.5078 - accuracy: 0.8384 - val_loss: 1.0048 - val_accuracy: 0.5992\n","Epoch 41/50\n","78/84 [==========================>...] - ETA: 0s - loss: 0.5068 - accuracy: 0.8377\n","Epoch 00041: saving model to /content/drive/Machine-Learning-Models/My Drive/cs231n-project/models/ensemble-scene-scene-pose-audio-face-caption-laugh-for-boost-NORMALIZED-v2/cp-0041.h5\n","84/84 [==============================] - 0s 4ms/step - loss: 0.5099 - accuracy: 0.8373 - val_loss: 1.0152 - val_accuracy: 0.5888\n","Epoch 42/50\n","77/84 [==========================>...] - ETA: 0s - loss: 0.5183 - accuracy: 0.8300\n","Epoch 00042: saving model to /content/drive/Machine-Learning-Models/My Drive/cs231n-project/models/ensemble-scene-scene-pose-audio-face-caption-laugh-for-boost-NORMALIZED-v2/cp-0042.h5\n","84/84 [==============================] - 0s 4ms/step - loss: 0.5130 - accuracy: 0.8328 - val_loss: 1.0116 - val_accuracy: 0.5875\n","Epoch 43/50\n","73/84 [=========================>....] - ETA: 0s - loss: 0.5018 - accuracy: 0.8425\n","Epoch 00043: saving model to /content/drive/Machine-Learning-Models/My Drive/cs231n-project/models/ensemble-scene-scene-pose-audio-face-caption-laugh-for-boost-NORMALIZED-v2/cp-0043.h5\n","84/84 [==============================] - 0s 5ms/step - loss: 0.5043 - accuracy: 0.8403 - val_loss: 1.0325 - val_accuracy: 0.5796\n","Epoch 44/50\n","76/84 [==========================>...] - ETA: 0s - loss: 0.5027 - accuracy: 0.8335\n","Epoch 00044: saving model to /content/drive/Machine-Learning-Models/My Drive/cs231n-project/models/ensemble-scene-scene-pose-audio-face-caption-laugh-for-boost-NORMALIZED-v2/cp-0044.h5\n","84/84 [==============================] - 0s 5ms/step - loss: 0.5082 - accuracy: 0.8328 - val_loss: 1.0260 - val_accuracy: 0.5901\n","Epoch 45/50\n","81/84 [===========================>..] - ETA: 0s - loss: 0.4995 - accuracy: 0.8395\n","Epoch 00045: saving model to /content/drive/Machine-Learning-Models/My Drive/cs231n-project/models/ensemble-scene-scene-pose-audio-face-caption-laugh-for-boost-NORMALIZED-v2/cp-0045.h5\n","84/84 [==============================] - 0s 4ms/step - loss: 0.5006 - accuracy: 0.8384 - val_loss: 1.0452 - val_accuracy: 0.5875\n","Epoch 46/50\n","80/84 [===========================>..] - ETA: 0s - loss: 0.4969 - accuracy: 0.8367\n","Epoch 00046: saving model to /content/drive/Machine-Learning-Models/My Drive/cs231n-project/models/ensemble-scene-scene-pose-audio-face-caption-laugh-for-boost-NORMALIZED-v2/cp-0046.h5\n","84/84 [==============================] - 0s 4ms/step - loss: 0.4953 - accuracy: 0.8392 - val_loss: 1.0188 - val_accuracy: 0.5979\n","Epoch 47/50\n","78/84 [==========================>...] - ETA: 0s - loss: 0.5010 - accuracy: 0.8341\n","Epoch 00047: saving model to /content/drive/Machine-Learning-Models/My Drive/cs231n-project/models/ensemble-scene-scene-pose-audio-face-caption-laugh-for-boost-NORMALIZED-v2/cp-0047.h5\n","84/84 [==============================] - 0s 4ms/step - loss: 0.5000 - accuracy: 0.8346 - val_loss: 1.0249 - val_accuracy: 0.5940\n","Epoch 48/50\n","76/84 [==========================>...] - ETA: 0s - loss: 0.5083 - accuracy: 0.8368\n","Epoch 00048: saving model to /content/drive/Machine-Learning-Models/My Drive/cs231n-project/models/ensemble-scene-scene-pose-audio-face-caption-laugh-for-boost-NORMALIZED-v2/cp-0048.h5\n","84/84 [==============================] - 0s 4ms/step - loss: 0.5022 - accuracy: 0.8392 - val_loss: 1.0218 - val_accuracy: 0.5979\n","Epoch 49/50\n","80/84 [===========================>..] - ETA: 0s - loss: 0.5077 - accuracy: 0.8305\n","Epoch 00049: saving model to /content/drive/Machine-Learning-Models/My Drive/cs231n-project/models/ensemble-scene-scene-pose-audio-face-caption-laugh-for-boost-NORMALIZED-v2/cp-0049.h5\n","84/84 [==============================] - 0s 5ms/step - loss: 0.5099 - accuracy: 0.8294 - val_loss: 1.0248 - val_accuracy: 0.5914\n","Epoch 50/50\n","77/84 [==========================>...] - ETA: 0s - loss: 0.5036 - accuracy: 0.8336\n","Epoch 00050: saving model to /content/drive/Machine-Learning-Models/My Drive/cs231n-project/models/ensemble-scene-scene-pose-audio-face-caption-laugh-for-boost-NORMALIZED-v2/cp-0050.h5\n","84/84 [==============================] - 0s 4ms/step - loss: 0.5020 - accuracy: 0.8343 - val_loss: 1.0632 - val_accuracy: 0.5888\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"E7Azhd_udPvI","colab_type":"code","colab":{}},"source":["import tensorflow as tf\n","BEST_FIRST_MODEL_PATH = '/content/drive/My Drive/Machine-Learning-Projects/cs231n-project/models/ensemble-scene-scene-pose-audio-face-caption-laugh-v1/cp-0036.h5'\n","top_model = tf.keras.models.load_model(BEST_FIRST_MODEL_PATH)"],"execution_count":null,"outputs":[]},{"cell_type":"code","metadata":{"id":"RltSpqhvXNHE","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":295},"executionInfo":{"status":"ok","timestamp":1593132768084,"user_tz":240,"elapsed":10867,"user":{"displayName":"Leila Abdelrahman","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GiiOBijfsdVdWn4yrdWM-_fgxn37DQ4bPiUdT7W=s64","userId":"10595688673230464384"}},"outputId":"29d7a248-7a9d-4ab6-d67b-27ab7277569e"},"source":["top_model.summary()"],"execution_count":null,"outputs":[{"output_type":"stream","text":["Model: \"model_3\"\n","_________________________________________________________________\n","Layer (type)                 Output Shape              Param #   \n","=================================================================\n","input_4 (InputLayer)         [(None, 207)]             0         \n","_________________________________________________________________\n","batch_normalization_3 (Batch (None, 207)               828       \n","_________________________________________________________________\n","dense_6 (Dense)              (None, 64)                13312     \n","_________________________________________________________________\n","dense_7 (Dense)              (None, 3)                 195       \n","=================================================================\n","Total params: 14,335\n","Trainable params: 13,921\n","Non-trainable params: 414\n","_________________________________________________________________\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"iyTeJxNLXO6B","colab_type":"code","colab":{}},"source":["# UNCOMMENT IF EXCLUDING FER, AND RESNET [best]\n","sizes = [32, 30, 40, 128, 8, 16, 1]\n","mask = []\n","for x in range(sum(sizes)):\n","    if x >= 62 and x < 102:\n","        mask.append(False)\n","    elif x < 230:\n","        mask.append(True)\n","    elif x >= 238:\n","        mask.append(True)\n","    else:\n","        mask.append(False)\n","train_pred = top_model.predict(X_train[:, mask])\n","val_pred = top_model.predict(X_valid[:, mask])"],"execution_count":null,"outputs":[]},{"cell_type":"code","metadata":{"id":"PNrMrWSRXxLa","colab_type":"code","colab":{}},"source":["y_true_val = np.argmax(y_valid, axis=1)\n","y_pred_val = np.argmax(val_pred, axis=1)"],"execution_count":null,"outputs":[]},{"cell_type":"code","metadata":{"id":"f29izAS1YBDl","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":625},"executionInfo":{"status":"ok","timestamp":1593132770911,"user_tz":240,"elapsed":2784,"user":{"displayName":"Leila Abdelrahman","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GiiOBijfsdVdWn4yrdWM-_fgxn37DQ4bPiUdT7W=s64","userId":"10595688673230464384"}},"outputId":"94e45af8-4efc-4689-95e9-c11a5bacc1fe"},"source":["from sklearn import metrics \n","import pandas as pd\n","import seaborn as sn\n","cm=metrics.confusion_matrix(y_true_val,y_pred_val)\n","import matplotlib.pyplot as plt\n","\n","classes=['Pos' , 'Neu' , 'Neg']\n","con_mat = tf.math.confusion_matrix(labels=y_true_val, predictions=y_pred_val).numpy()\n","con_mat_norm = np.around(con_mat.astype('float') / con_mat.sum(axis=1)[:, np.newaxis], decimals=2)\n","con_mat_df = pd.DataFrame(con_mat_norm,\n","                  index = classes, \n","                  columns = classes)\n","\n","figure = plt.figure(figsize=(11, 9))\n","plt.title(\"Top Model FC Validation\")\n","sn.heatmap(con_mat_df, annot=True,cmap=plt.cm.Blues)\n","\n","\n","accuracy = (y_true_val == y_pred_val).mean()\n","print(f\"Accuracy: {accuracy}\")"],"execution_count":null,"outputs":[{"output_type":"stream","text":["/usr/local/lib/python3.6/dist-packages/statsmodels/tools/_testing.py:19: FutureWarning: pandas.util.testing is deprecated. Use the functions in the public API at pandas.testing instead.\n","  import pandas.util.testing as tm\n"],"name":"stderr"},{"output_type":"stream","text":["Accuracy: 0.639686684073107\n"],"name":"stdout"},{"output_type":"display_data","data":{"image/png":"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\n","text/plain":["<Figure size 792x648 with 2 Axes>"]},"metadata":{"tags":[],"needs_background":"light"}}]},{"cell_type":"markdown","metadata":{"id":"bm_4RQ40YRA0","colab_type":"text"},"source":["### Add boosting for positive"]},{"cell_type":"code","metadata":{"id":"aRnqKDhujPOH","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":35},"executionInfo":{"status":"ok","timestamp":1593132771799,"user_tz":240,"elapsed":783,"user":{"displayName":"Leila Abdelrahman","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GiiOBijfsdVdWn4yrdWM-_fgxn37DQ4bPiUdT7W=s64","userId":"10595688673230464384"}},"outputId":"84808d8f-5111-46d8-c6f0-2ef134aacec2"},"source":["y_train.shape\n","\n","filtered_y_train = []\n","filtered_x_train = []\n","train_pred_pos_neu = np.argwhere(np.argmax(y_train,axis=1)<=1)\n","for i in train_pred_pos_neu:\n","  filtered_y_train.append(y_train[i])\n","  filtered_x_train.append(X_train[i])\n","\n","\n","filtered_y_train = np.asarray(filtered_y_train).squeeze()[:,:2]\n","filtered_x_train = np.asarray(filtered_x_train).squeeze()\n","\n","filtered_x_train.shape"],"execution_count":null,"outputs":[{"output_type":"execute_result","data":{"text/plain":["(1725, 255)"]},"metadata":{"tags":[]},"execution_count":13}]},{"cell_type":"code","metadata":{"id":"Ghc9hCEbkOns","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":35},"executionInfo":{"status":"ok","timestamp":1593132788941,"user_tz":240,"elapsed":375,"user":{"displayName":"Leila Abdelrahman","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GiiOBijfsdVdWn4yrdWM-_fgxn37DQ4bPiUdT7W=s64","userId":"10595688673230464384"}},"outputId":"b59a4010-c190-4506-e4ed-2c9272518347"},"source":["y_valid.shape\n","\n","val_pred_pos_neu = np.argwhere(np.argmax(val_pred,axis=1)<=1)\n","filtered_y_val = []\n","filtered_x_val = []\n","\n","for i in val_pred_pos_neu:\n","  filtered_y_val.append(y_valid[i])\n","  filtered_x_val.append(X_valid[i])\n","\n","\n","filtered_y_val = np.asarray(filtered_y_val).squeeze()[:,:2]\n","filtered_x_val = np.asarray(filtered_x_val).squeeze()\n","\n","filtered_x_val.shape\n"],"execution_count":null,"outputs":[{"output_type":"execute_result","data":{"text/plain":["(553, 255)"]},"metadata":{"tags":[]},"execution_count":16}]},{"cell_type":"markdown","metadata":{"id":"0YlolvZnBTg6","colab_type":"text"},"source":["## Neural Network Boost"]},{"cell_type":"code","metadata":{"id":"difIXzmTBXOB","colab_type":"code","colab":{}},"source":["inputs = tf.keras.Input(shape=(np.count_nonzero(mask)))\n","x = tf.keras.layers.BatchNormalization()(inputs)\n","# x = tf.keras.layers.Dense(64, activation='relu')(inputs)\n","# x = tf.keras.layers.Dropout(0.2)(x)\n","# x = tf.keras.layers.Dense(32, activation='relu', kernel_regularizer=tf.keras.regularizers.l2(0.001))(x)\n","x = tf.keras.layers.Dense(64, activation='relu', kernel_regularizer=tf.keras.regularizers.l2(0.02))(x)\n","x = tf.keras.layers.Dense(2, activation='softmax', kernel_regularizer=tf.keras.regularizers.l2(0.02))(x)\n","\n","model = tf.keras.Model(inputs=inputs, outputs=x)\n","model.compile(optimizer=tf.keras.optimizers.Adam(lr=0.001),\n","              loss = 'categorical_crossentropy',\n","              metrics=['accuracy'])"],"execution_count":null,"outputs":[]},{"cell_type":"code","metadata":{"id":"y8QLfgTTCoDz","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":1000},"executionInfo":{"status":"ok","timestamp":1593133093192,"user_tz":240,"elapsed":12653,"user":{"displayName":"Leila Abdelrahman","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GiiOBijfsdVdWn4yrdWM-_fgxn37DQ4bPiUdT7W=s64","userId":"10595688673230464384"}},"outputId":"d436f383-44de-464e-99ea-a7e61c5569dd"},"source":["from pathlib import Path\n","MODEL_NAME = \"ensemble-scene-scene-pose-audio-face-caption-laugh-for-boost-BOOST-v2\"\n","\n","Path(f\"/content/drive/My Drive/Machine-Learning-Projects/cs231n-project/models/{MODEL_NAME}\").mkdir(parents=True, exist_ok=True)\n","checkpoint_path = \"/content/drive/My Drive/Machine-Learning-Projects/cs231n-project/models/\" + MODEL_NAME + \"/cp-{epoch:04d}.h5\"\n","\n","\n","cp_callback = tf.keras.callbacks.ModelCheckpoint(\n","    filepath=checkpoint_path, \n","    verbose=1,\n","    save_weights_only=False,\n","    save_best_only=False,\n","    period=1\n",")\n","history = model.fit(\n","          x=filtered_x_train[:,mask],\n","          y=filtered_y_train,\n","          epochs=50,\n","          callbacks=[cp_callback],\n","          validation_data=(filtered_x_val[:,mask], filtered_y_val)\n",")\n"],"execution_count":null,"outputs":[{"output_type":"stream","text":["WARNING:tensorflow:`period` argument is deprecated. Please use `save_freq` to specify the frequency in number of batches seen.\n","Epoch 1/50\n","42/54 [======================>.......] - ETA: 0s - loss: 0.3498 - accuracy: 0.8631\n","Epoch 00001: saving model to /content/drive/My Drive/Machine-Learning-Projects/cs231n-project/models/ensemble-scene-scene-pose-audio-face-caption-laugh-for-boost-BOOST-v2/cp-0001.h5\n","54/54 [==============================] - 0s 5ms/step - loss: 0.3494 - accuracy: 0.8649 - val_loss: 0.6532 - val_accuracy: 0.6618\n","Epoch 2/50\n","40/54 [=====================>........] - ETA: 0s - loss: 0.3541 - accuracy: 0.8641\n","Epoch 00002: saving model to /content/drive/My Drive/Machine-Learning-Projects/cs231n-project/models/ensemble-scene-scene-pose-audio-face-caption-laugh-for-boost-BOOST-v2/cp-0002.h5\n","54/54 [==============================] - 0s 5ms/step - loss: 0.3543 - accuracy: 0.8603 - val_loss: 0.6681 - val_accuracy: 0.6673\n","Epoch 3/50\n","42/54 [======================>.......] - ETA: 0s - loss: 0.3441 - accuracy: 0.8698\n","Epoch 00003: saving model to /content/drive/My Drive/Machine-Learning-Projects/cs231n-project/models/ensemble-scene-scene-pose-audio-face-caption-laugh-for-boost-BOOST-v2/cp-0003.h5\n","54/54 [==============================] - 0s 4ms/step - loss: 0.3472 - accuracy: 0.8701 - val_loss: 0.6705 - val_accuracy: 0.6709\n","Epoch 4/50\n","39/54 [====================>.........] - ETA: 0s - loss: 0.3460 - accuracy: 0.8702\n","Epoch 00004: saving model to /content/drive/My Drive/Machine-Learning-Projects/cs231n-project/models/ensemble-scene-scene-pose-audio-face-caption-laugh-for-boost-BOOST-v2/cp-0004.h5\n","54/54 [==============================] - 0s 4ms/step - loss: 0.3485 - accuracy: 0.8678 - val_loss: 0.6746 - val_accuracy: 0.6637\n","Epoch 5/50\n","40/54 [=====================>........] - ETA: 0s - loss: 0.3444 - accuracy: 0.8758\n","Epoch 00005: saving model to /content/drive/My Drive/Machine-Learning-Projects/cs231n-project/models/ensemble-scene-scene-pose-audio-face-caption-laugh-for-boost-BOOST-v2/cp-0005.h5\n","54/54 [==============================] - 0s 4ms/step - loss: 0.3444 - accuracy: 0.8765 - val_loss: 0.6710 - val_accuracy: 0.6637\n","Epoch 6/50\n","38/54 [====================>.........] - ETA: 0s - loss: 0.3400 - accuracy: 0.8692\n","Epoch 00006: saving model to /content/drive/My Drive/Machine-Learning-Projects/cs231n-project/models/ensemble-scene-scene-pose-audio-face-caption-laugh-for-boost-BOOST-v2/cp-0006.h5\n","54/54 [==============================] - 0s 5ms/step - loss: 0.3506 - accuracy: 0.8678 - val_loss: 0.6705 - val_accuracy: 0.6727\n","Epoch 7/50\n","40/54 [=====================>........] - ETA: 0s - loss: 0.3508 - accuracy: 0.8742\n","Epoch 00007: saving model to /content/drive/My Drive/Machine-Learning-Projects/cs231n-project/models/ensemble-scene-scene-pose-audio-face-caption-laugh-for-boost-BOOST-v2/cp-0007.h5\n","54/54 [==============================] - 0s 4ms/step - loss: 0.3479 - accuracy: 0.8690 - val_loss: 0.6666 - val_accuracy: 0.6691\n","Epoch 8/50\n","41/54 [=====================>........] - ETA: 0s - loss: 0.3544 - accuracy: 0.8659\n","Epoch 00008: saving model to /content/drive/My Drive/Machine-Learning-Projects/cs231n-project/models/ensemble-scene-scene-pose-audio-face-caption-laugh-for-boost-BOOST-v2/cp-0008.h5\n","54/54 [==============================] - 0s 4ms/step - loss: 0.3539 - accuracy: 0.8678 - val_loss: 0.6646 - val_accuracy: 0.6546\n","Epoch 9/50\n","41/54 [=====================>........] - ETA: 0s - loss: 0.3503 - accuracy: 0.8712\n","Epoch 00009: saving model to /content/drive/My Drive/Machine-Learning-Projects/cs231n-project/models/ensemble-scene-scene-pose-audio-face-caption-laugh-for-boost-BOOST-v2/cp-0009.h5\n","54/54 [==============================] - 0s 4ms/step - loss: 0.3493 - accuracy: 0.8730 - val_loss: 0.6581 - val_accuracy: 0.6673\n","Epoch 10/50\n","38/54 [====================>.........] - ETA: 0s - loss: 0.3454 - accuracy: 0.8734\n","Epoch 00010: saving model to /content/drive/My Drive/Machine-Learning-Projects/cs231n-project/models/ensemble-scene-scene-pose-audio-face-caption-laugh-for-boost-BOOST-v2/cp-0010.h5\n","54/54 [==============================] - 0s 5ms/step - loss: 0.3540 - accuracy: 0.8713 - val_loss: 0.6434 - val_accuracy: 0.6691\n","Epoch 11/50\n","39/54 [====================>.........] - ETA: 0s - loss: 0.3414 - accuracy: 0.8782\n","Epoch 00011: saving model to /content/drive/My Drive/Machine-Learning-Projects/cs231n-project/models/ensemble-scene-scene-pose-audio-face-caption-laugh-for-boost-BOOST-v2/cp-0011.h5\n","54/54 [==============================] - 0s 4ms/step - loss: 0.3513 - accuracy: 0.8701 - val_loss: 0.6573 - val_accuracy: 0.6727\n","Epoch 12/50\n","38/54 [====================>.........] - ETA: 0s - loss: 0.3604 - accuracy: 0.8684\n","Epoch 00012: saving model to /content/drive/My Drive/Machine-Learning-Projects/cs231n-project/models/ensemble-scene-scene-pose-audio-face-caption-laugh-for-boost-BOOST-v2/cp-0012.h5\n","54/54 [==============================] - 0s 4ms/step - loss: 0.3543 - accuracy: 0.8707 - val_loss: 0.6571 - val_accuracy: 0.6745\n","Epoch 13/50\n","43/54 [======================>.......] - ETA: 0s - loss: 0.3475 - accuracy: 0.8706\n","Epoch 00013: saving model to /content/drive/My Drive/Machine-Learning-Projects/cs231n-project/models/ensemble-scene-scene-pose-audio-face-caption-laugh-for-boost-BOOST-v2/cp-0013.h5\n","54/54 [==============================] - 0s 4ms/step - loss: 0.3483 - accuracy: 0.8701 - val_loss: 0.6806 - val_accuracy: 0.6600\n","Epoch 14/50\n","44/54 [=======================>......] - ETA: 0s - loss: 0.3562 - accuracy: 0.8658\n","Epoch 00014: saving model to /content/drive/My Drive/Machine-Learning-Projects/cs231n-project/models/ensemble-scene-scene-pose-audio-face-caption-laugh-for-boost-BOOST-v2/cp-0014.h5\n","54/54 [==============================] - 0s 4ms/step - loss: 0.3570 - accuracy: 0.8626 - val_loss: 0.6514 - val_accuracy: 0.6691\n","Epoch 15/50\n","38/54 [====================>.........] - ETA: 0s - loss: 0.3340 - accuracy: 0.8791\n","Epoch 00015: saving model to /content/drive/My Drive/Machine-Learning-Projects/cs231n-project/models/ensemble-scene-scene-pose-audio-face-caption-laugh-for-boost-BOOST-v2/cp-0015.h5\n","54/54 [==============================] - 0s 4ms/step - loss: 0.3462 - accuracy: 0.8725 - val_loss: 0.6569 - val_accuracy: 0.6673\n","Epoch 16/50\n","40/54 [=====================>........] - ETA: 0s - loss: 0.3462 - accuracy: 0.8687\n","Epoch 00016: saving model to /content/drive/My Drive/Machine-Learning-Projects/cs231n-project/models/ensemble-scene-scene-pose-audio-face-caption-laugh-for-boost-BOOST-v2/cp-0016.h5\n","54/54 [==============================] - 0s 4ms/step - loss: 0.3507 - accuracy: 0.8684 - val_loss: 0.6450 - val_accuracy: 0.6673\n","Epoch 17/50\n","39/54 [====================>.........] - ETA: 0s - loss: 0.3247 - accuracy: 0.8774\n","Epoch 00017: saving model to /content/drive/My Drive/Machine-Learning-Projects/cs231n-project/models/ensemble-scene-scene-pose-audio-face-caption-laugh-for-boost-BOOST-v2/cp-0017.h5\n","54/54 [==============================] - 0s 4ms/step - loss: 0.3409 - accuracy: 0.8707 - val_loss: 0.6835 - val_accuracy: 0.6618\n","Epoch 18/50\n","41/54 [=====================>........] - ETA: 0s - loss: 0.3421 - accuracy: 0.8704\n","Epoch 00018: saving model to /content/drive/My Drive/Machine-Learning-Projects/cs231n-project/models/ensemble-scene-scene-pose-audio-face-caption-laugh-for-boost-BOOST-v2/cp-0018.h5\n","54/54 [==============================] - 0s 4ms/step - loss: 0.3434 - accuracy: 0.8684 - val_loss: 0.6699 - val_accuracy: 0.6637\n","Epoch 19/50\n","43/54 [======================>.......] - ETA: 0s - loss: 0.3583 - accuracy: 0.8547\n","Epoch 00019: saving model to /content/drive/My Drive/Machine-Learning-Projects/cs231n-project/models/ensemble-scene-scene-pose-audio-face-caption-laugh-for-boost-BOOST-v2/cp-0019.h5\n","54/54 [==============================] - 0s 4ms/step - loss: 0.3566 - accuracy: 0.8551 - val_loss: 0.6653 - val_accuracy: 0.6655\n","Epoch 20/50\n","43/54 [======================>.......] - ETA: 0s - loss: 0.3351 - accuracy: 0.8794\n","Epoch 00020: saving model to /content/drive/My Drive/Machine-Learning-Projects/cs231n-project/models/ensemble-scene-scene-pose-audio-face-caption-laugh-for-boost-BOOST-v2/cp-0020.h5\n","54/54 [==============================] - 0s 4ms/step - loss: 0.3424 - accuracy: 0.8736 - val_loss: 0.6901 - val_accuracy: 0.6655\n","Epoch 21/50\n","41/54 [=====================>........] - ETA: 0s - loss: 0.3558 - accuracy: 0.8712\n","Epoch 00021: saving model to /content/drive/My Drive/Machine-Learning-Projects/cs231n-project/models/ensemble-scene-scene-pose-audio-face-caption-laugh-for-boost-BOOST-v2/cp-0021.h5\n","54/54 [==============================] - 0s 4ms/step - loss: 0.3560 - accuracy: 0.8701 - val_loss: 0.6862 - val_accuracy: 0.6655\n","Epoch 22/50\n","39/54 [====================>.........] - ETA: 0s - loss: 0.3467 - accuracy: 0.8662\n","Epoch 00022: saving model to /content/drive/My Drive/Machine-Learning-Projects/cs231n-project/models/ensemble-scene-scene-pose-audio-face-caption-laugh-for-boost-BOOST-v2/cp-0022.h5\n","54/54 [==============================] - 0s 5ms/step - loss: 0.3545 - accuracy: 0.8632 - val_loss: 0.6542 - val_accuracy: 0.6727\n","Epoch 23/50\n","41/54 [=====================>........] - ETA: 0s - loss: 0.3560 - accuracy: 0.8620\n","Epoch 00023: saving model to /content/drive/My Drive/Machine-Learning-Projects/cs231n-project/models/ensemble-scene-scene-pose-audio-face-caption-laugh-for-boost-BOOST-v2/cp-0023.h5\n","54/54 [==============================] - 0s 5ms/step - loss: 0.3620 - accuracy: 0.8632 - val_loss: 0.6664 - val_accuracy: 0.6528\n","Epoch 24/50\n","42/54 [======================>.......] - ETA: 0s - loss: 0.3618 - accuracy: 0.8631\n","Epoch 00024: saving model to /content/drive/My Drive/Machine-Learning-Projects/cs231n-project/models/ensemble-scene-scene-pose-audio-face-caption-laugh-for-boost-BOOST-v2/cp-0024.h5\n","54/54 [==============================] - 0s 4ms/step - loss: 0.3576 - accuracy: 0.8678 - val_loss: 0.6541 - val_accuracy: 0.6564\n","Epoch 25/50\n","41/54 [=====================>........] - ETA: 0s - loss: 0.3494 - accuracy: 0.8666\n","Epoch 00025: saving model to /content/drive/My Drive/Machine-Learning-Projects/cs231n-project/models/ensemble-scene-scene-pose-audio-face-caption-laugh-for-boost-BOOST-v2/cp-0025.h5\n","54/54 [==============================] - 0s 5ms/step - loss: 0.3515 - accuracy: 0.8667 - val_loss: 0.6809 - val_accuracy: 0.6618\n","Epoch 26/50\n","42/54 [======================>.......] - ETA: 0s - loss: 0.3372 - accuracy: 0.8728\n","Epoch 00026: saving model to /content/drive/My Drive/Machine-Learning-Projects/cs231n-project/models/ensemble-scene-scene-pose-audio-face-caption-laugh-for-boost-BOOST-v2/cp-0026.h5\n","54/54 [==============================] - 0s 4ms/step - loss: 0.3463 - accuracy: 0.8690 - val_loss: 0.6553 - val_accuracy: 0.6564\n","Epoch 27/50\n","40/54 [=====================>........] - ETA: 0s - loss: 0.3388 - accuracy: 0.8695\n","Epoch 00027: saving model to /content/drive/My Drive/Machine-Learning-Projects/cs231n-project/models/ensemble-scene-scene-pose-audio-face-caption-laugh-for-boost-BOOST-v2/cp-0027.h5\n","54/54 [==============================] - 0s 4ms/step - loss: 0.3386 - accuracy: 0.8678 - val_loss: 0.6607 - val_accuracy: 0.6564\n","Epoch 28/50\n","40/54 [=====================>........] - ETA: 0s - loss: 0.3369 - accuracy: 0.8734\n","Epoch 00028: saving model to /content/drive/My Drive/Machine-Learning-Projects/cs231n-project/models/ensemble-scene-scene-pose-audio-face-caption-laugh-for-boost-BOOST-v2/cp-0028.h5\n","54/54 [==============================] - 0s 4ms/step - loss: 0.3514 - accuracy: 0.8661 - val_loss: 0.6464 - val_accuracy: 0.6673\n","Epoch 29/50\n","42/54 [======================>.......] - ETA: 0s - loss: 0.3673 - accuracy: 0.8504\n","Epoch 00029: saving model to /content/drive/My Drive/Machine-Learning-Projects/cs231n-project/models/ensemble-scene-scene-pose-audio-face-caption-laugh-for-boost-BOOST-v2/cp-0029.h5\n","54/54 [==============================] - 0s 4ms/step - loss: 0.3555 - accuracy: 0.8574 - val_loss: 0.6564 - val_accuracy: 0.6564\n","Epoch 30/50\n","35/54 [==================>...........] - ETA: 0s - loss: 0.3661 - accuracy: 0.8670\n","Epoch 00030: saving model to /content/drive/My Drive/Machine-Learning-Projects/cs231n-project/models/ensemble-scene-scene-pose-audio-face-caption-laugh-for-boost-BOOST-v2/cp-0030.h5\n","54/54 [==============================] - 0s 4ms/step - loss: 0.3504 - accuracy: 0.8736 - val_loss: 0.6917 - val_accuracy: 0.6637\n","Epoch 31/50\n","43/54 [======================>.......] - ETA: 0s - loss: 0.3485 - accuracy: 0.8612\n","Epoch 00031: saving model to /content/drive/My Drive/Machine-Learning-Projects/cs231n-project/models/ensemble-scene-scene-pose-audio-face-caption-laugh-for-boost-BOOST-v2/cp-0031.h5\n","54/54 [==============================] - 0s 4ms/step - loss: 0.3529 - accuracy: 0.8603 - val_loss: 0.6537 - val_accuracy: 0.6637\n","Epoch 32/50\n","34/54 [=================>............] - ETA: 0s - loss: 0.3451 - accuracy: 0.8621\n","Epoch 00032: saving model to /content/drive/My Drive/Machine-Learning-Projects/cs231n-project/models/ensemble-scene-scene-pose-audio-face-caption-laugh-for-boost-BOOST-v2/cp-0032.h5\n","54/54 [==============================] - 0s 5ms/step - loss: 0.3509 - accuracy: 0.8649 - val_loss: 0.6581 - val_accuracy: 0.6745\n","Epoch 33/50\n","41/54 [=====================>........] - ETA: 0s - loss: 0.3418 - accuracy: 0.8735\n","Epoch 00033: saving model to /content/drive/My Drive/Machine-Learning-Projects/cs231n-project/models/ensemble-scene-scene-pose-audio-face-caption-laugh-for-boost-BOOST-v2/cp-0033.h5\n","54/54 [==============================] - 0s 4ms/step - loss: 0.3420 - accuracy: 0.8707 - val_loss: 0.6745 - val_accuracy: 0.6673\n","Epoch 34/50\n","41/54 [=====================>........] - ETA: 0s - loss: 0.3493 - accuracy: 0.8697\n","Epoch 00034: saving model to /content/drive/My Drive/Machine-Learning-Projects/cs231n-project/models/ensemble-scene-scene-pose-audio-face-caption-laugh-for-boost-BOOST-v2/cp-0034.h5\n","54/54 [==============================] - 0s 4ms/step - loss: 0.3544 - accuracy: 0.8667 - val_loss: 0.6597 - val_accuracy: 0.6709\n","Epoch 35/50\n","38/54 [====================>.........] - ETA: 0s - loss: 0.3344 - accuracy: 0.8840\n","Epoch 00035: saving model to /content/drive/My Drive/Machine-Learning-Projects/cs231n-project/models/ensemble-scene-scene-pose-audio-face-caption-laugh-for-boost-BOOST-v2/cp-0035.h5\n","54/54 [==============================] - 0s 4ms/step - loss: 0.3416 - accuracy: 0.8725 - val_loss: 0.6728 - val_accuracy: 0.6673\n","Epoch 36/50\n","43/54 [======================>.......] - ETA: 0s - loss: 0.3484 - accuracy: 0.8757\n","Epoch 00036: saving model to /content/drive/My Drive/Machine-Learning-Projects/cs231n-project/models/ensemble-scene-scene-pose-audio-face-caption-laugh-for-boost-BOOST-v2/cp-0036.h5\n","54/54 [==============================] - 0s 4ms/step - loss: 0.3462 - accuracy: 0.8754 - val_loss: 0.6684 - val_accuracy: 0.6637\n","Epoch 37/50\n","38/54 [====================>.........] - ETA: 0s - loss: 0.3368 - accuracy: 0.8742\n","Epoch 00037: saving model to /content/drive/My Drive/Machine-Learning-Projects/cs231n-project/models/ensemble-scene-scene-pose-audio-face-caption-laugh-for-boost-BOOST-v2/cp-0037.h5\n","54/54 [==============================] - 0s 5ms/step - loss: 0.3446 - accuracy: 0.8678 - val_loss: 0.6671 - val_accuracy: 0.6673\n","Epoch 38/50\n","42/54 [======================>.......] - ETA: 0s - loss: 0.3442 - accuracy: 0.8750\n","Epoch 00038: saving model to /content/drive/My Drive/Machine-Learning-Projects/cs231n-project/models/ensemble-scene-scene-pose-audio-face-caption-laugh-for-boost-BOOST-v2/cp-0038.h5\n","54/54 [==============================] - 0s 4ms/step - loss: 0.3498 - accuracy: 0.8736 - val_loss: 0.7138 - val_accuracy: 0.6655\n","Epoch 39/50\n","40/54 [=====================>........] - ETA: 0s - loss: 0.3388 - accuracy: 0.8773\n","Epoch 00039: saving model to /content/drive/My Drive/Machine-Learning-Projects/cs231n-project/models/ensemble-scene-scene-pose-audio-face-caption-laugh-for-boost-BOOST-v2/cp-0039.h5\n","54/54 [==============================] - 0s 8ms/step - loss: 0.3411 - accuracy: 0.8701 - val_loss: 0.6624 - val_accuracy: 0.6564\n","Epoch 40/50\n","41/54 [=====================>........] - ETA: 0s - loss: 0.3394 - accuracy: 0.8773\n","Epoch 00040: saving model to /content/drive/My Drive/Machine-Learning-Projects/cs231n-project/models/ensemble-scene-scene-pose-audio-face-caption-laugh-for-boost-BOOST-v2/cp-0040.h5\n","54/54 [==============================] - 0s 4ms/step - loss: 0.3421 - accuracy: 0.8759 - val_loss: 0.6761 - val_accuracy: 0.6618\n","Epoch 41/50\n","39/54 [====================>.........] - ETA: 0s - loss: 0.3569 - accuracy: 0.8622\n","Epoch 00041: saving model to /content/drive/My Drive/Machine-Learning-Projects/cs231n-project/models/ensemble-scene-scene-pose-audio-face-caption-laugh-for-boost-BOOST-v2/cp-0041.h5\n","54/54 [==============================] - 0s 5ms/step - loss: 0.3526 - accuracy: 0.8632 - val_loss: 0.6802 - val_accuracy: 0.6709\n","Epoch 42/50\n","42/54 [======================>.......] - ETA: 0s - loss: 0.3482 - accuracy: 0.8661\n","Epoch 00042: saving model to /content/drive/My Drive/Machine-Learning-Projects/cs231n-project/models/ensemble-scene-scene-pose-audio-face-caption-laugh-for-boost-BOOST-v2/cp-0042.h5\n","54/54 [==============================] - 0s 4ms/step - loss: 0.3475 - accuracy: 0.8701 - val_loss: 0.6738 - val_accuracy: 0.6727\n","Epoch 43/50\n","37/54 [===================>..........] - ETA: 0s - loss: 0.3441 - accuracy: 0.8725\n","Epoch 00043: saving model to /content/drive/My Drive/Machine-Learning-Projects/cs231n-project/models/ensemble-scene-scene-pose-audio-face-caption-laugh-for-boost-BOOST-v2/cp-0043.h5\n","54/54 [==============================] - 0s 5ms/step - loss: 0.3468 - accuracy: 0.8684 - val_loss: 0.6722 - val_accuracy: 0.6655\n","Epoch 44/50\n","40/54 [=====================>........] - ETA: 0s - loss: 0.3451 - accuracy: 0.8656\n","Epoch 00044: saving model to /content/drive/My Drive/Machine-Learning-Projects/cs231n-project/models/ensemble-scene-scene-pose-audio-face-caption-laugh-for-boost-BOOST-v2/cp-0044.h5\n","54/54 [==============================] - 0s 4ms/step - loss: 0.3435 - accuracy: 0.8713 - val_loss: 0.7026 - val_accuracy: 0.6727\n","Epoch 45/50\n","40/54 [=====================>........] - ETA: 0s - loss: 0.3437 - accuracy: 0.8758\n","Epoch 00045: saving model to /content/drive/My Drive/Machine-Learning-Projects/cs231n-project/models/ensemble-scene-scene-pose-audio-face-caption-laugh-for-boost-BOOST-v2/cp-0045.h5\n","54/54 [==============================] - 0s 4ms/step - loss: 0.3463 - accuracy: 0.8736 - val_loss: 0.6802 - val_accuracy: 0.6673\n","Epoch 46/50\n","42/54 [======================>.......] - ETA: 0s - loss: 0.3565 - accuracy: 0.8728\n","Epoch 00046: saving model to /content/drive/My Drive/Machine-Learning-Projects/cs231n-project/models/ensemble-scene-scene-pose-audio-face-caption-laugh-for-boost-BOOST-v2/cp-0046.h5\n","54/54 [==============================] - 0s 4ms/step - loss: 0.3515 - accuracy: 0.8742 - val_loss: 0.6562 - val_accuracy: 0.6655\n","Epoch 47/50\n","39/54 [====================>.........] - ETA: 0s - loss: 0.3360 - accuracy: 0.8670\n","Epoch 00047: saving model to /content/drive/My Drive/Machine-Learning-Projects/cs231n-project/models/ensemble-scene-scene-pose-audio-face-caption-laugh-for-boost-BOOST-v2/cp-0047.h5\n","54/54 [==============================] - 0s 5ms/step - loss: 0.3380 - accuracy: 0.8678 - val_loss: 0.6810 - val_accuracy: 0.6709\n","Epoch 48/50\n","38/54 [====================>.........] - ETA: 0s - loss: 0.3485 - accuracy: 0.8709\n","Epoch 00048: saving model to /content/drive/My Drive/Machine-Learning-Projects/cs231n-project/models/ensemble-scene-scene-pose-audio-face-caption-laugh-for-boost-BOOST-v2/cp-0048.h5\n","54/54 [==============================] - 0s 5ms/step - loss: 0.3479 - accuracy: 0.8719 - val_loss: 0.6633 - val_accuracy: 0.6709\n","Epoch 49/50\n","38/54 [====================>.........] - ETA: 0s - loss: 0.3706 - accuracy: 0.8536\n","Epoch 00049: saving model to /content/drive/My Drive/Machine-Learning-Projects/cs231n-project/models/ensemble-scene-scene-pose-audio-face-caption-laugh-for-boost-BOOST-v2/cp-0049.h5\n","54/54 [==============================] - 0s 4ms/step - loss: 0.3574 - accuracy: 0.8603 - val_loss: 0.6591 - val_accuracy: 0.6691\n","Epoch 50/50\n","37/54 [===================>..........] - ETA: 0s - loss: 0.3384 - accuracy: 0.8750\n","Epoch 00050: saving model to /content/drive/My Drive/Machine-Learning-Projects/cs231n-project/models/ensemble-scene-scene-pose-audio-face-caption-laugh-for-boost-BOOST-v2/cp-0050.h5\n","54/54 [==============================] - 0s 5ms/step - loss: 0.3493 - accuracy: 0.8690 - val_loss: 0.6722 - val_accuracy: 0.6673\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"n9cp-SXvDgoq","colab_type":"code","colab":{}},"source":["BEST_SECOND_MODEL = tf.keras.models.load_model('/content/drive/My Drive/Machine-Learning-Projects/cs231n-project/models/ensemble-scene-scene-pose-audio-face-caption-laugh-for-boost-BOOST-v2/cp-0049.h5')"],"execution_count":null,"outputs":[]},{"cell_type":"code","metadata":{"id":"tcZ2H8Y9F46L","colab_type":"code","colab":{}},"source":["new_pred = BEST_SECOND_MODEL.predict(filtered_x_val[:,mask])\n","new_pred = np.argmax(new_pred , axis=1)"],"execution_count":null,"outputs":[]},{"cell_type":"code","metadata":{"id":"1J87UtHWGHlN","colab_type":"code","colab":{}},"source":["val_pred_pos_neu_f = val_pred_pos_neu.reshape(1,-1)\n","\n","counter = 0\n","y_pred_val_boost = y_pred_val\n","for i in range(0,len(y_pred_val_boost)):\n","  if i in val_pred_pos_neu_f:\n","    y_pred_val_boost[i] = new_pred[counter]\n","    counter += 1\n","\n"],"execution_count":null,"outputs":[]},{"cell_type":"code","metadata":{"id":"BjtuNwf3GW2v","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":624},"executionInfo":{"status":"ok","timestamp":1593133203804,"user_tz":240,"elapsed":378,"user":{"displayName":"Leila Abdelrahman","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GiiOBijfsdVdWn4yrdWM-_fgxn37DQ4bPiUdT7W=s64","userId":"10595688673230464384"}},"outputId":"1363b853-d91d-409e-e924-be0aeb5af7e1"},"source":["y_pred_val_boost"],"execution_count":null,"outputs":[{"output_type":"execute_result","data":{"text/plain":["array([2, 1, 1, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1,\n","       1, 0, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 0, 1, 1, 1, 2, 0, 0, 0, 0, 0,\n","       0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n","       2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1,\n","       0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1,\n","       2, 1, 1, 0, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n","       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0,\n","       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 2, 2, 2, 2, 2,\n","       1, 1, 1, 1, 1, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1,\n","       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1,\n","       2, 1, 2, 1, 1, 2, 2, 2, 2, 2, 1, 2, 2, 0, 2, 2, 2, 2, 2, 2, 1, 1,\n","       1, 1, 0, 0, 2, 0, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 2,\n","       0, 0, 2, 0, 1, 1, 2, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0,\n","       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 0, 2, 1, 0, 0, 1, 1, 1, 1,\n","       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 0, 1, 1, 1, 1, 1, 1,\n","       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n","       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n","       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0,\n","       2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1,\n","       1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 2, 0, 0, 0, 0, 0, 0, 0, 1,\n","       1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 2, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2,\n","       2, 2, 1, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 1, 2, 2, 2, 1, 2, 2, 2, 2,\n","       1, 1, 1, 2, 2, 2, 2, 1, 2, 2, 1, 1, 1, 1, 0, 1, 2, 2, 2, 1, 2, 1,\n","       1, 1, 1, 1, 1, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 0, 1,\n","       1, 2, 1, 0, 0, 0, 2, 2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n","       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1,\n","       1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1,\n","       1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0,\n","       0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1,\n","       1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 2, 0,\n","       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0,\n","       1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 2, 1, 0, 2, 2, 2, 2, 2, 2, 0,\n","       0, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 2, 2, 2, 0, 2, 2, 2, 2,\n","       0, 0, 2, 2, 0, 0, 2, 2, 0, 2, 0, 2, 2, 2, 2, 0, 0, 2, 0, 0, 0, 0,\n","       2, 0, 0, 0, 2, 0, 2, 2, 0, 0, 2, 2, 2, 0, 2, 1, 2, 2])"]},"metadata":{"tags":[]},"execution_count":27}]},{"cell_type":"code","metadata":{"id":"ObSk7MycGbvS","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":571},"executionInfo":{"status":"ok","timestamp":1593133205709,"user_tz":240,"elapsed":801,"user":{"displayName":"Leila Abdelrahman","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GiiOBijfsdVdWn4yrdWM-_fgxn37DQ4bPiUdT7W=s64","userId":"10595688673230464384"}},"outputId":"bf9272fd-fcfe-42b8-b947-77ab186a12f0"},"source":["from sklearn import metrics \n","import pandas as pd\n","import seaborn as sn\n","cm=metrics.confusion_matrix(y_true_val,y_pred_val_boost)\n","import matplotlib.pyplot as plt\n","\n","classes=['Pos' , 'Neu' , 'Neg']\n","con_mat = tf.math.confusion_matrix(labels=y_true_val, predictions=y_pred_val_boost).numpy()\n","con_mat_norm = np.around(con_mat.astype('float') / con_mat.sum(axis=1)[:, np.newaxis], decimals=2)\n","con_mat_df = pd.DataFrame(con_mat_norm,\n","                  index = classes, \n","                  columns = classes)\n","\n","figure = plt.figure(figsize=(11, 9))\n","plt.title(\"Top Model FC Validation\")\n","sn.heatmap(con_mat_df, annot=True,cmap=plt.cm.Blues)\n","\n","\n","accuracy = (y_true_val == y_pred_val).mean()\n","print(f\"Accuracy: {accuracy}\")"],"execution_count":null,"outputs":[{"output_type":"stream","text":["Accuracy: 0.6422976501305483\n"],"name":"stdout"},{"output_type":"display_data","data":{"image/png":"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\n","text/plain":["<Figure size 792x648 with 2 Axes>"]},"metadata":{"tags":[],"needs_background":"light"}}]},{"cell_type":"code","metadata":{"id":"zXjJnUs7Z0_y","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":156},"executionInfo":{"status":"ok","timestamp":1593110888715,"user_tz":240,"elapsed":8953,"user":{"displayName":"Leila Abdelrahman","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GiiOBijfsdVdWn4yrdWM-_fgxn37DQ4bPiUdT7W=s64","userId":"10595688673230464384"}},"outputId":"a3c308ca-0eb4-41d7-8a26-a4e3d4b821f9"},"source":["from sklearn.ensemble import RandomForestClassifier\n","clf = RandomForestClassifier(max_depth=20, random_state=0 , n_estimators=500)\n","\n","clf.fit(filtered_x_train, filtered_y_train,)"],"execution_count":null,"outputs":[{"output_type":"execute_result","data":{"text/plain":["RandomForestClassifier(bootstrap=True, ccp_alpha=0.0, class_weight=None,\n","                       criterion='gini', max_depth=20, max_features='auto',\n","                       max_leaf_nodes=None, max_samples=None,\n","                       min_impurity_decrease=0.0, min_impurity_split=None,\n","                       min_samples_leaf=1, min_samples_split=2,\n","                       min_weight_fraction_leaf=0.0, n_estimators=500,\n","                       n_jobs=None, oob_score=False, random_state=0, verbose=0,\n","                       warm_start=False)"]},"metadata":{"tags":[]},"execution_count":259}]},{"cell_type":"code","metadata":{"id":"coQ83d_Inwe7","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":485},"executionInfo":{"status":"ok","timestamp":1593110890154,"user_tz":240,"elapsed":991,"user":{"displayName":"Leila Abdelrahman","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GiiOBijfsdVdWn4yrdWM-_fgxn37DQ4bPiUdT7W=s64","userId":"10595688673230464384"}},"outputId":"f3f25c57-444b-4413-a207-dff4d89e15c4"},"source":["new_pred = clf.predict(filtered_x_val)\n","print(clf.score(filtered_x_val, filtered_y_val))\n","\n","new_pred = np.argmax(new_pred , axis=1)\n","\n","new_pred"],"execution_count":null,"outputs":[{"output_type":"stream","text":["0.6220614828209765\n"],"name":"stdout"},{"output_type":"execute_result","data":{"text/plain":["array([1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1,\n","       1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1,\n","       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,\n","       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0,\n","       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,\n","       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n","       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1,\n","       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n","       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1,\n","       1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n","       1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1,\n","       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n","       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n","       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1,\n","       1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n","       1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1,\n","       1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n","       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1,\n","       1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1,\n","       1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1,\n","       1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1,\n","       1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0,\n","       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1,\n","       1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0,\n","       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n","       0, 0, 1])"]},"metadata":{"tags":[]},"execution_count":260}]},{"cell_type":"code","metadata":{"id":"FTcC2GfQv_B4","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":35},"executionInfo":{"status":"ok","timestamp":1593111323902,"user_tz":240,"elapsed":1438,"user":{"displayName":"Leila Abdelrahman","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GiiOBijfsdVdWn4yrdWM-_fgxn37DQ4bPiUdT7W=s64","userId":"10595688673230464384"}},"outputId":"6bf40aaf-6bf9-4474-a1ac-d3ce97ce2b32"},"source":["from sklearn.svm import SVC\n","clf = SVC(gamma='auto')\n","\n","clf.fit(filtered_x_train , np.argmax(filtered_y_train, axis=1))\n","\n","clf.score(filtered_x_val , np.argmax(filtered_y_val, axis=1))"],"execution_count":null,"outputs":[{"output_type":"execute_result","data":{"text/plain":["0.6347197106690777"]},"metadata":{"tags":[]},"execution_count":280}]},{"cell_type":"code","metadata":{"id":"Gyta1nBRwo0J","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":35},"executionInfo":{"status":"ok","timestamp":1593111380142,"user_tz":240,"elapsed":985,"user":{"displayName":"Leila Abdelrahman","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GiiOBijfsdVdWn4yrdWM-_fgxn37DQ4bPiUdT7W=s64","userId":"10595688673230464384"}},"outputId":"591a446f-f01f-4716-b634-98e10c718421"},"source":["from sklearn.linear_model import LogisticRegression\n","clf = LogisticRegression(max_iter=20000)\n","clf.fit(filtered_x_train , np.argmax(filtered_y_train, axis=1))\n","\n","clf.score(filtered_x_val , np.argmax(filtered_y_val, axis=1))\n","\n","import joblib\n","joblib.dump(clf, '/content/drive/My Drive/Machine-Learning-Projects/cs231n-project/models/logistic-boost-regressor.sav')"],"execution_count":null,"outputs":[{"output_type":"execute_result","data":{"text/plain":["['/content/drive/My Drive/Machine-Learning-Projects/cs231n-project/models/logistic-boost-regressor.sav']"]},"metadata":{"tags":[]},"execution_count":281}]},{"cell_type":"code","metadata":{"id":"EMqsswzMt3iY","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":468},"executionInfo":{"status":"ok","timestamp":1593111094443,"user_tz":240,"elapsed":779,"user":{"displayName":"Leila Abdelrahman","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GiiOBijfsdVdWn4yrdWM-_fgxn37DQ4bPiUdT7W=s64","userId":"10595688673230464384"}},"outputId":"7c1b2c0f-5fe9-46c3-d261-93826dbed916"},"source":["new_pred_log = clf.predict(filtered_x_val)\n","\n","new_pred_log"],"execution_count":null,"outputs":[{"output_type":"execute_result","data":{"text/plain":["array([1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0,\n","       1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1,\n","       1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0,\n","       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0,\n","       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,\n","       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1,\n","       1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1,\n","       1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n","       0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1,\n","       1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1,\n","       1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n","       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n","       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n","       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1,\n","       1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n","       1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1,\n","       1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n","       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0,\n","       1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0,\n","       0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1,\n","       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1,\n","       1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0,\n","       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1,\n","       0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0,\n","       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n","       0, 0, 1])"]},"metadata":{"tags":[]},"execution_count":277}]},{"cell_type":"code","metadata":{"id":"8ChOqkCzoxGM","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":763},"executionInfo":{"status":"ok","timestamp":1593110927398,"user_tz":240,"elapsed":800,"user":{"displayName":"Leila Abdelrahman","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GiiOBijfsdVdWn4yrdWM-_fgxn37DQ4bPiUdT7W=s64","userId":"10595688673230464384"}},"outputId":"e1559929-ffcf-4d07-cef1-6f0d3660a50b"},"source":["val_pred_pos_neu_f = val_pred_pos_neu.reshape(1,-1)\n","\n","counter = 0\n","y_pred_val_boost = y_pred_val\n","for i in range(0,len(y_pred_val_boost)):\n","  if i in val_pred_pos_neu_f:\n","    y_pred_val_boost[i] = new_pred[counter]\n","    counter += 1\n","\n","val_pred_pos_neu_f"],"execution_count":null,"outputs":[{"output_type":"execute_result","data":{"text/plain":["array([[  1,   2,   4,  16,  17,  18,  19,  20,  21,  22,  23,  24,  25,\n","         26,  27,  29,  30,  31,  32,  33,  34,  35,  36,  37,  39,  40,\n","         41,  42,  43,  44,  45,  46,  47,  48,  49,  50,  51,  52,  53,\n","         56,  68,  69,  70,  71,  72,  73,  74,  75,  76,  77,  78,  79,\n","         80,  81,  82,  83,  84,  85,  87,  88,  89,  90,  91,  92,  93,\n","         94,  95,  96,  98,  99, 100, 101, 102, 103, 104, 105, 106, 107,\n","        108, 109, 111, 112, 113, 114, 132, 133, 134, 135, 136, 137, 138,\n","        139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 152,\n","        153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165,\n","        166, 167, 169, 176, 177, 178, 179, 180, 182, 191, 192, 193, 194,\n","        195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207,\n","        208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 221,\n","        223, 224, 230, 233, 240, 241, 242, 243, 244, 245, 247, 255, 256,\n","        257, 258, 259, 260, 261, 262, 264, 265, 267, 268, 269, 271, 272,\n","        273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285,\n","        286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 299,\n","        301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313,\n","        314, 315, 316, 317, 318, 319, 320, 322, 323, 324, 325, 326, 327,\n","        328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340,\n","        341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353,\n","        354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366,\n","        367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379,\n","        380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392,\n","        393, 394, 395, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426,\n","        429, 430, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442,\n","        444, 448, 449, 450, 452, 453, 454, 455, 464, 469, 475, 479, 484,\n","        485, 486, 491, 494, 495, 496, 497, 498, 499, 503, 505, 506, 507,\n","        508, 509, 510, 512, 524, 526, 527, 528, 530, 531, 532, 533, 536,\n","        537, 538, 539, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550,\n","        551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563,\n","        564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576,\n","        577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589,\n","        590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602,\n","        603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615,\n","        616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628,\n","        629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641,\n","        642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654,\n","        655, 656, 657, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668,\n","        669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681,\n","        682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 695,\n","        696, 703, 704, 707, 708, 709, 710, 711, 712, 713, 714, 716, 721,\n","        726, 727, 730, 731, 734, 736, 741, 742, 744, 745, 746, 747, 749,\n","        750, 751, 753, 756, 757, 761, 763]])"]},"metadata":{"tags":[]},"execution_count":265}]},{"cell_type":"code","metadata":{"id":"IXiwfLqqpqyu","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":624},"executionInfo":{"status":"ok","timestamp":1593110906753,"user_tz":240,"elapsed":742,"user":{"displayName":"Leila Abdelrahman","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GiiOBijfsdVdWn4yrdWM-_fgxn37DQ4bPiUdT7W=s64","userId":"10595688673230464384"}},"outputId":"858dab6c-4c0f-4cab-8191-f83dd9c7d6c4"},"source":["y_pred_val_boost\n"],"execution_count":null,"outputs":[{"output_type":"execute_result","data":{"text/plain":["array([2, 1, 1, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1,\n","       1, 0, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 0, 1, 1, 1, 2, 0, 0, 0, 0, 0,\n","       1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n","       2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1,\n","       0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1,\n","       2, 1, 1, 0, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n","       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0,\n","       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 2, 2, 2, 2, 2,\n","       1, 0, 0, 1, 1, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1,\n","       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1,\n","       2, 1, 2, 1, 1, 2, 2, 2, 2, 2, 1, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1, 1,\n","       1, 1, 1, 1, 2, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2,\n","       1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n","       1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 0, 2, 1, 0, 0, 1, 1, 1, 1,\n","       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 0, 1, 1, 1, 1, 1, 0,\n","       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n","       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n","       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0,\n","       2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1,\n","       0, 1, 1, 1, 1, 1, 0, 0, 1, 2, 2, 1, 1, 2, 0, 0, 0, 0, 0, 0, 0, 1,\n","       1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 2, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2,\n","       2, 2, 1, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 1, 2, 2, 2, 1, 2, 2, 2, 2,\n","       0, 1, 1, 2, 2, 2, 2, 1, 2, 2, 1, 1, 0, 0, 0, 1, 2, 2, 2, 1, 2, 1,\n","       1, 1, 1, 1, 0, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 0, 1,\n","       1, 2, 1, 0, 0, 0, 2, 2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n","       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1,\n","       1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1,\n","       1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0,\n","       1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1,\n","       1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 2, 0,\n","       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1,\n","       1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0, 2, 1, 0, 2, 2, 2, 2, 2, 2, 1,\n","       0, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 2, 2, 2, 0, 2, 2, 2, 2,\n","       0, 0, 2, 2, 0, 0, 2, 2, 0, 2, 0, 2, 2, 2, 2, 0, 0, 2, 0, 0, 0, 0,\n","       2, 0, 0, 0, 2, 0, 2, 2, 0, 0, 2, 2, 2, 0, 2, 1, 2, 2])"]},"metadata":{"tags":[]},"execution_count":264}]},{"cell_type":"markdown","metadata":{"id":"L_0Y92D6xDcZ","colab_type":"text"},"source":["## Random Forest"]},{"cell_type":"code","metadata":{"id":"CcpU8Ih9sSn2","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":571},"executionInfo":{"status":"ok","timestamp":1593109906771,"user_tz":240,"elapsed":1259,"user":{"displayName":"Leila Abdelrahman","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GiiOBijfsdVdWn4yrdWM-_fgxn37DQ4bPiUdT7W=s64","userId":"10595688673230464384"}},"outputId":"974ff98c-feec-4365-b5b8-7022dd92747b"},"source":["from sklearn import metrics \n","import pandas as pd\n","import seaborn as sn\n","cm=metrics.confusion_matrix(y_true_val,y_pred_val_boost)\n","import matplotlib.pyplot as plt\n","\n","classes=['Pos' , 'Neu' , 'Neg']\n","con_mat = tf.math.confusion_matrix(labels=y_true_val, predictions=y_pred_val_boost).numpy()\n","con_mat_norm = np.around(con_mat.astype('float') / con_mat.sum(axis=1)[:, np.newaxis], decimals=2)\n","con_mat_df = pd.DataFrame(con_mat_norm,\n","                  index = classes, \n","                  columns = classes)\n","\n","figure = plt.figure(figsize=(11, 9))\n","plt.title(\"Top Model FC Validation\")\n","sn.heatmap(con_mat_df, annot=True,cmap=plt.cm.Blues)\n","\n","\n","accuracy = (y_true_val == y_pred_val).mean()\n","print(f\"Accuracy: {accuracy}\")"],"execution_count":null,"outputs":[{"output_type":"stream","text":["Accuracy: 0.6240208877284595\n"],"name":"stdout"},{"output_type":"display_data","data":{"image/png":"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\n","text/plain":["<Figure size 792x648 with 2 Axes>"]},"metadata":{"tags":[],"needs_background":"light"}}]},{"cell_type":"markdown","metadata":{"id":"qcBe5GZixFmg","colab_type":"text"},"source":["## Logistic Regression"]},{"cell_type":"code","metadata":{"id":"d-tMEN-PxKoK","colab_type":"code","colab":{}},"source":["val_pred_pos_neu_f = val_pred_pos_neu.reshape(1,-1)\n","\n","counter = 0\n","y_pred_val_boost = y_pred_val\n","for i in range(0,len(y_pred_val_boost)):\n","  if i in val_pred_pos_neu_f:\n","    y_pred_val_boost[i] = new_pred_log[counter]\n","    counter += 1\n","\n"],"execution_count":null,"outputs":[]},{"cell_type":"code","metadata":{"id":"2XGvb555xPc2","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":571},"executionInfo":{"status":"ok","timestamp":1593111100403,"user_tz":240,"elapsed":1302,"user":{"displayName":"Leila Abdelrahman","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GiiOBijfsdVdWn4yrdWM-_fgxn37DQ4bPiUdT7W=s64","userId":"10595688673230464384"}},"outputId":"fb404a6c-f858-4284-f21f-bda7c3940c6b"},"source":["from sklearn import metrics \n","import pandas as pd\n","import seaborn as sn\n","cm=metrics.confusion_matrix(y_true_val,y_pred_val_boost)\n","import matplotlib.pyplot as plt\n","\n","classes=['Pos' , 'Neu' , 'Neg']\n","con_mat = tf.math.confusion_matrix(labels=y_true_val, predictions=y_pred_val_boost).numpy()\n","con_mat_norm = np.around(con_mat.astype('float') / con_mat.sum(axis=1)[:, np.newaxis], decimals=2)\n","con_mat_df = pd.DataFrame(con_mat_norm,\n","                  index = classes, \n","                  columns = classes)\n","\n","figure = plt.figure(figsize=(11, 9))\n","plt.title(\"Top Model FC Validation\")\n","sn.heatmap(con_mat_df, annot=True,cmap=plt.cm.Blues)\n","\n","\n","accuracy = (y_true_val == y_pred_val).mean()\n","print(f\"Accuracy: {accuracy}\")"],"execution_count":null,"outputs":[{"output_type":"stream","text":["Accuracy: 0.6292428198433421\n"],"name":"stdout"},{"output_type":"display_data","data":{"image/png":"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\n","text/plain":["<Figure size 792x648 with 2 Axes>"]},"metadata":{"tags":[],"needs_background":"light"}}]}]}