{
  "nbformat": 4,
  "nbformat_minor": 0,
  "metadata": {
    "colab": {
      "name": "2.3-la-tj-ak-kc-vl-variational-autoencoder-fusion.ipynb",
      "provenance": [],
      "collapsed_sections": [],
      "toc_visible": true
    },
    "kernelspec": {
      "name": "python3",
      "display_name": "Python 3"
    },
    "accelerator": "GPU"
  },
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "pKxxqBwwrOk0",
        "colab_type": "text"
      },
      "source": [
        "# Video Sentiment Analysis in the Wild\n",
        "### Ensembling Notebook | Variational Autoencoder Fusion | CS231n\n",
        "\n",
        "This notebook runs a more complex Variational Autoencoder Fusion model on the predicted outputs of each individual modality. Assumes the preprocessing has already been completed.\n",
        "\n",
        "Contains:\n",
        "- Frame\n",
        "- Audio\n",
        "- Pose\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "CZWpWBKF7OAn",
        "colab_type": "text"
      },
      "source": [
        "# Preprocessing\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "Z6mwwTKlWFCN",
        "colab_type": "text"
      },
      "source": [
        "### Are we working with the tiny dataset or the final dataset?"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "iY1doqmoWHzR",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "IS_TINY = False"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "colab_type": "text",
        "id": "L1PH-HarmvWD"
      },
      "source": [
        "### Copy Pre-Processed Files"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "QdlpDjXpdiqz",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 35
        },
        "outputId": "2555aa81-103a-480a-aa63-0d9149eaf8c8"
      },
      "source": [
        "!ls"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "sample_data\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "62U4_AtA4xsz",
        "colab_type": "text"
      },
      "source": [
        "## Run this if you are working with concatenations not written to disk"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab_type": "code",
        "id": "WhS9Mb83mvWR",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 236
        },
        "outputId": "c01ee7bc-467c-4cb6-e89c-a387a8eba394"
      },
      "source": [
        "\n",
        "# FULL_PATH = 'My Drive/cs231n-project/datasets/emotiw'\n",
        "FULL_PATH = 'My Drive/Machine-Learning-Projects/cs231n-project/datasets/emotiw'\n",
        "if IS_TINY:\n",
        "    print(\"Using tiny dataset...\")\n",
        "    !cp /content/drive/'$FULL_PATH'/train-tiny-* .\n",
        "    !cp /content/drive/'$FULL_PATH'/val-tiny-* .\n",
        "else:\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": 1,
      "outputs": [
        {
          "output_type": "error",
          "ename": "NameError",
          "evalue": "ignored",
          "traceback": [
            "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
            "\u001b[0;31mNameError\u001b[0m                                 Traceback (most recent call last)",
            "\u001b[0;32m<ipython-input-1-cb7631e2ce44>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m      2\u001b[0m \u001b[0;31m# FULL_PATH = 'My Drive/cs231n-project/datasets/emotiw'\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      3\u001b[0m \u001b[0mFULL_PATH\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m'My Drive/Machine-Learning-Projects/cs231n-project/datasets/emotiw'\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 4\u001b[0;31m \u001b[0;32mif\u001b[0m \u001b[0mIS_TINY\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m      5\u001b[0m     \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"Using tiny dataset...\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      6\u001b[0m     \u001b[0mget_ipython\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msystem\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"cp /content/drive/'$FULL_PATH'/train-tiny-* .\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
            "\u001b[0;31mNameError\u001b[0m: name 'IS_TINY' is not defined"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "yXxCkE_DUvEv",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 52
        },
        "outputId": "b5a71f29-45fa-4173-978b-3b1840f3b8a5"
      },
      "source": [
        "!ls"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "drive\t\t\t\t   ensemble-scene-pose-audio-face-v2.zip\n",
            "ensemble-scene-pose-audio-face-v2  sample_data\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "sqHRPvB5Cm4F",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "# RUN THIS FOR TINY FILES (zip does not include root folder)\n",
        "\n",
        "if IS_TINY:\n",
        "    !unzip -d train-tiny-audio train-tiny-audio.zip\n",
        "    !unzip -d train-tiny-faces train-tiny-faces.zip\n",
        "    !unzip -d train-tiny-frames train-tiny-frames.zip\n",
        "    !unzip -d train-tiny-pose train-tiny-pose.zip\n",
        "\n",
        "    !unzip -d val-tiny-audio val-tiny-audio.zip\n",
        "    !unzip -d val-tiny-faces val-tiny-faces.zip\n",
        "    !unzip -d val-tiny-frames val-tiny-frames.zip\n",
        "    !unzip -d val-tiny-pose val-tiny-pose.zip\n",
        "\n",
        "\n",
        "# RUN THIS FOR FINAL FILES (zip includes root folder)\n",
        "\n",
        "if not IS_TINY:\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"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "gF6Fy4-SLJVP",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "!ls"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "0jEaDQAsS8XQ",
        "colab_type": "text"
      },
      "source": [
        "### Run Classifiers"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab_type": "code",
        "id": "ZWXpYjHnnCVJ",
        "colab": {}
      },
      "source": [
        "%tensorflow_version 2.x"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab_type": "code",
        "id": "kwnwrrfUnCVN",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 35
        },
        "outputId": "1754b6d0-d4f1-41e9-c32a-a33fd9767e5f"
      },
      "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": 35
        },
        "outputId": "f8f07bbf-357d-4ac5-f003-c8f8503d2214"
      },
      "source": [
        "!pwd"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "/content\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "O_9UA5NPVYro",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "!git clone 'https://github.com/kevincong95/cs231n-emotiw.git'"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "Z7kRhNvrVnbt",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "!mv train-* cs231n-emotiw\n",
        "!mv val-* cs231n-emotiw"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "tauiFf5eVtpP",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "!mv Train* cs231n-emotiw\n",
        "!mv Val* cs231n-emotiw"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "qiVbcNhfVwa2",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "!ls"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "hPM9Vm7gVxuR",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "import os\n",
        "os.chdir('/content/cs231n-emotiw')\n",
        "!pwd"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "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_classifer import FaceClassifier\n",
        "from src.classifiers.utils import get_num_samples\n",
        "import numpy as np\n",
        "\n",
        "def run_classifier(layers_to_extract, audio_folder='train-final-audio', frames_folder='train-final-frames', pose_folder='train-final-pose', 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",
        "    pose_classifier = PoseClassifier(pose_folder, model_location='https://storage.googleapis.com/cs231n-emotiw/models/pose-classifier-64lstm-0.01reg.h5', is_test=False)\n",
        "    \n",
        "    classifiers = [audio_classifier, frames_classifier, pose_classifier]\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": {}
      },
      "source": [
        "import tensorflow as tf\n",
        "\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\",\n",
        "    \"concatenate_5\",\n",
        "    \"bidirectional_1\",\n",
        "    \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\", 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\", labels_file=\"Val_labels.txt\")\n",
        "\n",
        "print(X_train.shape)\n",
        "print(y_train.shape)"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "BK2cBr_PN0FU",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "y_train = np.argmax(Y_train, axis=1) + 1\n",
        "y_valid = np.argmax(Y_valid, axis=1) + 1"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "E0uS1aBhegqF",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "y_train_np = y_train - 1\n",
        "y_val_np = y_valid - 1 "
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "kXNhfFvFho1Q",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 52
        },
        "outputId": "67404c9b-dd99-4551-e419-d79f5618f1d2"
      },
      "source": [
        "!ls"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "drive\t\t\t\t   ensemble-scene-pose-audio-face-v2.zip\n",
            "ensemble-scene-pose-audio-face-v2  sample_data\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "AEmbb_hOqF_Z",
        "colab_type": "text"
      },
      "source": [
        "## Load Pre-Classified Ensembling\n",
        "Because I don't want to wait around for the model to predict everything again\n",
        "\n",
        "Pre-Classified in: https://colab.research.google.com/drive/1rAlIfrP4exQ8m4mUIARAag4xlF-rQnHf?authuser=3#scrollTo=VY0tll5ybslJ"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "Yd_wUMuIfI_B",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 124
        },
        "outputId": "1953514c-f2c7-4be5-c4cf-876f5f684cd2"
      },
      "source": [
        "from google.colab import drive\n",
        "drive.mount('/content/drive')"
      ],
      "execution_count": 2,
      "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": "G0zv6L6hhzsP",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 89
        },
        "outputId": "79081ce1-beb3-4be2-e94a-eb8c2167174a"
      },
      "source": [
        "# Load pre-classified ensembling input if you don't want to wait\n",
        "from google.colab import drive\n",
        "drive.mount('/content/drive')\n",
        "\n",
        "!cp /content/drive/'My Drive/Machine-Learning-Projects'/cs231n-project/datasets/emotiw/ensemble-scene-pose-audio-face.zip .\n",
        "!unzip ensemble-scene-pose-audio-face.zip\n"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Drive already mounted at /content/drive; to attempt to forcibly remount, call drive.mount(\"/content/drive\", force_remount=True).\n",
            "Archive:  ensemble-scene-pose-audio-face.zip\n",
            "replace ensemble-scene-pose-audio-face/y_valid.npy? [y]es, [n]o, [A]ll, [N]one, [r]ename: N\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "-IgMmVPLpxQi",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "!ls ensemble-scene-pose-audio-face"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "MQc6tRpwp13j",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 121
        },
        "outputId": "1d740ddc-a55e-4fbb-860d-62418e48dec6"
      },
      "source": [
        "import numpy as np\n",
        "\n",
        "!cp '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"
      ],
      "execution_count": 3,
      "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"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "0khUqR9b0nCm",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "\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",
        "\n"
      ],
      "execution_count": 5,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "Sl4hQZhJqyeW",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "y_train = np.argmax(Y_train, axis=1) + 1\n",
        "y_valid = np.argmax(Y_valid, axis=1) + 1"
      ],
      "execution_count": 6,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "512flL7QmWzp",
        "colab_type": "text"
      },
      "source": [
        "# Variational Autoencoder\n",
        "\n",
        "This code was adapted from the Keras Convolutional VAE tutorial."
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "Ro10CMLBWW0D",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "y_train_np = y_train - 1\n",
        "y_valid_np = y_valid - 1"
      ],
      "execution_count": 7,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "OKMJhT8QLJmw",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "# Variational Autoencoders\n",
        "# - These are probabalistic autoencoders meaning the output is partly determined by chance\n",
        "# - These are generative and can generate **new** inputs just by looking at the training set. \n",
        "# \n",
        "# There are 2 loss functions\n",
        "# - 1. Reconstruction loss (usual)\n",
        "# - 2. Latent loss: This pushes the autoencoder to have codings that look like they were sampled from a '\n",
        "#       guassian distribution. It is the **divergence** between the target distr and the actual distribution of\n",
        "#       codings.\n",
        "#       L = -1/2(sum(1+ log(sigma^2) - sigma^2 - mu^2)) or \n",
        "#       L = -1/2sum(1 + gamma - exp(gamma) - mu^2) where gamma = log(sigma^2)"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "YfHHqIQYmc86",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "import tensorflow as tf\n",
        "\n",
        "import os\n",
        "import time\n",
        "import numpy as np\n",
        "import glob\n",
        "import matplotlib.pyplot as plt\n",
        "import PIL\n",
        "import imageio\n",
        "\n",
        "from IPython import display"
      ],
      "execution_count": 8,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "38dvdAwseOzf",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 35
        },
        "outputId": "3e575701-f0f2-409b-c737-c6ccd57792c5"
      },
      "source": [
        "import cv2\n",
        "\n",
        "from sklearn.preprocessing import Normalizer , StandardScaler , MinMaxScaler\n",
        "\n",
        "norm = StandardScaler() #Normalizer()\n",
        "X_train_norm = norm.fit_transform(X_train)\n",
        "X_val_norm = norm.fit_transform(X_valid)\n",
        "\n",
        "def reshape_X(input_x):\n",
        "  X_train_expand = np.expand_dims(input_x , axis=1)\n",
        "  all_expanded_x = []\n",
        "  for x in X_train_expand:\n",
        "    X_sample_train = np.concatenate([x]*310)\n",
        "    X_sample_train = cv2.resize(X_sample_train, (28, 28))\n",
        "    all_expanded_x.append(X_sample_train)\n",
        "\n",
        "    \n",
        "  all_expanded_x = np.asarray(all_expanded_x, dtype='float32')\n",
        "  all_expanded_x = np.expand_dims(all_expanded_x , axis=3)\n",
        "  \n",
        "  return all_expanded_x\n",
        "\n",
        "\n",
        "X_train_img = reshape_X(X_train_norm)\n",
        "X_val_img = reshape_X(X_val_norm)\n",
        "print(X_val_img.shape)\n",
        "\n",
        "\n",
        "\n",
        "\n"
      ],
      "execution_count": 9,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "(766, 28, 28, 1)\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "xgagQkCm7Eam",
        "colab_type": "text"
      },
      "source": [
        "## Visualize the Concatenated Layers as Images"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "7pbcFgmm6Io9",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 465
        },
        "outputId": "53ab532b-facf-4da6-ed47-091e28d1eb2b"
      },
      "source": [
        "classes = [\"Positive\" , \"Neutral\" , \"Negative\"]\n",
        "\n",
        "def show_batch(all_x, all_y):\n",
        "    plt.figure(figsize=(30,30))\n",
        "    for n in range(0,10):\n",
        "          ax = plt.subplot(5,5,n+1)\n",
        "          plt.imshow(all_x[n].squeeze(), cmap='gray')\n",
        "          plt.title(classes[all_y[n]], fontsize=40)\n",
        "          plt.axis('off')\n",
        "\n",
        "show_batch(X_train_img, y_train_np)"
      ],
      "execution_count": 10,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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fOWguAc+8IGD4g466KBBcd/97nfz9a9/Peeee24uvPDC/PjHP84111yTG2+8Mbvvvnv22muvHHroodlzzz1z2GGHZaedFj8Z7eY3v/mg/d7nPvcZFPesZz1rUNyTnvSkQXGHH374oLgf/OAHg+K+853vDIq77LLLBsVt3LhxUFySXH/99YPiHve4xy0dlOSqq64aFLfDDsPqyccff/yguIsvvnhQ3Le+9a2ydNS27W53u9ugXPuZz3xmUHtvetObBsUdd9xxg+LOOeecQXEPechDBsW9+MUvHhR397vffVBcktzlLncZFHfLW45feWOyH/942Hfpt771rYPihuaKI488clDcLrvsMijuqKOOGhQ3NCd/7GMfGxQ3dFxw4YUXDoo74ogjBsXd8Y53HBSXJA972MMGxT396U8fFPflL3958L6HeP/73z8obujPwqMf/ejtOtdu3LhxUJ799re/Pai9Pffcc1DcueeeOyjuxBNPHBS3YcOGQXHPfe5zB8UNHT8lw39fDz300EFx11674K02GrvtttuKxn3/+98fFHfAAQcMirvyyisHxe29996D4u5617sOinvNa14zKG6fffYZFDf08xg6Nk+Syy+/fFDc0L+lQ+/d+4Y3vGFQ3NDvkjvvvPOguFNOOWW7zrNHHXXUoA/omc985qD2/uqv/mpQ3GMe85hBceeff/6guKFjxQ984AOD4qYZmwzNJ/e4xz0GxX3ve98bFHfZZZflwgsvzKWXXporrrgiV111Va6//vrUWrPLLrtk1113zT777JO99947++23X3bcccdF2xv6fXZoXrz00ksHxZ133nmD4p7znOcMinvHO94xKO6nPx12Fb9dd911UNzQ71TJ8Bw/9PvX0Dw79Hvphz/84UFxS81HzXvd6163XefZZPjcwRvf+MZB7Q39rv/sZz97UNzQn6Gh3yuvu+66QXGf+MQnBsUlyQ9/+MNBcSeccMKguP32229Q3Kc+9alBcWefffaguKc97WmD4h7+8IcPijv55JMHxQ0dFz32sY8dFDf08xg61v/0pz89KO6kk04aFJcM/879vOc9b1Dcm9/85kFxQ3Pt0HrG0Pf6u9/97ma51iXstlG3uc1t8uAHPzgPfvCDF40bmpgAAACAbcv8QaWHHXbYonFXX331VuoRALCWuIQdAAAAAAAADQUkAAAAAAAAGgpIAAAAAAAANBSQAAAAAAAAaCggAQAAAAAA0FBAAgAAAAAAoKGABAAAAAAAQEMBCQAAAAAAgIYCEgAAAAAAAA0FJAAAAAAAABoKSAAAAAAAADQUkAAAAAAAAGgoIAEAAAAAANBQQAIAAAAAAKChgAQAAAAAAEBDAQkAAAAAAICGAhIAAAAAAAANBSQAAAAAAAAaCkgAAAAAAAA0FJAAAAAAAABoKCABAAAAAADQUEACAAAAAACgoYAEAAAAAABAQwEJAAAAAACAhgISAAAAAAAADQUkAAAAAAAAGgpIAAAAAAAANBSQAAAAAAAAaCggAXV0g1QAACAASURBVAAAAAAA0FBAAgAAAAAAoKGABAAAAAAAQEMBCQAAAAAAgIYCEgAAAAAAAA0FJAAAAAAAABoKSAAAAAAAADQUkAAAAAAAAGgoIAEAAAAAANBQQAIAAAAAAKChgAQAAAAAAEBDAQkAAAAAAICGAhIAAAAAAAANBSQAAAAAAAAaCkgAAAAAAAA0FJAAAAAAAABoKCABAAAAAADQUEACAAAAAACgoYAEAAAAAABAQwEJAAAAAACAhgISAAAAAAAADQUkAAAAAAAAGgpIAAAAAAAANBSQAAAAAAAAaCggAQAAAAAA0FBAAgAAAAAAoKGABAAAAAAAQEMBCQAAAAAAgIYCEgAAAAAAAA0FJAAAAAAAABoKSAAAAAAAADQUkAAAAAAAAGgoIAEAAAAAANBQQAIAAAAAAKChgAQAAAAAAEBDAQkAAAAAAICGAhIAAAAAAAANBSQAAAAAAAAaCkgAAAAAAAA0FJAAAAAAAABoKCABAAAAAADQUEACAAAAAACgoYAEAAAAAABAQwEJAAAAAACAhgISAAAAAAAADQUkAAAAAAAAGgpIAAAAAAAANBSQAAAAAAAAaCggAQAAAAAA0FBAAgAAAAAAoKGABAAAAAAAQEMBCQAAAAAAgIYCEgAAAAAAAA0FJAAAAAAAABoKSAAAAAAAADQUkAAAAAAAAGgoIAEAAAAAANBQQAIAAAAAAKChgAQAAAAAAEBDAQkAAAAAAICGAhIAAAAAAAANBSQAAAAAAAAaCkgAAAAAAAA0FJAAAAAAAABoKCABAAAAAADQUEACAAAAAACgoYAEAAAAAABAQwEJAAAAAACAhgISAAAAAAAADQUkAAAAAAAAGgpIAAAAAAAANBSQAAAAAAAAaCggAQAAAAAA0FBAAgAAAAAAoKGABAAAAAAAQEMBCQAAAAAAgIYCEgAAAAAAAA0FJAAAAAAAABoKSAAAAAAAADQUkAAAAAAAAGgoIAEAAAAAANBQQAIAAAAAAKChgAQAAAAAAEBDAQkAAAAAAICGAhIAAAAAAAANBSQAAAAAAAAaCkgAAAAAAAA0FJAAAAAAAABoKCABAAAAAADQUEACAAAAAACgoYAEAAAAAABAQwEJAAAAAACAhgISAAAAAAAADQUkAAAAAAAAGgpIAAAAAAAANBSQAAAAAAAAaCggAQAAAAAA0FBAAgAAAAAAoKGABAAAAAAAQEMBCQAAAAAAgIYCEgAAAAAAAA0FJAAAAAAAABoKSAAAAAAAADQUkAAAAAAAAGgoIAEAAAAAANBQQAIAAAAAAKChgAQAAAAAAEBDAQkAAAAAAICGAhIAAAAAAAANBSQAAAAAAAAaCkgAAAAAAAA0FJAAAAAAAABoKCABAAAAAADQUEACAAAAAACgoYAEAAAAAABAQwEJAAAAAACAhgISAAAAAAAADQUkAAAAAAAAGgpIAAAAAAAANBSQAAAAAAAAaCggAQAAAAAA0FBAAgAAAAAAoKGABAAAAAAAQEMBCQAAAAAAgIYCEgAAAAAAAA0FJAAAAAAAABoKSAAAAAAAADQUkAAAAAAAAGgoIAEAAAAAANBQQAIAAAAAAKChgAQAAAAAAEBDAQkAAAAAAICGAhIAAAAAAAANBSQAAAAAAAAaCkgAAAAAAAA0FJAAAAAAAABoKCABAAAAAADQUEACAAAAAACgoYAEAAAAAABAQwEJAAAAAACAhgISAAAAAAAADQUkAAAAAAAAGgpIAAAAAAAANBSQAAAAAAAAaCggAQAAAAAA0FBAAgAAAAAAoKGABAAAAAAAQEMBCQAAAAAAgIYCEgAAAAAAAA0FJAAAAAAAABoKSAAAAAAAADQUkAAAAAAAAGgoIAEAAAAAANBQQAIAAAAAAKChgAQAAAAAAEBDAQkAAAAAAICGAhIAAAAAAAANBSQAAAAAAAAaCkgAAAAAAAA0FJAAAAAAAABoKCABAAAAAADQUEACAAAAAACgoYAEAAAAAABAQwEJAAAAAACAhgISAAAAAAAADQUkAAAAAAAAGgpIAAAAAAAANBSQAAAAAAAAaCggAQAAAAAA0FBAAgAAAAAAoKGABAAAAAAAQEMBCQAAAAAAgIYCEgAAAAAAAA0FJAAAAAAAABoKSAAAAAAAADQUkAAAAAAAAGgoIAEAAAAAANBQQAIAAAAAAKChgAQAAAAAAEBDAQkAAAAAAICGAhIAAAAAAAANBSQAAAAAAAAaCkgAAAAAAAA0FJAAAAAAAABoKCABAAAAAADQUEACAAAAAACgoYAEAAAAAABAQwEJAAAAAACAhgISAAAAAAAADQUkAAAAAAAAGgpIAAAAAAAANBSQAAAAAAAAaCggAQAAAAAA0FBAAgAAAAAAoKGABAAAAAAAQEMBCQAAAAAAgIYCEgAAAAAAAA0FJAAAAAAAABoKSAAAAAAAADQUkAAAAAAAAGgoIAEAAAAAANBQQAIAAAAAAKChgAQAAAAAAEBDAQkAAAAAAICGAhIAAAAAAAANBSQAAAAAAAAaCkgAAAAAAAA0FJAAAAAAAABoKCABAAAAAADQUEACAAAAAACgoYAEAAAAAABAQwEJAAAAAACAhgISAAAAAAAADQUkAAAAAAAAGgpIAAAAAAAANBSQAAAAAAAAaCggAQAAAAAA0FBAAgAAAAAAoKGABAAAAAAAQEMBCQAAAAAAgIYCEgAAAAAAAA0FJAAAAAAAABoKSAAAAAAAADQUkAAAAAAAAGgoIAEAAAAAANBQQAIAAAAAAKChgAQAAAAAAEBDAQkAAAAAAICGAhIAAAAAAAANBSQAAAAAAAAaCkgAAAAAAAA0FJAAAAAAAABoKCABAAAAAADQUEACAAAAAACgoYAEAAAAAABAQwEJAAAAAACAhgISAAAAAAAADQUkAAAAAAAAGgpIAAAAAAAANBSQAAAAAAAAaCggAQAAAAAA0FBAAgAAAAAAoKGABAAAAAAAQEMBCQAAAAAAgIYCEgAAAAAAAA0FJAAAAAAAABoKSAAAAAAAADQUkAAAAAAAAGgoIAEAAAAAANBQQAIAAAAAAKChgAQAAAAAAECj1Fpn3QcAAAAAAADWEGcgAQAAAAAA0FBAAgAAAAAAoKGABAAAAAAAQEMBCQAAAAAAgIYCEgAAAAAAAA0FJAAAAAAAABoKSAAAAAAAADQUkAAAAAAAAGgoIAEAAAAAANBQQAIAAAAAAKChgAQAAAAAAEBDAQkAAAAAAICGAhIAAAAAAAANBSQAAAAAAAAaCkgAAAAAAAA0FJAAAAAAAABoKCAB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hD2HZLhM+i4Z7jN0XYbLxS+ttX5zhbfhFWnv9XNYrXX6ZmbzLbdzkh/PsHN3twyXxV+V5MJa65dXYlu3F6WUgzO87ntlCPBuzXDmwRczvOZXb8PNg+3epH89IsO44vfIcIbfNUk+k+Siuow3yMk6D8kwTMW+Ga7OrBlC+csz9MbFgncWUErZNcnDMgxVsleGYQBuzHBA4bIMZ4b2HOwAthJ9dm3RZ2Ft0mvXFr0Wtm8reYx30j+OzHACwV0z9I3Lk3xk1tttrEallB2SPDjJQzL87m7KcIz507XWS7fltq13AiSSJKWUDyZ59GTyliR7bqlL0AEAAAAAgLXFEHaklHLvJMeMZl0kPAIAAAAAgPVLgLTOTS6t/OMMN92c885ttDkAAAAAAMAqIEDaDpVSfquU8rxSyi5L1O2Z5F0ZbpI25/okb1/J7QMAAAAAAFa3nbb1BrAi9kvy6iSvLqWcmeSCJJ/NcMO2Oye5V4Yh656b5O5Ty/5arfVbW29TAQAAAACA1UaAtH27e5LnTx49/qDW+rYV3B4AAAAAAGANMITd9umbM9Z/LcmJtdbfXImNAQAAAAAA1pZSa13wm6eeeurC3xx5xjOe0fVkf/mXf9lV99jHPrar7p73vGdX3d/+7d921X3nO9/pqnvQgx7UVZckF154YVfdzjvv3FV3yCGHdNVdfPHF+cxnPpMvfvGLufrqq3PdddfllltuSa01d77znbPnnnvmwAMPzIYNG3LIIYdkp50WvxjtPve5T9fz3v/+9++qe/3rX99V1/sav/KVr+yqe/e7391V94UvfKGrbo899uiqO/jgg7vqkuT666/vqnvrW9/aVffGN76xq26fffbpqjvssMO66j73uc911dVaS1fhdmyPPfbo6rWve93rutZ38803d9W97GUv66o755xzuurOOuusrrovf/nLXXUHHHBAV12SXH755V11hx56aFfdbbfd1lXX+7s+//zzu+pOPPHErroDDzywq+4pT3lKV13v++7jH//4rrpvfrPvPIbefnfNNdd01R111FFddbOs80//9E+76k455ZSuut13372r7kUvelFX3Y033thVt8cee6zrXvuEJzyhq8/2/m+dffbZXXVXXnllV92pp57aVdf7d/G4xz1u6aIkN9xwQ1ddkjz84Q/vquvtE+eee25X3W677dZVd6c73amr7pJLLumq69136+0l+++/f1fdnnvu2VX3R3/0R111GzZs6Krba6+9uuqe/OQnd9UlyX777ddV95KXvKSr7tprr+2qu/e9791Vd9BBB3XV3XrrrV11559//rrus2eeeWZXn33zm9/ctb7ezxy9+5UvfOELu+oe85jHdNU9+9nP7qr7/Oc/31WXJIcffnhXXW9/uuqqq7rqev+v3//+93fV9f4P9h5jeNSjHtVV13u8qff3d8UVV3TVnXfeeV11X//617vqjjvuuK66pP9Y1zve8Y6uut738N73lt7jYb3v4eedd9667rNJcuyxx3b12mc961ld6zv55JO76nr/H0477bSuut7Pi7vuumtX3Y477thVlyQf+chHuurue9/7dtU96UlP6qp773vf21X32c9+tqvuiU98Yldd72v80Ic+tKvuBS94QVddKX3/rkceeWRX3aWXXtpVd9JJJ3XVXXDBBV11Sf9nv1e96lVddb2v3Ve+8pWuugc/+MFddTfddFNX3RlnnLHJi2cIu+3U3nvvnb333jvHHHPMonW9H3oBAAAAAID1wxB2AAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANARIAAAAAAAANEqtdVtvAwAAAAAAAKuIK5AAAAAAAABoCJAAAAAAAABoCJAAAAAAAABoCJAAAAAAAABoCJAAAAAAAABoCJAAAAAAAABo/H/aONaan4WMEAAAAABJRU5ErkJggg==\n",
            "text/plain": [
              "<Figure size 2160x2160 with 10 Axes>"
            ]
          },
          "metadata": {
            "tags": [],
            "needs_background": "light"
          }
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "IbEF7VYqcuVp",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 607
        },
        "outputId": "1aa6a824-5132-4bbe-cc89-da0511adf7c7"
      },
      "source": [
        "'''Example of VAE on MNIST dataset using MLP\n",
        "The VAE has a modular design. The encoder, decoder and VAE\n",
        "are 3 models that share weights. After training the VAE model,\n",
        "the encoder can be used to generate latent vectors.\n",
        "The decoder can be used to generate MNIST digits by sampling the\n",
        "latent vector from a Gaussian distribution with mean = 0 and std = 1.\n",
        "# Reference\n",
        "[1] Kingma, Diederik P., and Max Welling.\n",
        "\"Auto-Encoding Variational Bayes.\"\n",
        "https://arxiv.org/abs/1312.6114\n",
        "'''\n",
        "\n",
        "from __future__ import absolute_import\n",
        "from __future__ import division\n",
        "from __future__ import print_function\n",
        "\n",
        "from keras.layers import Lambda, Input, Dense\n",
        "from keras.models import Model\n",
        "from keras.datasets import mnist\n",
        "from keras.losses import mse, binary_crossentropy\n",
        "from keras.utils import plot_model\n",
        "from keras import backend as K\n",
        "\n",
        "import numpy as np\n",
        "import matplotlib.pyplot as plt\n",
        "import argparse\n",
        "import os\n",
        "\n",
        "\n",
        "# reparameterization trick\n",
        "# instead of sampling from Q(z|X), sample epsilon = N(0,I)\n",
        "# z = z_mean + sqrt(var) * epsilon\n",
        "def sampling(args):\n",
        "    \"\"\"Reparameterization trick by sampling from an isotropic unit Gaussian.\n",
        "    # Arguments\n",
        "        args (tensor): mean and log of variance of Q(z|X)\n",
        "    # Returns\n",
        "        z (tensor): sampled latent vector\n",
        "    \"\"\"\n",
        "\n",
        "    z_mean, z_log_var = args\n",
        "    batch = K.shape(z_mean)[0]\n",
        "    dim = K.int_shape(z_mean)[1]\n",
        "    # by default, random_normal has mean = 0 and std = 1.0\n",
        "    epsilon = K.random_normal(shape=(batch, dim))\n",
        "    return z_mean + K.exp(0.5 * z_log_var) * epsilon\n",
        "\n",
        "\n",
        "def plot_results(models,\n",
        "                 data,\n",
        "                 batch_size=128,\n",
        "                 model_name=\"vae_mnist\"):\n",
        "    \"\"\"Plots labels and MNIST digits as a function of the 2D latent vector\n",
        "    # Arguments\n",
        "        models (tuple): encoder and decoder models\n",
        "        data (tuple): test data and label\n",
        "        batch_size (int): prediction batch size\n",
        "        model_name (string): which model is using this function\n",
        "    \"\"\"\n",
        "\n",
        "    encoder, decoder = models\n",
        "    x_test, y_test = data\n",
        "    os.makedirs(model_name, exist_ok=True)\n",
        "\n",
        "    filename = os.path.join(model_name, \"vae_mean.png\")\n",
        "    # display a 2D plot of the digit classes in the latent space\n",
        "    z_mean, _, _ = encoder.predict(x_test,\n",
        "                                   batch_size=batch_size)\n",
        "    plt.figure(figsize=(12, 10))\n",
        "    plt.scatter(z_mean[:, 0], z_mean[:, 1], c=y_test)\n",
        "    plt.colorbar()\n",
        "    plt.xlabel(\"z[0]\")\n",
        "    plt.ylabel(\"z[1]\")\n",
        "    plt.savefig(filename)\n",
        "    plt.show()\n",
        "\n",
        "    # filename = os.path.join(model_name, \"digits_over_latent.png\")\n",
        "    # #display a 30x30 2D manifold of digits\n",
        "    # n = 1\n",
        "    # digit_size = 28\n",
        "    # figure = np.zeros((digit_size * n, digit_size * n))\n",
        "    # # # linearly spaced coordinates corresponding to the 2D plot\n",
        "    # # # of digit classes in the latent space\n",
        "    # grid_x = np.linspace(-4, 4, n)\n",
        "    # grid_y = np.linspace(-4, 4, n)[::-1]\n",
        "\n",
        "    # for i, yi in enumerate(grid_y):\n",
        "    #     for j, xi in enumerate(grid_x):\n",
        "    #         z_sample = np.array([[xi, yi]])\n",
        "    #         x_decoded = decoder.predict(z_sample)\n",
        "    #         digit = x_decoded[0].reshape(digit_size, digit_size)\n",
        "    #         figure[i * digit_size: (i + 1) * digit_size,\n",
        "    #                j * digit_size: (j + 1) * digit_size] = digit\n",
        "\n",
        "    # plt.figure(figsize=(10, 10))\n",
        "    # start_range = digit_size // 2\n",
        "    # end_range = (n - 1) * digit_size + start_range + 1\n",
        "    # pixel_range = np.arange(start_range, end_range, digit_size)\n",
        "    # sample_range_x = np.round(grid_x, 1)\n",
        "    # sample_range_y = np.round(grid_y, 1)\n",
        "    # plt.xticks(pixel_range, sample_range_x)\n",
        "    # plt.yticks(pixel_range, sample_range_y)\n",
        "    # plt.xlabel(\"z[0]\")\n",
        "    # plt.ylabel(\"z[1]\")\n",
        "    # plt.imshow(figure, cmap='Greys_r')\n",
        "    # plt.savefig(filename)\n",
        "    # plt.show()\n",
        "\n",
        "\n",
        "# Our dataset\n",
        "(x_train, y_train), (x_test, y_test) = (X_train_img , y_train_np), (X_val_img, y_valid_np)\n",
        "\n",
        "image_size = x_train.shape[1]\n",
        "original_dim = image_size * image_size\n",
        "x_train = np.reshape(x_train, [-1, original_dim])\n",
        "x_test = np.reshape(x_test, [-1, original_dim])\n",
        "x_train = x_train.astype('float32') / 255\n",
        "x_test = x_test.astype('float32') / 255\n",
        "\n",
        "# network parameters\n",
        "input_shape = (original_dim, )\n",
        "intermediate_dim = 512\n",
        "batch_size = 128\n",
        "latent_dim = 20\n",
        "epochs = 200\n",
        "\n",
        "# VAE model = encoder + decoder\n",
        "# build encoder model\n",
        "inputs = Input(shape=input_shape, name='encoder_input')\n",
        "x = Dense(intermediate_dim, activation='selu')(inputs)\n",
        "z_mean = Dense(latent_dim, name='z_mean')(x)\n",
        "z_log_var = Dense(latent_dim, name='z_log_var')(x)\n",
        "\n",
        "# use reparameterization trick to push the sampling out as input\n",
        "# note that \"output_shape\" isn't necessary with the TensorFlow backend\n",
        "z = Lambda(sampling, output_shape=(latent_dim,), name='z')([z_mean, z_log_var])\n",
        "\n",
        "# instantiate encoder model\n",
        "encoder = Model(inputs, [z_mean, z_log_var, z], name='encoder')\n",
        "encoder.summary()\n",
        "plot_model(encoder, to_file='vae_mlp_encoder.png', show_shapes=True)\n",
        "\n",
        "# build decoder model\n",
        "latent_inputs = Input(shape=(latent_dim,), name='z_sampling')\n",
        "x = Dense(intermediate_dim, activation='selu')(latent_inputs)\n",
        "outputs = Dense(original_dim, activation='sigmoid')(x)\n",
        "\n",
        "# instantiate decoder model\n",
        "decoder = Model(latent_inputs, outputs, name='decoder')\n",
        "decoder.summary()\n",
        "plot_model(decoder, to_file='vae_mlp_decoder.png', show_shapes=True)\n",
        "\n",
        "# instantiate VAE model\n",
        "outputs = decoder(encoder(inputs)[2])\n",
        "vae = Model(inputs, outputs, name='vae_mlp')\n",
        "\n"
      ],
      "execution_count": 11,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Using TensorFlow backend.\n"
          ],
          "name": "stderr"
        },
        {
          "output_type": "stream",
          "text": [
            "Model: \"encoder\"\n",
            "__________________________________________________________________________________________________\n",
            "Layer (type)                    Output Shape         Param #     Connected to                     \n",
            "==================================================================================================\n",
            "encoder_input (InputLayer)      (None, 784)          0                                            \n",
            "__________________________________________________________________________________________________\n",
            "dense_1 (Dense)                 (None, 512)          401920      encoder_input[0][0]              \n",
            "__________________________________________________________________________________________________\n",
            "z_mean (Dense)                  (None, 20)           10260       dense_1[0][0]                    \n",
            "__________________________________________________________________________________________________\n",
            "z_log_var (Dense)               (None, 20)           10260       dense_1[0][0]                    \n",
            "__________________________________________________________________________________________________\n",
            "z (Lambda)                      (None, 20)           0           z_mean[0][0]                     \n",
            "                                                                 z_log_var[0][0]                  \n",
            "==================================================================================================\n",
            "Total params: 422,440\n",
            "Trainable params: 422,440\n",
            "Non-trainable params: 0\n",
            "__________________________________________________________________________________________________\n",
            "Model: \"decoder\"\n",
            "_________________________________________________________________\n",
            "Layer (type)                 Output Shape              Param #   \n",
            "=================================================================\n",
            "z_sampling (InputLayer)      (None, 20)                0         \n",
            "_________________________________________________________________\n",
            "dense_2 (Dense)              (None, 512)               10752     \n",
            "_________________________________________________________________\n",
            "dense_3 (Dense)              (None, 784)               402192    \n",
            "=================================================================\n",
            "Total params: 412,944\n",
            "Trainable params: 412,944\n",
            "Non-trainable params: 0\n",
            "_________________________________________________________________\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "BF6tZb_3fEyt",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 1000
        },
        "outputId": "17c6dd0f-aafd-4b4d-8165-f52437f734a9"
      },
      "source": [
        "import tensorflow\n",
        "models = (encoder, decoder)\n",
        "data = (x_test, y_test)\n",
        "\n",
        "# VAE loss = mse_loss or xent_loss + kl_loss\n",
        "\n",
        "reconstruction_loss = mse(inputs, outputs)\n",
        "\n",
        "reconstruction_loss = binary_crossentropy(inputs,\n",
        "                                              outputs)\n",
        "\n",
        "reconstruction_loss *= original_dim\n",
        "\n",
        "kl_loss = 1 + z_log_var - K.square(z_mean) - K.exp(z_log_var)\n",
        "kl_loss = K.sum(kl_loss, axis=-1)\n",
        "kl_loss *= -0.5\n",
        "vae_loss = K.mean(reconstruction_loss + kl_loss)\n",
        "vae.add_loss(vae_loss)\n",
        "opt = tensorflow.keras.optimizers.Adam(1e-4)\n",
        "vae.compile(optimizer=opt)\n",
        "vae.summary()\n",
        "plot_model(vae,\n",
        "            to_file='vae_mlp.png',\n",
        "            show_shapes=True)\n",
        "\n",
        "# train the autoencoder\n",
        "vae.fit(x_train,\n",
        "        epochs=epochs,\n",
        "        batch_size=batch_size,\n",
        "        validation_data=(x_test, None))\n",
        "vae.save_weights('vae_mlp_mnist.h5')\n",
        "\n",
        "plot_results(models,\n",
        "              data,\n",
        "              batch_size=batch_size,\n",
        "              model_name=\"vae_mlp\")"
      ],
      "execution_count": 12,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "/usr/local/lib/python3.6/dist-packages/keras/engine/training_utils.py:819: UserWarning: Output decoder missing from loss dictionary. We assume this was done on purpose. The fit and evaluate APIs will not be expecting any data to be passed to decoder.\n",
            "  'be expecting any data to be passed to {0}.'.format(name))\n"
          ],
          "name": "stderr"
        },
        {
          "output_type": "stream",
          "text": [
            "Model: \"vae_mlp\"\n",
            "_________________________________________________________________\n",
            "Layer (type)                 Output Shape              Param #   \n",
            "=================================================================\n",
            "encoder_input (InputLayer)   (None, 784)               0         \n",
            "_________________________________________________________________\n",
            "encoder (Model)              [(None, 20), (None, 20),  422440    \n",
            "_________________________________________________________________\n",
            "decoder (Model)              (None, 784)               412944    \n",
            "=================================================================\n",
            "Total params: 835,384\n",
            "Trainable params: 835,384\n",
            "Non-trainable params: 0\n",
            "_________________________________________________________________\n",
            "Train on 2661 samples, validate on 766 samples\n",
            "Epoch 1/200\n",
            "2661/2661 [==============================] - 2s 699us/step - loss: 542.8646 - val_loss: 532.2812\n",
            "Epoch 2/200\n",
            "2661/2661 [==============================] - 0s 29us/step - loss: 522.2010 - val_loss: 510.5754\n",
            "Epoch 3/200\n",
            "2661/2661 [==============================] - 0s 30us/step - loss: 495.1774 - val_loss: 479.9052\n",
            "Epoch 4/200\n",
            "2661/2661 [==============================] - 0s 31us/step - loss: 455.6136 - val_loss: 424.3713\n",
            "Epoch 5/200\n",
            "2661/2661 [==============================] - 0s 29us/step - loss: 385.8713 - val_loss: 342.3140\n",
            "Epoch 6/200\n",
            "2661/2661 [==============================] - 0s 31us/step - loss: 279.7690 - val_loss: 217.0084\n",
            "Epoch 7/200\n",
            "2661/2661 [==============================] - 0s 28us/step - loss: 160.5318 - val_loss: 110.2812\n",
            "Epoch 8/200\n",
            "2661/2661 [==============================] - 0s 28us/step - loss: 78.1321 - val_loss: 50.7869\n",
            "Epoch 9/200\n",
            "2661/2661 [==============================] - 0s 28us/step - loss: 38.8428 - val_loss: 29.8958\n",
            "Epoch 10/200\n",
            "2661/2661 [==============================] - 0s 29us/step - loss: 24.3829 - val_loss: 21.1861\n",
            "Epoch 11/200\n",
            "2661/2661 [==============================] - 0s 28us/step - loss: 18.4882 - val_loss: 16.9277\n",
            "Epoch 12/200\n",
            "2661/2661 [==============================] - 0s 30us/step - loss: 15.8253 - val_loss: 14.8656\n",
            "Epoch 13/200\n",
            "2661/2661 [==============================] - 0s 31us/step - loss: 14.3359 - val_loss: 13.2061\n",
            "Epoch 14/200\n",
            "2661/2661 [==============================] - 0s 29us/step - loss: 13.1902 - val_loss: 12.4905\n",
            "Epoch 15/200\n",
            "2661/2661 [==============================] - 0s 28us/step - loss: 12.7142 - val_loss: 12.4886\n",
            "Epoch 16/200\n",
            "2661/2661 [==============================] - 0s 27us/step - loss: 12.2338 - val_loss: 11.8695\n",
            "Epoch 17/200\n",
            "2661/2661 [==============================] - 0s 27us/step - loss: 11.9128 - val_loss: 11.6775\n",
            "Epoch 18/200\n",
            "2661/2661 [==============================] - 0s 28us/step - loss: 11.5146 - val_loss: 11.5018\n",
            "Epoch 19/200\n",
            "2661/2661 [==============================] - 0s 33us/step - loss: 11.2648 - val_loss: 10.7972\n",
            "Epoch 20/200\n",
            "2661/2661 [==============================] - 0s 31us/step - loss: 11.0354 - val_loss: 10.7980\n",
            "Epoch 21/200\n",
            "2661/2661 [==============================] - 0s 32us/step - loss: 10.6849 - val_loss: 10.6070\n",
            "Epoch 22/200\n",
            "2661/2661 [==============================] - 0s 28us/step - loss: 10.5993 - val_loss: 10.2615\n",
            "Epoch 23/200\n",
            "2661/2661 [==============================] - 0s 29us/step - loss: 10.3468 - val_loss: 10.2718\n",
            "Epoch 24/200\n",
            "2661/2661 [==============================] - 0s 28us/step - loss: 10.1516 - val_loss: 9.7931\n",
            "Epoch 25/200\n",
            "2661/2661 [==============================] - 0s 28us/step - loss: 10.0588 - val_loss: 9.9853\n",
            "Epoch 26/200\n",
            "2661/2661 [==============================] - 0s 31us/step - loss: 9.8280 - val_loss: 9.6319\n",
            "Epoch 27/200\n",
            "2661/2661 [==============================] - 0s 29us/step - loss: 9.7828 - val_loss: 9.5549\n",
            "Epoch 28/200\n",
            "2661/2661 [==============================] - 0s 28us/step - loss: 9.4651 - val_loss: 9.5047\n",
            "Epoch 29/200\n",
            "2661/2661 [==============================] - 0s 28us/step - loss: 9.3352 - val_loss: 9.3935\n",
            "Epoch 30/200\n",
            "2661/2661 [==============================] - 0s 31us/step - loss: 9.3179 - val_loss: 8.9946\n",
            "Epoch 31/200\n",
            "2661/2661 [==============================] - 0s 28us/step - loss: 9.2256 - val_loss: 9.5774\n",
            "Epoch 32/200\n",
            "2661/2661 [==============================] - 0s 32us/step - loss: 8.9817 - val_loss: 8.8243\n",
            "Epoch 33/200\n",
            "2661/2661 [==============================] - 0s 31us/step - loss: 8.7926 - val_loss: 8.7294\n",
            "Epoch 34/200\n",
            "2661/2661 [==============================] - 0s 29us/step - loss: 8.8672 - val_loss: 8.8614\n",
            "Epoch 35/200\n",
            "2661/2661 [==============================] - 0s 28us/step - loss: 8.5088 - val_loss: 8.2428\n",
            "Epoch 36/200\n",
            "2661/2661 [==============================] - 0s 28us/step - loss: 8.6286 - val_loss: 8.7701\n",
            "Epoch 37/200\n",
            "2661/2661 [==============================] - 0s 28us/step - loss: 8.2858 - val_loss: 8.3144\n",
            "Epoch 38/200\n",
            "2661/2661 [==============================] - 0s 30us/step - loss: 8.3632 - val_loss: 8.2050\n",
            "Epoch 39/200\n",
            "2661/2661 [==============================] - 0s 29us/step - loss: 8.0458 - val_loss: 7.8454\n",
            "Epoch 40/200\n",
            "2661/2661 [==============================] - 0s 29us/step - loss: 7.8389 - val_loss: 7.6397\n",
            "Epoch 41/200\n",
            "2661/2661 [==============================] - 0s 30us/step - loss: 8.0004 - val_loss: 7.8957\n",
            "Epoch 42/200\n",
            "2661/2661 [==============================] - 0s 28us/step - loss: 7.9178 - val_loss: 7.7898\n",
            "Epoch 43/200\n",
            "2661/2661 [==============================] - 0s 27us/step - loss: 7.6099 - val_loss: 8.2707\n",
            "Epoch 44/200\n",
            "2661/2661 [==============================] - 0s 27us/step - loss: 7.5967 - val_loss: 7.4070\n",
            "Epoch 45/200\n",
            "2661/2661 [==============================] - 0s 33us/step - loss: 7.6540 - val_loss: 7.4167\n",
            "Epoch 46/200\n",
            "2661/2661 [==============================] - 0s 29us/step - loss: 7.4847 - val_loss: 7.5495\n",
            "Epoch 47/200\n",
            "2661/2661 [==============================] - 0s 28us/step - loss: 7.2846 - val_loss: 7.2438\n",
            "Epoch 48/200\n",
            "2661/2661 [==============================] - 0s 28us/step - loss: 7.4892 - val_loss: 7.2608\n",
            "Epoch 49/200\n",
            "2661/2661 [==============================] - 0s 31us/step - loss: 7.2010 - val_loss: 7.1478\n",
            "Epoch 50/200\n",
            "2661/2661 [==============================] - 0s 29us/step - loss: 7.1815 - val_loss: 7.4265\n",
            "Epoch 51/200\n",
            "2661/2661 [==============================] - 0s 27us/step - loss: 7.3131 - val_loss: 7.0141\n",
            "Epoch 52/200\n",
            "2661/2661 [==============================] - 0s 30us/step - loss: 6.9117 - val_loss: 6.9711\n",
            "Epoch 53/200\n",
            "2661/2661 [==============================] - 0s 29us/step - loss: 6.9334 - val_loss: 6.8557\n",
            "Epoch 54/200\n",
            "2661/2661 [==============================] - 0s 28us/step - loss: 6.8511 - val_loss: 6.6662\n",
            "Epoch 55/200\n",
            "2661/2661 [==============================] - 0s 28us/step - loss: 6.7217 - val_loss: 6.5268\n",
            "Epoch 56/200\n",
            "2661/2661 [==============================] - 0s 28us/step - loss: 6.7824 - val_loss: 6.6096\n",
            "Epoch 57/200\n",
            "2661/2661 [==============================] - 0s 28us/step - loss: 6.7276 - val_loss: 6.4141\n",
            "Epoch 58/200\n",
            "2661/2661 [==============================] - 0s 35us/step - loss: 6.5828 - val_loss: 6.5463\n",
            "Epoch 59/200\n",
            "2661/2661 [==============================] - 0s 35us/step - loss: 6.6697 - val_loss: 6.5937\n",
            "Epoch 60/200\n",
            "2661/2661 [==============================] - 0s 28us/step - loss: 6.4791 - val_loss: 6.6588\n",
            "Epoch 61/200\n",
            "2661/2661 [==============================] - 0s 30us/step - loss: 6.3079 - val_loss: 6.3466\n",
            "Epoch 62/200\n",
            "2661/2661 [==============================] - 0s 28us/step - loss: 6.6497 - val_loss: 7.0378\n",
            "Epoch 63/200\n",
            "2661/2661 [==============================] - 0s 28us/step - loss: 6.6386 - val_loss: 6.3222\n",
            "Epoch 64/200\n",
            "2661/2661 [==============================] - 0s 31us/step - loss: 6.5268 - val_loss: 6.3212\n",
            "Epoch 65/200\n",
            "2661/2661 [==============================] - 0s 34us/step - loss: 6.1578 - val_loss: 6.2861\n",
            "Epoch 66/200\n",
            "2661/2661 [==============================] - 0s 29us/step - loss: 6.1790 - val_loss: 6.4374\n",
            "Epoch 67/200\n",
            "2661/2661 [==============================] - 0s 30us/step - loss: 6.0641 - val_loss: 6.0956\n",
            "Epoch 68/200\n",
            "2661/2661 [==============================] - 0s 28us/step - loss: 6.2236 - val_loss: 5.7893\n",
            "Epoch 69/200\n",
            "2661/2661 [==============================] - 0s 28us/step - loss: 6.2780 - val_loss: 5.9306\n",
            "Epoch 70/200\n",
            "2661/2661 [==============================] - 0s 28us/step - loss: 6.0079 - val_loss: 5.6803\n",
            "Epoch 71/200\n",
            "2661/2661 [==============================] - 0s 30us/step - loss: 5.9608 - val_loss: 5.8960\n",
            "Epoch 72/200\n",
            "2661/2661 [==============================] - 0s 28us/step - loss: 6.1365 - val_loss: 5.9404\n",
            "Epoch 73/200\n",
            "2661/2661 [==============================] - 0s 30us/step - loss: 6.1862 - val_loss: 6.5623\n",
            "Epoch 74/200\n",
            "2661/2661 [==============================] - 0s 29us/step - loss: 6.2132 - val_loss: 6.0028\n",
            "Epoch 75/200\n",
            "2661/2661 [==============================] - 0s 27us/step - loss: 5.9867 - val_loss: 5.8683\n",
            "Epoch 76/200\n",
            "2661/2661 [==============================] - 0s 29us/step - loss: 5.5628 - val_loss: 5.5267\n",
            "Epoch 77/200\n",
            "2661/2661 [==============================] - 0s 28us/step - loss: 5.8967 - val_loss: 6.0244\n",
            "Epoch 78/200\n",
            "2661/2661 [==============================] - 0s 35us/step - loss: 6.1763 - val_loss: 6.5422\n",
            "Epoch 79/200\n",
            "2661/2661 [==============================] - 0s 29us/step - loss: 5.6973 - val_loss: 5.4911\n",
            "Epoch 80/200\n",
            "2661/2661 [==============================] - 0s 27us/step - loss: 5.7374 - val_loss: 5.2484\n",
            "Epoch 81/200\n",
            "2661/2661 [==============================] - 0s 27us/step - loss: 6.0809 - val_loss: 5.7330\n",
            "Epoch 82/200\n",
            "2661/2661 [==============================] - 0s 29us/step - loss: 5.8361 - val_loss: 5.7860\n",
            "Epoch 83/200\n",
            "2661/2661 [==============================] - 0s 28us/step - loss: 5.6101 - val_loss: 5.2203\n",
            "Epoch 84/200\n",
            "2661/2661 [==============================] - 0s 30us/step - loss: 5.5540 - val_loss: 6.4867\n",
            "Epoch 85/200\n",
            "2661/2661 [==============================] - 0s 28us/step - loss: 5.4826 - val_loss: 6.1714\n",
            "Epoch 86/200\n",
            "2661/2661 [==============================] - 0s 28us/step - loss: 5.5212 - val_loss: 5.6350\n",
            "Epoch 87/200\n",
            "2661/2661 [==============================] - 0s 28us/step - loss: 5.7080 - val_loss: 5.6799\n",
            "Epoch 88/200\n",
            "2661/2661 [==============================] - 0s 28us/step - loss: 5.3868 - val_loss: 5.4343\n",
            "Epoch 89/200\n",
            "2661/2661 [==============================] - 0s 28us/step - loss: 5.9213 - val_loss: 6.1724\n",
            "Epoch 90/200\n",
            "2661/2661 [==============================] - 0s 29us/step - loss: 5.6602 - val_loss: 5.2868\n",
            "Epoch 91/200\n",
            "2661/2661 [==============================] - 0s 30us/step - loss: 5.3331 - val_loss: 5.0862\n",
            "Epoch 92/200\n",
            "2661/2661 [==============================] - 0s 29us/step - loss: 5.5143 - val_loss: 5.2476\n",
            "Epoch 93/200\n",
            "2661/2661 [==============================] - 0s 28us/step - loss: 5.1507 - val_loss: 6.3789\n",
            "Epoch 94/200\n",
            "2661/2661 [==============================] - 0s 29us/step - loss: 5.2698 - val_loss: 5.3214\n",
            "Epoch 95/200\n",
            "2661/2661 [==============================] - 0s 29us/step - loss: 5.7139 - val_loss: 5.1062\n",
            "Epoch 96/200\n",
            "2661/2661 [==============================] - 0s 32us/step - loss: 5.2976 - val_loss: 5.3066\n",
            "Epoch 97/200\n",
            "2661/2661 [==============================] - 0s 34us/step - loss: 5.2247 - val_loss: 5.8975\n",
            "Epoch 98/200\n",
            "2661/2661 [==============================] - 0s 28us/step - loss: 5.2241 - val_loss: 4.9799\n",
            "Epoch 99/200\n",
            "2661/2661 [==============================] - 0s 28us/step - loss: 5.1525 - val_loss: 4.9896\n",
            "Epoch 100/200\n",
            "2661/2661 [==============================] - 0s 32us/step - loss: 5.2951 - val_loss: 4.8692\n",
            "Epoch 101/200\n",
            "2661/2661 [==============================] - 0s 29us/step - loss: 4.9693 - val_loss: 4.5788\n",
            "Epoch 102/200\n",
            "2661/2661 [==============================] - 0s 29us/step - loss: 5.0760 - val_loss: 5.0957\n",
            "Epoch 103/200\n",
            "2661/2661 [==============================] - 0s 28us/step - loss: 5.0571 - val_loss: 4.9943\n",
            "Epoch 104/200\n",
            "2661/2661 [==============================] - 0s 32us/step - loss: 5.0389 - val_loss: 4.8168\n",
            "Epoch 105/200\n",
            "2661/2661 [==============================] - 0s 28us/step - loss: 5.0751 - val_loss: 4.8536\n",
            "Epoch 106/200\n",
            "2661/2661 [==============================] - 0s 28us/step - loss: 4.9453 - val_loss: 5.3787\n",
            "Epoch 107/200\n",
            "2661/2661 [==============================] - 0s 28us/step - loss: 4.8311 - val_loss: 6.3939\n",
            "Epoch 108/200\n",
            "2661/2661 [==============================] - 0s 29us/step - loss: 5.0352 - val_loss: 4.8220\n",
            "Epoch 109/200\n",
            "2661/2661 [==============================] - 0s 28us/step - loss: 5.4239 - val_loss: 5.5784\n",
            "Epoch 110/200\n",
            "2661/2661 [==============================] - 0s 31us/step - loss: 4.8334 - val_loss: 4.6298\n",
            "Epoch 111/200\n",
            "2661/2661 [==============================] - 0s 28us/step - loss: 5.2138 - val_loss: 4.5464\n",
            "Epoch 112/200\n",
            "2661/2661 [==============================] - 0s 31us/step - loss: 4.6794 - val_loss: 7.0332\n",
            "Epoch 113/200\n",
            "2661/2661 [==============================] - 0s 30us/step - loss: 4.8890 - val_loss: 5.0302\n",
            "Epoch 114/200\n",
            "2661/2661 [==============================] - 0s 32us/step - loss: 5.4673 - val_loss: 4.4782\n",
            "Epoch 115/200\n",
            "2661/2661 [==============================] - 0s 29us/step - loss: 5.1277 - val_loss: 5.1288\n",
            "Epoch 116/200\n",
            "2661/2661 [==============================] - 0s 30us/step - loss: 4.9280 - val_loss: 4.9085\n",
            "Epoch 117/200\n",
            "2661/2661 [==============================] - 0s 28us/step - loss: 4.7810 - val_loss: 4.3218\n",
            "Epoch 118/200\n",
            "2661/2661 [==============================] - 0s 29us/step - loss: 4.6588 - val_loss: 4.8821\n",
            "Epoch 119/200\n",
            "2661/2661 [==============================] - 0s 28us/step - loss: 4.4816 - val_loss: 4.6717\n",
            "Epoch 120/200\n",
            "2661/2661 [==============================] - 0s 29us/step - loss: 4.5011 - val_loss: 5.5558\n",
            "Epoch 121/200\n",
            "2661/2661 [==============================] - 0s 28us/step - loss: 4.8743 - val_loss: 4.5015\n",
            "Epoch 122/200\n",
            "2661/2661 [==============================] - 0s 28us/step - loss: 4.6865 - val_loss: 4.6189\n",
            "Epoch 123/200\n",
            "2661/2661 [==============================] - 0s 35us/step - loss: 4.7609 - val_loss: 5.6460\n",
            "Epoch 124/200\n",
            "2661/2661 [==============================] - 0s 29us/step - loss: 5.0956 - val_loss: 4.3433\n",
            "Epoch 125/200\n",
            "2661/2661 [==============================] - 0s 28us/step - loss: 4.4058 - val_loss: 5.3910\n",
            "Epoch 126/200\n",
            "2661/2661 [==============================] - 0s 29us/step - loss: 5.0049 - val_loss: 4.7858\n",
            "Epoch 127/200\n",
            "2661/2661 [==============================] - 0s 28us/step - loss: 4.6448 - val_loss: 4.5312\n",
            "Epoch 128/200\n",
            "2661/2661 [==============================] - 0s 29us/step - loss: 4.5948 - val_loss: 5.6087\n",
            "Epoch 129/200\n",
            "2661/2661 [==============================] - 0s 31us/step - loss: 5.1028 - val_loss: 4.4952\n",
            "Epoch 130/200\n",
            "2661/2661 [==============================] - 0s 29us/step - loss: 4.7216 - val_loss: 4.3488\n",
            "Epoch 131/200\n",
            "2661/2661 [==============================] - 0s 28us/step - loss: 4.7714 - val_loss: 4.6824\n",
            "Epoch 132/200\n",
            "2661/2661 [==============================] - 0s 31us/step - loss: 4.5980 - val_loss: 8.6843\n",
            "Epoch 133/200\n",
            "2661/2661 [==============================] - 0s 28us/step - loss: 4.8367 - val_loss: 5.1861\n",
            "Epoch 134/200\n",
            "2661/2661 [==============================] - 0s 32us/step - loss: 4.3260 - val_loss: 4.3913\n",
            "Epoch 135/200\n",
            "2661/2661 [==============================] - 0s 29us/step - loss: 5.0850 - val_loss: 4.3030\n",
            "Epoch 136/200\n",
            "2661/2661 [==============================] - 0s 31us/step - loss: 4.5517 - val_loss: 4.1537\n",
            "Epoch 137/200\n",
            "2661/2661 [==============================] - 0s 30us/step - loss: 4.8572 - val_loss: 4.4300\n",
            "Epoch 138/200\n",
            "2661/2661 [==============================] - 0s 29us/step - loss: 4.4821 - val_loss: 4.4486\n",
            "Epoch 139/200\n",
            "2661/2661 [==============================] - 0s 28us/step - loss: 4.4502 - val_loss: 5.5478\n",
            "Epoch 140/200\n",
            "2661/2661 [==============================] - 0s 28us/step - loss: 4.8409 - val_loss: 4.2258\n",
            "Epoch 141/200\n",
            "2661/2661 [==============================] - 0s 30us/step - loss: 4.9920 - val_loss: 5.1911\n",
            "Epoch 142/200\n",
            "2661/2661 [==============================] - 0s 31us/step - loss: 4.4403 - val_loss: 4.0015\n",
            "Epoch 143/200\n",
            "2661/2661 [==============================] - 0s 28us/step - loss: 4.2480 - val_loss: 4.5744\n",
            "Epoch 144/200\n",
            "2661/2661 [==============================] - 0s 30us/step - loss: 4.3673 - val_loss: 4.1029\n",
            "Epoch 145/200\n",
            "2661/2661 [==============================] - 0s 28us/step - loss: 4.0302 - val_loss: 4.2447\n",
            "Epoch 146/200\n",
            "2661/2661 [==============================] - 0s 28us/step - loss: 4.2622 - val_loss: 3.8656\n",
            "Epoch 147/200\n",
            "2661/2661 [==============================] - 0s 30us/step - loss: 4.1790 - val_loss: 4.4161\n",
            "Epoch 148/200\n",
            "2661/2661 [==============================] - 0s 28us/step - loss: 4.0056 - val_loss: 3.9675\n",
            "Epoch 149/200\n",
            "2661/2661 [==============================] - 0s 33us/step - loss: 4.4717 - val_loss: 4.9802\n",
            "Epoch 150/200\n",
            "2661/2661 [==============================] - 0s 29us/step - loss: 4.5863 - val_loss: 5.3326\n",
            "Epoch 151/200\n",
            "2661/2661 [==============================] - 0s 30us/step - loss: 4.2565 - val_loss: 4.7018\n",
            "Epoch 152/200\n",
            "2661/2661 [==============================] - 0s 29us/step - loss: 4.2993 - val_loss: 4.1646\n",
            "Epoch 153/200\n",
            "2661/2661 [==============================] - 0s 29us/step - loss: 4.2859 - val_loss: 3.8867\n",
            "Epoch 154/200\n",
            "2661/2661 [==============================] - 0s 29us/step - loss: 4.4233 - val_loss: 3.8029\n",
            "Epoch 155/200\n",
            "2661/2661 [==============================] - 0s 31us/step - loss: 4.4545 - val_loss: 4.4769\n",
            "Epoch 156/200\n",
            "2661/2661 [==============================] - 0s 29us/step - loss: 4.3386 - val_loss: 3.8480\n",
            "Epoch 157/200\n",
            "2661/2661 [==============================] - 0s 30us/step - loss: 4.5253 - val_loss: 3.9877\n",
            "Epoch 158/200\n",
            "2661/2661 [==============================] - 0s 29us/step - loss: 3.9085 - val_loss: 4.5022\n",
            "Epoch 159/200\n",
            "2661/2661 [==============================] - 0s 29us/step - loss: 3.9231 - val_loss: 3.7691\n",
            "Epoch 160/200\n",
            "2661/2661 [==============================] - 0s 30us/step - loss: 3.9308 - val_loss: 3.9015\n",
            "Epoch 161/200\n",
            "2661/2661 [==============================] - 0s 30us/step - loss: 5.3523 - val_loss: 4.8090\n",
            "Epoch 162/200\n",
            "2661/2661 [==============================] - 0s 29us/step - loss: 4.3123 - val_loss: 4.0528\n",
            "Epoch 163/200\n",
            "2661/2661 [==============================] - 0s 28us/step - loss: 3.9211 - val_loss: 3.6821\n",
            "Epoch 164/200\n",
            "2661/2661 [==============================] - 0s 29us/step - loss: 3.7347 - val_loss: 3.5038\n",
            "Epoch 165/200\n",
            "2661/2661 [==============================] - 0s 30us/step - loss: 4.3344 - val_loss: 3.7783\n",
            "Epoch 166/200\n",
            "2661/2661 [==============================] - 0s 28us/step - loss: 4.4244 - val_loss: 4.1065\n",
            "Epoch 167/200\n",
            "2661/2661 [==============================] - 0s 29us/step - loss: 3.9382 - val_loss: 3.5067\n",
            "Epoch 168/200\n",
            "2661/2661 [==============================] - 0s 31us/step - loss: 4.7293 - val_loss: 3.5779\n",
            "Epoch 169/200\n",
            "2661/2661 [==============================] - 0s 30us/step - loss: 4.2279 - val_loss: 3.7638\n",
            "Epoch 170/200\n",
            "2661/2661 [==============================] - 0s 29us/step - loss: 4.5138 - val_loss: 4.4587\n",
            "Epoch 171/200\n",
            "2661/2661 [==============================] - 0s 28us/step - loss: 4.7016 - val_loss: 5.5534\n",
            "Epoch 172/200\n",
            "2661/2661 [==============================] - 0s 29us/step - loss: 4.0435 - val_loss: 4.4275\n",
            "Epoch 173/200\n",
            "2661/2661 [==============================] - 0s 29us/step - loss: 3.9603 - val_loss: 3.7378\n",
            "Epoch 174/200\n",
            "2661/2661 [==============================] - 0s 34us/step - loss: 4.0975 - val_loss: 4.1820\n",
            "Epoch 175/200\n",
            "2661/2661 [==============================] - 0s 29us/step - loss: 4.1113 - val_loss: 3.7678\n",
            "Epoch 176/200\n",
            "2661/2661 [==============================] - 0s 30us/step - loss: 4.1384 - val_loss: 3.6203\n",
            "Epoch 177/200\n",
            "2661/2661 [==============================] - 0s 30us/step - loss: 4.3891 - val_loss: 4.3390\n",
            "Epoch 178/200\n",
            "2661/2661 [==============================] - 0s 30us/step - loss: 4.0153 - val_loss: 3.6773\n",
            "Epoch 179/200\n",
            "2661/2661 [==============================] - 0s 28us/step - loss: 3.5067 - val_loss: 6.4868\n",
            "Epoch 180/200\n",
            "2661/2661 [==============================] - 0s 31us/step - loss: 3.5722 - val_loss: 5.2294\n",
            "Epoch 181/200\n",
            "2661/2661 [==============================] - 0s 29us/step - loss: 3.6707 - val_loss: 3.6044\n",
            "Epoch 182/200\n",
            "2661/2661 [==============================] - 0s 30us/step - loss: 4.1868 - val_loss: 3.6217\n",
            "Epoch 183/200\n",
            "2661/2661 [==============================] - 0s 30us/step - loss: 4.8458 - val_loss: 3.8351\n",
            "Epoch 184/200\n",
            "2661/2661 [==============================] - 0s 29us/step - loss: 3.9010 - val_loss: 3.6523\n",
            "Epoch 185/200\n",
            "2661/2661 [==============================] - 0s 28us/step - loss: 3.8088 - val_loss: 9.5245\n",
            "Epoch 186/200\n",
            "2661/2661 [==============================] - 0s 28us/step - loss: 4.0163 - val_loss: 3.3937\n",
            "Epoch 187/200\n",
            "2661/2661 [==============================] - 0s 32us/step - loss: 3.5148 - val_loss: 7.2178\n",
            "Epoch 188/200\n",
            "2661/2661 [==============================] - 0s 29us/step - loss: 3.8035 - val_loss: 3.4984\n",
            "Epoch 189/200\n",
            "2661/2661 [==============================] - 0s 29us/step - loss: 3.7018 - val_loss: 3.6489\n",
            "Epoch 190/200\n",
            "2661/2661 [==============================] - 0s 29us/step - loss: 3.8603 - val_loss: 3.2366\n",
            "Epoch 191/200\n",
            "2661/2661 [==============================] - 0s 32us/step - loss: 3.5347 - val_loss: 3.9697\n",
            "Epoch 192/200\n",
            "2661/2661 [==============================] - 0s 30us/step - loss: 3.4067 - val_loss: 4.3915\n",
            "Epoch 193/200\n",
            "2661/2661 [==============================] - 0s 31us/step - loss: 3.7396 - val_loss: 3.2601\n",
            "Epoch 194/200\n",
            "2661/2661 [==============================] - 0s 30us/step - loss: 3.4253 - val_loss: 3.2152\n",
            "Epoch 195/200\n",
            "2661/2661 [==============================] - 0s 30us/step - loss: 3.1815 - val_loss: 4.3666\n",
            "Epoch 196/200\n",
            "2661/2661 [==============================] - 0s 31us/step - loss: 3.6835 - val_loss: 3.4335\n",
            "Epoch 197/200\n",
            "2661/2661 [==============================] - 0s 28us/step - loss: 3.1035 - val_loss: 3.1944\n",
            "Epoch 198/200\n",
            "2661/2661 [==============================] - 0s 30us/step - loss: 4.1810 - val_loss: 3.4114\n",
            "Epoch 199/200\n",
            "2661/2661 [==============================] - 0s 28us/step - loss: 3.7218 - val_loss: 4.3033\n",
            "Epoch 200/200\n",
            "2661/2661 [==============================] - 0s 30us/step - loss: 3.3284 - val_loss: 2.8753\n"
          ],
          "name": "stdout"
        },
        {
          "output_type": "display_data",
          "data": {
            "image/png": "iVBORw0KGgoAAAANSUhEUgAAAqQAAAJRCAYAAACTGaUDAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nOzdd3xV9f3H8df33JmdQNhbQAFxoAhOxD1xa0Vt66ij1tZV62hrHa12aKv9OWnrttRRtzjrAFQEB4KAyJI9EkJ27jrn+/vjhpCQhCVJbnLfz8fjPJL7Pd9zzvcLuffxud9prLWIiIiIiLQVp60LICIiIiLpTQGpiIiIiLQpBaQiIiIi0qYUkIqIiIhIm1JAKiIiIiJtSgGpiIiIiLQpBaQiIiIi0oAxpo8x5n1jzFxjzBxjzJVN5DHGmL8bYxYaY2YZY/apd+7HxpgFtcePt/o8rUMqIiIiIvUZY3oAPay1XxhjcoDPgVOstXPr5Tke+DlwPDAauNdaO9oY0wn4DBgJ2Npr97XWbmjueWohFREREZEGrLWrrbVf1P5eAcwDem2W7WTgCZs0DcivDWSPAd6x1pbUBqHvAMdu6XkKSEVERESkWcaY/sAI4NPNTvUCltd7vaI2rbn0Zvm/byFbW2Fhoe3fv39bF0NEREQ6kM8//7zYWtulLctwzGFZdn2J2yrP+nxWdA4QqZc0wVo7YfN8xphs4L/AVdba8pYqT7sLSPv3789nn33W1sUQERGRDsQYs7Sty7C+xGX6W31b5Vm+Hgsi1tqRW8pjjAmQDEaftta+0ESWlUCfeq9716atBMZulv7Blp6lLnsRERERacAYY4B/AfOstX9tJtsrwI9qZ9vvD5RZa1cDbwFHG2MKjDEFwNG1ac1qdy2kIiIiIh2RBTy8ti7GRgcBPwRmG2Nm1qbdBPQFsNY+BEwiOcN+IVANXFB7rsQYczswo/a626y1JVt6mAJSEREREWnAWjsVMFvJY4GfNXPuEeCRbX2eAlIRERGRlGBxbcq0kLYqjSEVERERkTalFlIRERGRFJAcQ5qeO2iqhVRERERE2pRaSEVERERSRArNsm9VaiEVERERkTalFlIRERGRFGCxuFZjSEVEREREWp1aSEVERERShGbZi4iIiIi0AQWkIiIiItKm1GUvIiIikgIs4KrLXkRERESk9amFVERERCRFaFKTiIiIiEgbUAupiIiISAqwkLYL4ysgrWW9DdjqF8BdjAnsBeETMU5mWxdLREREpMNTQArY+LfYkvFg40AEW/MaVN4HnV/A+ArbungiIiKSJry2LkAb0RhSwJbdCLYCiNSm1IBXjK28qy2LJSIiIpIW0r6F1HpVkJjbxJkERN6FvFYvkoiIiKQhi9U6pGnL+ADTzLlgqxZFREREJB2lfQupMWFs8GCITQUS9c6EIOP0tiqWiIiIpBsLbno2kKqFFMDk3QG+PmCygDCQAYG9Mdk/a+uiiYiIiHR4ad9CCiRn0he+AbFp4K6AwBBMYM+2LpaIiIikEUv6zrJXQFrLGAdCB7Z1MURERETSjgJSERERkZRgcJubaN3BaQypiIiIiLQpBaQiIiIi0qbUZS8iIiKSAizgadknEREREZHWpxZSERERkRShSU0iIiIiIm1ALaQiIiIiKcCiFlIRERERkTahFtLtVFMVYeIdL/DuU5Ox1nLEuYdw7q9PJyM7o62LJiIiIu2cZ9OzhVQB6XbwPI/rDr+FxbOXEY/EAXjhnkl8/vYs7pt+Jz6fr41LKCIiItL+qMt+O3zx7myWzVtZF4wCxKNxVi5YzWdvfdWGJRMREZH2buMY0tY4Uo0C0u0wf8ZCotXRRuk1lRG+nbGoDUokIiIi0v6py347dO/flVBmiJrKSIP0cHaYrv0K26hUIiIi0hFYDG6athWmZ6130MGnjSKYEcSYTU3dxhiCoQBjzjygyWusdbFeGdZ6rVVMERERkXZFAel2CGWEuGfq7xm87y74g378QT+D9hnAPVNvJyMr3CCvtRavcgJ23SjsugOx60bjVT3RRiUXERGR9sCzplWOVKMu++3Ue3AP7p/+R8qKywHIK8xtMp+tfgwq7wdqahPKoOJuPJOJk3lG6xRWREREpB1QQLqDmgtE61Q+RF0wWqcGKu8DBaQiIiKyGe3UJDuVtS7YDU2f9IpatzAiIiIiKU4BaQswxgdOr6ZP+vu3allEREREUp267FtKzvVQ9iug/hJRYUzODW1VIhEREUlpBtemZ1uhAtIW4mQci3XC2Iq/gbscfAMwOddiQge2ddFEREREUooC0hZkQmMxobFtXQwRERFpByzgpeloyvSstYiIiIikDLWQioiIiKQILfskIiIiItIG1EIqIiIikgKsTd9Z9ulZaxERERFJGWohFREREUkRnsaQioiIiIi0PrWQioiIiKQAC7hp2laYnrUWERERkZShFlIRERGRlKBZ9iIiIiIibUItpCIiIiIpINX2sjfGPAKcCKyz1g5v4vx1wLm1L/3AUKCLtbbEGPMdUAG4QMJaO3JLz0qdWouIiIhIKnkMOLa5k9bav1hr97bW7g3cCHxorS2pl+Ww2vNbDEZBAamIiIiINMFaOxko2WrGpPHAxB19lrrsRURERFKEa9vfwvjGmEySLalX1Eu2wNvGGAs8bK2dsKV7KCAVERERST+FxpjP6r2esLWgcQvGAR9t1l1/sLV2pTGmK/COMeab2hbXJikgFREREUkBFtOaC+MXb8vYzm10Npt111trV9b+XGeMeREYBTQbkGoMqYiIiIjsEGNMHnAo8HK9tCxjTM7G34Gjga+3dB+1kIqIiIikCC+FFsY3xkwExpLs3l8B/A4IAFhrH6rNdirwtrW2qt6l3YAXjTGQjDX/ba19c0vPUkAqIiIiIo1Ya8dvQ57HSC4PVT9tMbDX9jxLAWkHsuLbVTx523PM+Xg+3ft35Zxfn84+R+zR1sUSERGRbWChNceQphQFpB3E0nkr+Pn+NxKtiuJ5lrXfFfHN9AVc9fClHHnumLYunoiIiEiz0jMM74Ae/fVEIpXJYHSjaHWMh65+DNd127BkIiIisi0sBte2zpFqFJB2EHM+no+1tlF6pCrKhjWlbVAiERERkW2jLvsOolOPfErXlTVKt9aSlZ/VBiUSERGR7eWlaVtheta6AzrnxtMIZYYapAUzAhx+ziFkZIXbqFQiIiIiW6cW0g7i0LMOpGjFep645Vkw4MZdxpx+AD+/76K2LpqIiIhsA2vBTaF1SFtTiwakxphjgXsBH/BPa+0fNzv/N+Cw2peZQFdrbX5LlqkjO+OacZx0+TGsXrKOTt3zySnIbjZvLBpn5YLV5HfJpaCb/slFRESk7bRYQGqM8QH3A0cBK4AZxphXrLVzN+ax1l5dL//PgREtVZ50EQwH6Te0d6P0skiET1cuJysYZP3r8/nX9U9hsSRiLiOOGM5NT19JVp7GmoqIiLQdg0fqzYBvDS3ZQjoKWFi7Wj/GmP8AJwNzm8k/nuSWVLKd1i0v5qFrH2fGG18SCAU4+vyxnH/b2YRrx5Q+/tUX/HHqZAI+H8G5G8ifMAcT8+qu//J/s/nDOfdyx+s3tVUVREREJI215ECFXsDyeq9X1KY1YozpBwwA3mvB8nRIVWVV/Gy/G/joxelEqqJUlFTyygNv8ZsT7wRg1to1/OmjKURdl8pYjNDbSxsEowDxaIKv3v+a9as3tEUVREREJM2lyqSms4HnrbVNruBujLkEuASgb9++rVmulPf24x8QqYzguZuCzHgkzjfTF/Lt54uYWLqIWL2F8f2lsSbv4w/4KV1XRuceBS1eZhEREWnMkr6Tmlqy1iuBPvVe965Na8rZwMTmbmStnWCtHWmtHdmlS5edWMT2b/5ni4hURxulG8ewZPYyyqMRvHoL5lfvmkdTGzR41tJnt54tWVQRERGRJrVkQDoDGGyMGWCMCZIMOl/ZPJMxZghQAHzSgmXpsAYM70swI9j4hLX0GtyDYwYOJjMQqEuOdwknv4Jt5sCTRhIMN3EfERERaTUuTqscqabFSmStTQBXAG8B84BnrbVzjDG3GWNOqpf1bOA/tql9L2Wrjr3wcAIhP6Zeq6c/6KfX4B7sfuBuHDdoV4Z37UamPxmU5n+wusn5e7MmNzfXTERERKRltegYUmvtJGDSZmk3b/b6lpYsQ0eXV5jLvVN/z98ueZh5077F8TkcfOoofvHAxRhjCPh8PHnKGbyx8FsmLfiWRWWf1l2byAtSdkg3oj0zKVlWxbrKSrpmN792qYiIiLQci8FralxdGkiVSU3yPfQb1od7pv6eeCyO43Pw+XwNzgd8Pk7abSgn7TaUH/V/h9WL1xLtmcmqnw4hc04p4aWVxLtlcPQTj/DC+PPYpaBTG9VERERE0pEC0g4kEAxsNc9Fd57LXy64j9XH9KLPn2fjxFxM1MOGHBJvrODW3EIeP++cViitiIiIbC4Vx3e2hvSsdRo79MwDuOL+n5A3ZS2+yjhONLknhBP18JdE+fbBj9q6iCIiIpJm1EKaZtYuLeKTl2aQsagcs9k0Mse1ZH65nlWL1tBzYPe2KaCIiEiasoCndUilo3v+b69x4dAr+fiVGU0u/QSA63HxHtfyzJ9fatWyiYiISPpSQJomls9fyaO/mUgsEgdLk0s/WQdM3BKLxHji1udYOm9Fq5dTREQkfRncVjpSjQLSNDH5+Wm48cY7s9qNhwHjbQpU3XiCyc9prwIRERFpeRpDmibchEtTew/UfUfa7JS14Hlei5dLREREkjSGVDq8Q04bTSDY+PtHIOjH30z6mDMOaI2iiYiISJpTQJomBuzRj9OvHUcoI5hcPN/vI5gR5MI7z+Wyu39EMBzAH/DVpZ/1q5MZMLxvWxdbREQkraTrGFJ12aeRC247m7FnHsCUFz7F5/cx5oz96bNbLwD2O3YEU/77KW7C5aBT9qPfsD4NrvU8D8fR9xcRERHZ+RSQppkBe/RjwB79GqX3HNidH/zq5Ebp702cwj9veJqi5evp1D2fH916FidcfFRrFFVERCStWGvSdgypAlJp1ofPfcJfL36IaHUMgJI1pTx49eNYz3LipUdv9Xpr4xCfBRgI7Ikx+nMTERGRxtIzDJdt8uhvJtYFoxtFq6M8/rtnt3qtjU7DrjsQu+Fi7IaLkr/HZjTOZy3ffr6IWZPnEovEmriTiIiIdHRqspJmrV1a1GR6WVEZiXgCf6DpPx/rlWBLLwVb0zB9w8XQ5UOMkwfA0rnL+fUJd1K+vgLjGKy1XDPhMsb+4KCdWxEREZF2wk3TLvv0rLVskx4DujaZXtC9oNlgFICaScmFTBuxEHkDSK6Let0Rt7J2aRE1lRGqy2uoqYhw14UPaIcoERGRNKOAVJr1kz+eRygz2CAtlBniwj+M3/KFtgxoovvdxsArBeCL/81uNBwAIBFPMOkf7+5okUVERNotC3iYVjlSjQJSadaBJ+/HjU9dSe/deuLzO3Qf0JWrH76UY84/bMsXBvcHE2qcboIQTC62X1FS2eTOUW7CY8Oa0p1RfBEREWknNIZUtuigU0Zx0Cmjtu+iwD4QPBhiUzeNIzUZEByLCe4FwB6HDCURdxtdGs4Ksf+J+37fYouIiLRDRmNIRbaFtZbVi9eyblnTE54AjDGY/L9jcn8PwQMheCAm9w+Y/L/V5enSuzOnXnk84axAXVoow9B3aFcOOWP/Fq2DiIiIpBa1kMo2m/fpAu445x42rC3FepZeg3tw83PX0nvXno3yGuODjHGYjHHN3u/Cm7syfPgSXn08l5pKh7Enl3PM+EX4nRXAgBasiYiISOqxgGdTb3xna1BAKtuktKiM64+6jZrKSF3ad18v5+oxN/PvZQ8SCAa2cHVj1nqYylsZfeR6Rh+5vt4ZB1txN6bgvp1UchEREUl1Ckhlm7z75GTcRMMxn9ZaYjVRpr32BYecNrrJ62qqIrz16Pt8+voXFPbuxMk/O5ZBew8Abz145U1c4UETC+iLiIikAzdNR1MqIJVtsm55MbFIvFF6Iu6yfmVJk9dUlVdzxagbKFpRQrQ6iuMY3p84lWv+cRljT2m4NFRxTZjnlgxhWVUu+3X1GNc5QcivP08REZF0kJ5huGy3PQ4ZRkZ2uFG643MYesCuTV7z8n1vsG5ZMdHqKACeZ4lWx1g9+2Zs2a9JjpYBzya/ET65YDjPLRnKLZ8P57h/P055NNLkfUVERDoii8GzrXOkGgWksk0OPGkkPQd1JxiuNys+M8ReY3dnt5EDm7xmygufNmpVzc5LcNolqzBs2lbUMZAXjHLmwG8AqE5YVlVU8H/Tp7VATURERCTVKCCVbeLz+/jblNs5+4ZT6TW4B/2G9ebCP4znlheua/aanILsRmkDh9cQjzX+swv7XMZ0X173Oua6TFrw7c4pvIiISDvh4bTKkWo0SE+2WUZWmB/efCY/vPnMbcp/ys+PY960b4lURevSyoqDBIKN87oerKpqGMCGfL7vVV4RERFpH1IvRJYO48CT9uO0q08kGA6QmZtBRnaYuNcPJziYzb8LxTw/jy7Ys+512O9n/PA9ERERSRfWgmtNqxypRi2k0qIuuO1sTrki2VJa0C2fIaMGgVeCLb0C4l+D8eNZw1++PpRFFb3J8HtY4KA+fTl/733auvgiIiLSChSQyvdSVlzOo7+ZyJT/foov4OPoHx/KD28+k1BGqC5PQdc8Djxpv00X+TpjOk/EumvAK8XnH8hvj/Zx+PJlrK4oZ89u3RnapWsb1EZERETaggJS2WGxSIwrRt1I8cr1JOLJRfNfvHcScz6az18/vI1Vi9bw3F2vsOirpey67y6ccc04euzSre564+sOvu4A+AyM6de/LaohIiKSMlJxSabWoIBUdtiHz35CaXF5XTAKEIvEWfjlEt589H0euPJR4tEYbsJjweeLeeeJD/nrh7cxaIT2qRcREZFNNKlJdtg3MxYQqWy8eL3nWZ6+/XkiVRHchAeAm3CpqYxw/5WPtHYxRURE2oXkwvhOqxypJvVKJO1Gn916EcpsvIaTz+ewdllRk9fMm/b91hb1PA/P877XPURERCS1KCCVHXbEuYcQCAYw9Ya7+PwOeV1yychqvM0oQEZ2xg49q2jFen4z7k6OC43n+PA53Hr6XWxYW7pD9xIREUlVLqZVjlSjgFR2WE5BNvdMvZ1dRw7CF/DhC/jY+7Dh/G3K7ZxwyVGEMhq2noYygoz76dHb/ZxYJMbP97+RGW/OxHM93ITLJ69+xtWH3IhbNQmv7Ga8yvuTs/ZFRESk3dGkJvle+g3rw32f3kl1RQ2OzyGcmVzu6cI7xrNueTHTXv2MQChALBJn1/0GMmvyXC4Y8gtGHrM34288lU7dC7b6jMnPT6OqvAbP3dRV7/PHufG+aXilU/H5okAAWzkBCh7AhA5qqeqKiIi0GItm2Yt8L5k5DbviA8EAv33mGopWrGflgtV8/s4sXvz7JKLVyW1E1yxZxwfPfMyEWXdT0DVvi/de/s3KRpOnTvxRMX0GV+Pz2dqUOBDHll4LXT/CGG07KiIi0l6oy15aVJfendl15EBevPf1umAUIBF3qSqr4oV7XtvqPfoP70tGdsMxqUecvoFwhm2c2VZCYv73LreIiEjr0yx7kRazeNZS/MFkY3zfwREuu3UlNzywlDEnrmPmezO3ev1Bp44it3MOPv+mVs94rLk/3TiYxjP/RUREJHWpy15aXKfu+cRjCcaM28C19yzH77f4A7D/UWVsKK7B2gjGND0rHyAYCvB/0+7gwWse4+OXpmNMlCXfhBiyT3WDGf51fANbrjIiIiItyEvBGfCtQQGptLieA7szbP9+XH335w262TOyLMGMCmz185is87Z4j4Ju+dz09FV4ZbdBzb+BZtYi9e8G1U/ieSWY4CgIHoBpMmoVERGRVKEue2kVv/vPsThO44lGPicKkde3/UZeEc0GoziQWIKtuAuqHsCWXo7dcCHWxneozCIiIq3JWnCtaZVjWxhjHjHGrDPGfN3M+bHGmDJjzMza4+Z65441xsw3xiw0xtywtWcpIJVWkZXfmXBWoOmTJnub72PCRwBNLa5vgCwgCtTOyLfVEPsCW/3i9hVWREREAB4Djt1KninW2r1rj9sATHKpm/uB44BhwHhjzLAt3UQBqbQO/zAwnaDR2JgMTOY5236f8PFE6EfU3RTcxrwgbuh0ME21nNZA5L87UmIREZFWl0qz7K21k4GSHajGKGChtXaxtTYG/Ac4eUsXKCCVVmGMwXSaAE4hmCySrZlByDwPQmO3+T6rKyOMeeUwfv/laKat68E7K/txxcfHcO0nw0kuKdwEGyf5fhAREZGd7ABjzFfGmDeMMbvXpvUCltfLs6I2rVma1CStxvgHQZcPIfYpeBsgOBLj675d93h05hdUxGDi4t2ZuHj3uvSQbx2rhnahZ8bSxhcl5mPXjcJmXYLJ+qkmOYmIiEChMeazeq8nWGsnbOc9vgD6WWsrjTHHAy8Bg3ekMApIpVUZ44fvsbXnrLVriHuNu+aDPh+LvBvpaX4J1gNqiLmGsliInGAMhwjBygewJh+TtR1DBERERFqJxbTm1qHF1tqR3+cG1tryer9PMsY8YIwpBFYCfepl7V2b1ix12Uu7MqSwC/4mWji91VW8fPkUxg0YwhnDhzGvuADXOnQO1xD2uQR9HjE3ga34axuUWkREpOMxxnQ3td2OxphRJOPK9cAMYLAxZoAxJgicDbyypXuphVTalQv33pf/zptDIr5pKaeMKpcef53F19UJrLUkXEuZFyLkS+DUi12DPo+4V4ljXe11LyIiKSmVFsY3xkwExpLs3l8B/A4IAFhrHwLOAH5qjEkANcDZ1loLJIwxVwBvAT7gEWvtnC09SwGptCv98vN5+rSz+O377zJn3VpCPj/7fRNnXcISt8lJTdW9ctgtb36DYHQja8EWj8MGdoesy3ECA7DWgrsIvCoIDMVo61ERERGsteO3cv4+4L5mzk0CJm3rsxSQSruxYV0ZFSWV7D6wG6+cfR4Jz8NnDDe9dgcro4m6fF7ASUaezXEXJo/Iq3hZV0BkErgrwfgAi839PU7GCS1fIRERkXostOYY0pSigFRSXmVpFXecey8z3/saX8CH3+/jZ/93IUeeOwaAXfbsxxfvzsJzk5OduleUkB1INLqPtVCT8PP5+kKWV+YwrGA9u9u/g6ldHXVjDFt2I9Y/EBMY0joVFBERSXMKSCXl3XrGXXw99RsSsQTxaHLs6D2XPkz3fl0YfvBQTr7iWJ67e9NY6d69o0RrDIHNNoAyBooiGVw29Zi6b6D7FK5hwsFvEvLVn7kfw1Y/jcm7vaWrJiIi0sC2Llrf0aRnraXdWLu0iLkfzycRa9jiGa2O8dzdrwLQtU8hXfoU1p1b9V2QgL/x0lCuZ5hV0pWqRJAaN0CNG+Cz4u48MHefujzLKnP4/Zejuehtj/s/eZaS6ooWqpmIiIhspIBUUlrJmlL8waYb8td+V1T3+zHnjyUYTm4nWlocYPKreUSqG47DiXo+Hv5mRMM0N8CzS5Jd858VdeeEt87k6YW78+HqTtz3+RKOfvLvrNowc2dWSUREpGk2uQ5paxypRgGppLR+w3rjxt1G6f6Aj72PGF73+sxrx9FzUHfC2WEA7rtpF157ojuumwEYXKc/F354PItK8wkvKidjfhkmlmxFjXk+rIXrZ4ylxg0Qt8kloaKen7JYkLumPIK1jcsgIiIiO4cCUklpmTkZnPvbMwhnherSfH4fmbmZnHntSXVpGdkZPPDZn7ji7xfSd1hvEnHDv/7QnZt+fBorSv9HoOvbVC3uTf+bP6fHhG/o9ui39P/NZ+R+VcSRPb+jJJbBqqrsRs93rcOHq7pB/ItWqa+IiKQvS3Id0tY4Uo0CUkl54284leuf+DnDDtiV7gO6ctxPDufhmX+hc4+CBvkCwQDv/XsKaxavJRFL4LkeX73/Nb844NesWbIW5+7P8VUlcKIevoiLE/MofGoxZ+cu5KUJRzW7UlSWP4aNzWiFmoqIiKQnzbKXduHgU0dz8Kmjt5hnydfLmPPxfGKRTbs4WQuxSIx/3PA0pomA04/h/SfP4MNnP6L3NYaVhV3quuwBwr445w2aA5Uv42VejOMEdlqdRERENpeK4ztbg1pIpcNYNm8ljtP4TzoeTfDdnOV4buOI1I17LJ2zglhNHP+9S9klVEKGL062P0bISXBM7yVcsOtsoBqKxmLd1a1QExERkfSiFlLpMPoO7UW0JtbkuXhNDOs1XgoqnB1m15EDWTJ7CdFylzPnfcTIixKsjmYzNH89vbMqN2W2Rdj1P8AGRkLoUEzGcdpmVEREdpp03qlJLaTSYQwY3rfZc+uWF3P8JUc2mBwVzgqx+4G78cNbzsQ4ye9mw/arYvfO6zmq19KGwehG3hqIvgbl12HXHoTnluz0eoiIiKQbtZBKhxIIBYhWRxulWwuX3vUj9jtmBJP++S6xmhiHn3MIh519ED6/j9+/eiPP3flr9jqgErPNX07LoPh0bN4NWHcD2HKMUwDhYzBO7k6tl4iISEemgFQ6lINOHcWHz3yMm9i0bqjjc9jnyD3x+/2MOm4Eo44b0ei6vcbuzvA9ekNs7vY90K7Ell4FJJ9nCUPFH6Dgn5jgyO9TFRERSUPqshfpAC67+8cU9upERu0C+RnZYfIKc7nqoUu2eJ21CYw7ZztaR+urv2h+BGw1dsPPtJi+iIjINlILqXQoBV3zeOSbe5n6wqcsmbWUPkN6MebMAwhnhrZ4nS39JXhrd2JJYhD/CoL77MR7iohIR2ZJzW09W4MCUulwgqEAh48/GMYfvE35bWIZRP8HJBqmWxq1mMY9w5rqLPpkNzHhqQEDNJ7VLyIiIo2py14kMRdL4wXvjQHXhaibfJtUxf2srcninPdP4h/f7LmVmxqsux6bWNgCBRYRkY4qXbcOVQuppL3JLy5nv9HVhDMbpsdch+cWD2F9NEy/nHKmF/XglaWDqXED3DtnJId0W86TC4czru9CRhSuJeh4m1pUbQTKb8TaBDawJ6bgYYyT1ep1ExERaQ8UkEpam/Lfafzl4g+4678hBiao9RsAACAASURBVAytIVBvnfu45/Dw/L1ZVZ3T6DqD5Yz3TiXu+XhmyVBGFa7ioO4rOKrrEvKjVVRXOJQWwy7D4uR2moktvw2T/6dWrJmIiLQ7Nn1n2SsglbT25O3PE62OcdM5u3Dlg6sZfVApAMuqcrlxxqFNBqMAEdePxUBtt8eMld357u5qXp4NjudhPQiGkluVnnpJERfc8Do27w6M8bVKvURERNoTBaSStsrXV7Bi/koAKjb4+d0luxDdJ5/E/gWs796p2et8uFhMbUCa1PXphWTOLcUkbF16LJr8+fK/ChkwJMphl0YwRt32IiLSNG0dKpJmKjZUcumIX5KIbVor1F8eJ+uDInLvXkjBpOV16QHHwQ84kQQm7hJeVIFTHq8776uIkzm3FCdhm3xWpNrHfycUQtFh2OinLVYnERGR9kotpJKWXn3wLcqLK7B2UxC58TupiXvkv7+Kyn0LcXpm0yWcSeavplIdNviq4/jL4pQe2p2SE/oQKI7S+YUlmGaC0Y0qSnxgS7Gll0CXD5JbjIqIiGwmXVtIFZBKWprx5kxikXiz5x0P+i2Octy4wyj4cA3/Lq0hVC/mzPtwDZlzNuAvjWFc2+wCGl7AUL1fZzL2r2J9JEzncARb8zIm6/ydWh8REZH2TF32kpa69O6M2cI+oZ6BguwsLt5nPxZO/Ra7WQOoAYLFEUzCYppsHLVYn2HFL/ek6JQBfNR/GGNeO5cXlgyCmpex7jpszavYyHtYG9uZVRMRkXZq405NrXGkGgWkkpZOu+oEghmNF8Ov7+t+hqvefJ2iFeubyWGaaRm1+HMMK64bTrxbBl7QR40XIOr5+e3nY1hd/h226HBs2c3Ysl9i1x2Ejc/6njUSERFpvxSQSloaMmowVz18KVl5mQRCycDUGvACDp7fUHTmAGpy/Xy0fCmZnbZvZrw/aDnhGR/0DDV5/q0VA4AYUAW2EmwZtuRirG1+CIGIiKQHa02rHKlGY0glbR157hgOPfMAls5dwWUvv0TR/DUAVA/OJe/jdfT73RcYx+AcOJRgRoBYzdYDxlCGx/HnFWNDPXCbeMN7GBJeU98D4xCbDqGDvm+1RERE2h0FpJLWAsEAg/YewP4lw3m2kyXhevS+ezaBtTV1yzjN+98cMnMySMRcPNdr8j7GWAJBy5FnlPCT36xmcTXcPxdct2E+B8vhPZc2XRgb2ZlVExERaTfUZS8CXL7faLKCQbLnlRIojjRYUzQeiROtiXHRnefS3Dyobn1iPDN7Dr/400r8Adg1v5IL9tyVsC+Bg4eDR9gX59IhM9klt6zxDWwcgqNaqHYiItJeeJhWOVKNWkhFgJ45ubx2zo+48aP7WBVt3Aoaj8TwEi59h/Zm6dwVDc6FMvyceH4FmTmh5DYbTidMwX1cd8juHDvoC16bdT+GKCf2XcSwgs0nSDlAkIr4L/hs4kzyuuQy4vDh+PzaYlRERNKHAlKRWr1ycjln7P7c/+JcIlXRBueC4SBd+3XhN89cw7VjbyYeTRCLxAmE/AwZNZhTb7wJ43wHxoBvYN2SUnv02IfdAyWQmEP5Bh+rlwXo1iuOszHe9O3BMw/vw5N3vIff/wEYl8ws+NPrB9F3jxMw/gGt+m8gIiJtx1otjC8iwKFnHcCEXz1JtDpat/aocQyhzCAHnzqKYDjI00sfYuoLn7J+1QaG7j+YPQ4ZWhuADm50P+sWE3P789rDRXzwcg5/em4J9XtK3Ng8EpVFxCNd2DhlKlJp+d2Zb/GvKfdjMo7D5P0FY9RiKiIiHZcCUpF6MrIz+NuU2/njeX9n6ZzlWGDg3v254clfEAwHAQhnhjjyvDFbvZdX9RRU/AkbcTn2HI+TLlqHMeA44CZg+v9yWbM8yNB9ygiGOxGLJINOaw3FqwMs/dZP/93ewQb+jcn6YUtWW0REUkQqLsnUGhSQimym39DePPj5nyktKsNxHHI752z3PWxiIVT8GYgSCgPhTefWrQxwzSmDqCz1kUgYfD7baLKUzweRageogep/gwJSERHpwBSQijQjv0tes+e++nAOT93+PKsWrmHwvrvQ87wR/OezmZSvr2DQ6EHce9wiNnXCb2It/PkXfVm/xo/nJhe5iAOOY8HY5Or8gHEsg4bX1F5Us9PrJiIiqSg1t/VsDQpIRbbTlBc+5U8/+jvR6uQe9OuWF2NfnI4JGHJ9DkWPzOO9R8s464jGC2tUVTjM+yyzLhjdyPMMySn6yYGrBx1Xhj8A4IfwMS1dJRERkTaldUhFtoO1lgeufKQuGE0mJn84cYsv4uIkLNMn+IjG/bXXwPsv5nPliYP4xXGDSSSa/vZrMVB7vPdiAWuWhcHXHZP905atlIiIpIx03TpUAanIdqgur6Z0XeOF7Td/a8+eksn773eiJhHg4Vt68LfrevPNF1msXBJOfhhslt/zGaK9MuteJ2IOH713Jqbzaxgnf+dXREREJIWoy15kO4QyQ/gCPhJxd4v5DIY//nYXnirdi5LH1uDFTb1zABbHb/ESDl7IIZEbZN25A+n759m1Z2FD5S4YJ7Op2+N5HjPf+5o5H82nU498xv7gQLLysnZOJUVEpE1YtA6piGwDf8DPiZcexWsPvUO0JtZsPi9giHXLYPZXuXT1FeGLb777k6HPLhH2HFNFTZ9sHs4aCUD1rnlkfptsgZ0zdX6T945F49xw9O0s/HIJNZURwlkhJvzqSf7yv9+x674Dd0o9RUREWpO67EW200/+eB5H/ehQguEAGdlh/EE/+DZ1w3sBB+t3sD4HL9OPabwTKY7PsscBVVxx20quuGAhAwrKwWdYc9GurB/XBwPMm/oNy+evbHTtS//3Bt9+toiayggAkaoo1eU13H7WX7F288EAIiLSbtjkvIPWOFKNAlKR7eQP+LnywUt4ds0/eeDzP/Ny6ePc98mdhLNCeA6YuIevxiV7VgnR3lkk8oN4m73TAkHLuPOLAfCsw96d1oIx2JCPsjE9iHcKAZbPXrocr/I+rFdZd+07T3zQZOvshrVlrFy4piWrLiIi0iIUkIrsoKzcTHoP7kEwHGS3kQO57O4fkxEO1U1w8tW49Ht8MWWXDSfRJwcnCOEsl9yCBDc+sJT+u0WB5JihtTX1xn96lppd8/D7PbKy1kDlw9j1Z2BtskXU1K6iH8pwOfiEDZx79RoOPXkD/qDbaIF9ERFpXzxMqxypRmNIRXaSEy4+koqSSibe8QLWs1jglJPHcP5vz2b+5cVUrFhA1/Kr6TO4DF/t1vQJz1AaC/HJul6bbmQtTiSBz2/JzHb59Tk92VAcYPQJd3D6L6/jnF/2ZcCAd+g9MFJ3SbQG4vHV5PReDPRo1XqLiIh8XwpIRXYSYwzjbziVM645kQ1rSsnvmkcwHARg967doGs3bOx+bOkvwSvDw2VeaT4/+/jI2jVIa+9jIee7UtwD87ntpz5ssiGVZQvmMeeTn/Kn/8zCEGnw7HAmhGwcSi/CCx6IKXgQY0KtVncREZHvo0W77I0xxxpj5htjFhpjbmgmz1nGmLnGmDnGmH+3ZHlEWkMgGKBr3y51wWh9JjgK0+VDTOGr+Lr8j2W+f7IhVkB2MEhWIECWMeRtKGf59XsQ/bCqLhgFiEfhmLMWYL1oo/sCtd31HsRmYCvubZnKiYhIi7Gk78L4LdZCaozxAfcDRwErgBnGmFestXPr5RkM3AgcZK3dYIzp2lLlEUkVxhjw9wVg3G7dOKRffyYvXUKnjAzeXLiAZ5lJeHoxJtF4er7f7yb3vd+iKNQ8D7m/aoHSi4iI7Hwt2WU/ClhorV0MYIz5D3AyMLdenouB+621GwCstetasDwiKcWzlr9+MpXHZn6JF42T+005JuZBzxCF/11Ko+2cgD9d0Y/C7ovYfVT1lm9uI1s+LyIiKchoYfwW0AtYXu/1CmD0Znl2BTDGfAT4gFustW+2YJlEUsY90z7m0ZlfYL8pocc/vkkmWshMeBhjmpwD6SYcHvpdL/4+aUHdjHpraTC73nXBlzmmxcsvIiKys7T1pCY/MBgYC/QGJhtj9rDWltbPZIy5BLgEoG/fvq1dRpGdLuF5PDrzcyLVMfr8ZxHVQ/NxalwyFpTVLqS/qXl0nzEV/Pj61fTqH2P5ohCP/ak7sWgyAk3EIZxh8TwIBCFSbUjEHbIzfXgl50PwEEzmWRgnp03qKSIi2ycVF61vDS0ZkK4E+tR73bs2rb4VwKfW2jiwxBjzLckAdUb9TNbaCcAEgJEjR6bpf5V0JNXxGDHXxVcSYdn1e2Hc5HhRE7f0eHgewXURnJjH6KPKuOnBpYQzk3/2w0ZWc9sTS7j76t58+HIBYCjoEuf489bTf2iEaLVhzEllEH2L5ASnz7DVj0Hhqxgnv83qKyIisiUtOct+BjDYGDPAGBMEzgZe2SzPSyRbRzHGFJLswl/cgmUSSQk5wRAZ/gCJLhkQcLBhPzbsx8vys/rSIcQKQ1gDl96yqi4Y3SicYTn7mmKo7dTfUBTg6b9154+X92P/oysIhS2wcUJUDLy12OIfYG3j3Z1ERCS1pOss+xYLSK21CeAK4C1gHvCstXaOMeY2Y8xJtdneAtYbY+YC7wPXWWvXt1SZRFKFMYZdCgoavwMdA0GHXf6Yx/F/jtBrQNNBZN+BEZb/cjhuaNMN+gyqIRhu5i3tfYctv3MnlV5ERGTnatExpNbaScCkzdJurve7Ba6pPUTSSl44zOZ7feYEokw86mV6Z1cSdFw8m4xRN1ccySTWI5OV1+5Bnzu+wgCJuMEfaO5pFrfyWe66MkTfgZWMPO5wBo08fGdXSUREvgdrScnWy9bQ1pOaRNLWCYN3Y/rKFdQkEnVp1+81jV1yywj6Nq1Buvks+uqEn/vnjgCfQyIvSLRvFqFlVRSvCVFW2pOCTkub3NPemDhX3PwormsIhZ8jsixIMPd4TPbFGP+glqyqiIjIFrXoTk0i0ryx/QaQGdjUpGmAE/ssahCMQjIYtRYirkN5LMi9X49k4uJh4FqyZq4nsCa5Jmk86uPqEwtYOj+Mm6BJ4UxLVo6HP2AJBqPYyIvY4tOx0SktVU0REdkOnjWtcqQatZCKtAHPWs598TnKIpsWsLeAzzS9iITFcNybP2RVdRDXOuB69Lx/HqFllTiJ5DVuwrJmKVx6+K4MHVnNH59ZlFwSyk0GtL4m3u3Jj6QabNlN0GVychcpERGRVqaAVKQNTFn6HasqyklstuDce6sHcFzvxTjGrZfqYAP741scpPvz8/Gvq8bN9BMojtQFow0Zvvsmg+nv5jJmXBkLZmUQzvTot1u0+QJ568FdCf7eO6V+IiKyY1JpHVJjzCPAicA6a+3wJs6fC1xPsn2jAviptfar2nPf1aa5QMJaO3JLz1KXvUgbWFCynpjrNkq/7Yv9qUjkgcmsTcnEmgJefGQ0wbs+J7ygDH9ZnNDqGpz4lj61LJ6bbO30Bywfv5VLLNJ866clgSX+PWokIiId0GPAsVs4vwQ41Fq7B3A7tWvG13OYtXbvrQWjoBZSkTYxoKCAoM9H3Gs4XrTGy+ODygc5PGcuq7+dzLpVeUz4bRHrlr23Td+aA0GP4aOrCIQ8Rhxazoyi7sS7+MgqjFC63k/n7nF8vsbXWc/gxGeDf8BOqqGIiOyIVJplb62dbIzpv4XzH9d7OY3kJkg7RAGpSBsY228AXbKyiJaXk6gNSh1jyA4EMVOLOOfK17EW4rGS+ruIbtE+Yyr4zYTvwEAgZIkbH49OH87Ha3uTCDjs+ee5/PZHMxmyT6TRLHw34cdH6nwIiohIu3MR8Ea91xZ42xhjgYdrd91slrrsRdqAz3F47ozxHLXLIPyOg88YDu3Xn38dejz/uPIxYpE48Wh8m4LRjJwwnbq7/O6RJWTlemTleASDlqxAgvsOfJejei0hYgN8Nno4D/69P9GaxoGnz2+wgf3wKh/GKz4Zb/0PsDUvY63XxBNFRKQDKDTGfFbvuGRHb2SMOYxkQHp9veSDrbX7AMcBPzPGjNnSPdRCKtJGOmdmcv/x47DWYkm2kL764FvbPNM9lBni3N+cxvpVpeRnPYLTxNdLx8AfRk5hVXUuXxR3o+rgrmwoWkS3PnGsTS6mb4zhw/IL6F9xOn2ySgj7k2Nbbfk3EJuOyfvDTqy1iIg0x9Kq23oWb8vYzq0xxuwJ/BM4rv5um9balbU/1xljXgRGAZObu49aSEXamDEGpzYItXbbeuiNA2dddxID9x7Aaw+/TU2lg+Nr+sqgz+OqHh+T9e5aCnvG6dEvjuNs3BEEjnr9DCYt+JaemRvqgtFkYWqg5gW8yAffv5IiItLhGGP6Ai8AP7TWflsvPcsYk7Pxd+Bo4Ost3UsBqUgKOeCkkdu05of14N2nJvPAlY/gxl2+mJyDm2j+W3W/nHI6TVrG11dU8epjnQDw+6HIzWKNm8fBPVaSFWhqNX0XSi/Hq35lR6skIiLbwbbSsS2MMROBT4DdjDErjDEXGWMuM8ZcVpvlZqAz8IAxZqYx5rPa9G7AVGPMV8B04HVr7Ztbepa67EVSSJfenbnsrz/moWsex/Nssjvf8/Dcxh8fqxetrft94exMpryWxxFnlDaasOR5sHB2BsaFhGuYcGsvDjimnMIeCeaXdSbouKypySLmOo12iUpKQMVvsRlHYUzGTq6xiIikKmvt+K2c/wnwkybSFwN7bc+zFJCKpJhxlx3DfseOYMrz03ATLu9NnMqS2cu2et1fruyLBQ4/tRSAd58v4O1nOmE9WLcqWJfPOPDJW3mMO389vbPKSViHZxcP5cJdZwObAlLPJsegJvkgNhNCB+y8ioqISEM2tZZ9ak0KSEVSUPf+XTnzlycBsHDmkmYDUsfn4Lkbg0jDXVf25auPslm7Isj8LzOJ1jRedDQRh5J1ybd+v+xygo7LyuocLv/oaO7e/z2CjotjLAHj4dS1mHr1FusXERHZuRSQiqS4M64Zx5T/Tmuy296rt7B+YY8YIw+rYO3yILM+zoYm1hWNFwRZe1xv/pg5gqf+UUb/ITVUJZKtp1PW9mH/l89jSKCI48u/4vwzvyNQF4MGIbAHANarhPjX4OSDf7dtXhVARES2QQptHdqaNKlJJMUNGTWYn95zYaP40h/w1QWDZ12xlkc/+obLbl3JbiOqm4pFsUD56K5U7ltIvGsGS3K6sbIyl0uHfMmPB8+ma7gKLwp7TpvHxed+R6j+cFFbjt1wGV7lo9h1B2JLL8eW/ABbfALWXdVidRcRkfSgFlKRduCUnx3LAeP25YlbnmXB54vpO7QXgaCfd5+awuA9qzn3qrUEw8mv1YXd44RCHtFIw+566ze4uQHwOYDlxhGfcM7AufgdD9dzuG6PT7n39d255rZv8TX6ZPAg9gHEPiQ5yKk22V2MLbkICieppVREZCfQGFIRSWnd+nbhukd+Vvf6vYlTmfridI46cwWB4KY+nkNPKuWfv+/R+AY+Q9WIzgCMLFzD+IHzyKhddzTgJH9ee8KsehOZmrJ5X5IH3ipIzIfAkB2ploiIiLrsRdqrg08bTUHXPIIZyZnzG+V2cvn9U0vI65wgI9tPRnYYgLXjB+JlJL+DntR3AWGniXVHLTiN50FthQ+bWIxNLMNuwxqqIiLSvI2blrT0kWrUQirSTgVDAf7v0zt5+593EIu8RDhz0wSnPfavYuLMBSxc/jiOL4/Vi9Zy00PPUDMsHxtsPuJ0XYP1LIFQ0+etpdE6p9gqKLs22XZqsrH59+CEDvre9RMRkfShFlKRdiyvMJczrr+TcKdxYDJIzmbyAWF8+TcxdP992W2/QYw9+yBefupmDvN3wW8Nry0aSMRt4vuohVVLQ8RjTT/PAlE3+bHhbfymjQXc5GHLYMOFeLF5LVJfEZGOzJIcQ9oaR6pRC6lIOxSPxZn6wnS+fG82Xfp05tgLrqewyxnY6DtgMjEZJ2H8gxpc06V3If+86gIqYzFef/Vj3nhqOiecXYTfb+u2Hf3LlX2Y8X4uE+cfTMB5E7zlgEMk4YCNM2HKUKoKsjmq93cAjOi8Fl+jzzULpVdhu7ypiU4iIrJNFJCKtDM1VRGuPuS3rFy4hkhlhEDIz7N/fpnbXr6eEYf/ZqvXZweD/OD0sZxSMJC3n8xn9JHlRGscJr+WT8naAPld88jueQ1wDda6vP3Pu5n60nvM/DSb6nIHTJRJ++3OweMr2fe0tU0/xFuCLTocCu7HBIbt3H8AEZGOygIp2HrZGtRlL9LOvPx/b7B8/ioilREA4tEEkaood557b4OF8rfmhzefyZpl+TxzXzde+lcXStYGCGWGOPv6U+ryzHx/Lvdc8QXT3sghUmJwEh5O3CNrWjFfX1fDxHu7Nv8AbyW25EdYr3qH6yoiIulBAalIO/PexKnEahoP8qypirB07optvs/hlx3Okdcei+Pf9DHgxhMNPhWevPU5EnG33lUGMFjPEIs4PPbXnlz18sGURMNNPiMRj7Jw2j+IRePbXC4REUk/CkhF2plgONhkuvUswXCgyXOrKsqZvnIF66urKaqu4rwXnmP/f03gvoK1fHfTXtQMzAEgEXf51w3/ZuqLnwKwdO7yLZbFAh+9nc/p755aN9mpYZliTH72VX7Q42LmfjJ/O2opIpKetOyTiLQLJ152NEvnLidSFa1LM8bQrV8Xeg1quCB+JBHnF2++zpSl3xH0+YgkEmQGglTFoiSsBQfcTiFWXzKEXn+dTdXenakY2YVLvvwf1/TzEWgm+K33YDzXUFIW4K0Vu3BSv4UNTifi8MWHISpLq/j1CXfyzOp/EAw1HTSLiEj6UgupSDtz9I8P5aBTRxPMCBLKDJGZk0F+1zxuffFXjfLe8sF7TFn6HVHXpSIWI+55lEUjyWC0HuszrLpiGKVH9CTRJUykIMC9r7xLZK/OyV76Zpi4R+fXltHt+ln8+/Ic1q/Z9B23psrwxeQcvv0qEwDXdfny3Vk75x9BRKSjsq10pBi1kIq0M47jcMMTP2f8jacy56P5dOqez8hj9sIfaPh2jrkuL8+fR9R1m7lTPX6H4JoaOr25kuCKKpy4i3UMlYA/4CMRc+viUgtYB0zt/KnkT0vpVx7XnjaIf035BsfAw7f05K2JnesesXHylYiIyOYUkIq0U/2G9qbf0N7Nno8mErjbOFAoY04J3R9biBPfNEvfeMlrE069gNZYag4qxKv0yPx6A/V3H7WeobTIz8wp2ex9SCVvP9MZz9vUvJqIJRhxxB6b8tsY4GJMxjaVUUSk40vNRetbg7rsRTqo7GCQXjm5jU9Ym9xmaaOER+FLyxoEo/UZr16vvTUEZ5VjIl6DYHQjzzOsXhpkzvQsYkE/sa5hbO3K+T6/Q27nHKxbjLfhUuzavbFr98FbfyY2sbDxzUREJG2ohVSkgzLG8IfDj+LiV18k6rp41sL/s3ff8VWV9wPHP885d2cvVsJeIiAqICLiBpWqOGrdrbXqr3VbraNata3WVltH66pVW/dWEEVFREREUUBlyIYkBMjeN3edc57fHzeEhCQMTUIg3/frdV5wnjPuefLHud/7jO9jORBzSJ1XSPDgDByvQeLSctwl4d2+r6s6hqu6Ck1Lw0s12QOi3L5gArl/7Iuy49M5M97J45hAD7R20OXng10A1Ee0saXosnMh62OUkdI2lRdCiH1VJxzf2REkIBViP3ZE7z68+bPz+c+SRXz9/XpqF+aTPHsz7oooGe/Hc5Z6/B5UwEukbs/Gd7YUjCal2lwz9zgKB3QDt4Gun1BfdkY/Ro89BqJfgFNCQzBafx06ig69jUq4+AfVUwghxL5NuuyF2M8dkJnFPyafzBtnnUvPGQW4K5on1T/7t6egjJ2PW9r1j3ZFUZmPwgHd0W6z6bUek7dLNoKdD3r7mFRHw/zCbF5e359vt+ajO2NyPCGE6CgatFYdsnU20kIqRBeRmZ1OzpCebFia36T8sJMP4Wc3n86L97y50+tbe31FM33UjslAu028udVoW0MLqUa31taAazQoAzSUhPyc+8lUSsN+bG2glJuDur/Of6eegc8luUqFEKIrkYBUiC7i6/e/Ycv6omblC2cuoXxrJcow0HbLE5taUz0ui9Kz+qENBYZCxbqD2Tx0NZVmXHY2uA8G1zCILefmr4+hIJiIrbe1pmq+LczjX59cwg0jl4L/FFTSrSgj8YdUVwgh9k1dtKNIuuyF6CK+mLGoxTygpmmw7LOVZPRK26P72QEXpT/tj/aY4DLAUGiviWmCp34KvqEcRmds5bCszRiRd/hi40xIe5qQ50IWFOU0CkbjIrbBGxsHAyEITUdXXCLd+EII0QVIC6kQXURCSgDTZWBbTVtBDUMRDUWpLK7eo/tFRqbgMjSxHcptZXBEdjey3Z9z/Ygv8Zp2fO1kFDd/ZfDq6iB3H3cdqMdAN3oWrfFtrMUormJxciKHHFWLEVsNsaXgGfUDay2EEPuazje+syNIC6kQXcTki49ttpoTAErh8btx7TARqeGwoXB7TJJSbVxuB4/PIS0rxpmXFOP2Nm+9NJSiXzL8YcSnZPjCJLpjJHliJHui/POI2WwqW8KM978kPUhD15SK2PR6eAU9n1hJ0lsF/Pmyflw6cSgVpS6w1rfhX0EIIURnJAGpEF1E32E5XP3opXj9HgLJfgLJfhLTEvjLzNvo1jsTVPNf5S63yU8uP4Hnv0vjje+X89ryFTwzfxUvffM9xwwvoC7WPIh1GQaT0tdgqeavF5fS/PHgufzn7TcJLS3EtCx8Roy09zfhLQhiRB10FEJBk8JNHh66sRu4BrbL30MIITolWcteCLG/O/HiYznyzHF8N3cFHp+HUccciNvjxrZtElL8hGvDTcZsmm6Ts284jbTUeRCDhCSHhCSHulqD3/znKDhIN5vE5He5ySsv59Cs5m+859YO576lh2ONNrAdhcewOTCtlOCSIiyr6fm2ZfD1nESizjC887NoyAAAIABJREFU7fPnEEII0UlIC6kQXUxCcoAjThvLmMmjcHvi6ZVM0+Qfn/yRPgfm4A148Cf5SM5I4g+v3UCvgT3ANxnwNdzj4zfSqBiUAWbzV0gwGuXlgoxmP8CLQgHuW3o4EceFTXwSVBQXKyszMR272X0AtDbiS50KIYTYr0kLqRACgF4De/DUsgcoWLuVcDBM/xF9MF3xLnkVOBsdep3i3C38969pzHs3BXWTA0nN7+M4Dnl13ZiRP4iz+69pGAkwd2sfDNU8uAzZLtyHBrA+D2Hb21tblYIDDhuE1y/to0KILqSL/gaXFlIhRBM5g3sy6OD+DcEogFJ+qpynufLkA5g7PQ0rapD8eSEqukPLpuUwPDGdqGXz+0XH8FlhDttSm7oNp9W5o6smDSWa5MHtj7+JvX6DhNQEbnj6inaooRBCiM5GAlIhxG6Z8fhcwkHNtt711E8LCSyvQEVtVNhCRWwSqm1uH3k4iZ8XoiIOVyyYzOfFOURsg2N75tFySKqIJPnJ+/3BFJ/Zn2N/MYBf3ftznl//KH0OyO7QOgohxF6lAa06ZutkJCAVQuyWZfNWEg1vzzqqHOjx3Dr63/I12Y+t5KQVivlXXcFHD31I+hsbSZu1mWglXPLJFM57fjIBovxj3Mf4TKs+cX7TfintMakZ14vcM8fjPXkQ7kTpqhdCiK5CxpAKIXZLn2HZLPvs+2aJ9ZUDScVRjhk5lJTMZDYuzwdHk/bxFtI+3gJAEPjbZ324+ZE85kx+kbuXTeCDggHNWkxjjsOcjev5oiAfn8vFqz89lwFp6R1VRSGE2Ou66jxOaSEVQuyWM66Zgqt+Vv6OouEYL979JrZlk96j5SVIP38/lV8ddQAz/pnKoO9yUVbLb10HCMZilIVCXDVzRls9vhBCiE5MAlIhxG7JGdKLe969FWW0PPYoFolRXV7LkWeOa/UeJZs9vPZod977cyIJX5agIi2ne9pmVWkJb3279Ec9txBC7FO6aGJ8CUiFELtt1DHDGTK65ZWTXG4XSWkJnHDRUXj8TVtSo5k+is/uT8F1wyk5qx+xdC+Zb+RyxDdRpgwagtdsedlSlOLmObMoqQu2dVWEEEJ0IhKQCiH2yC/vPhev39OkzBvw8rObpuJyu/An+Ljj9Rtx++JBabhPAgW/G0nN4VlE+iVRPb4bm246CKtfEidedDSXHDIaW2sa8kPtwLEcnvjgU6Y98j6XHXQDlwy7lhfveYNQMNzudRVCiA7XRWfZK72PjZ4dM2aMXrRo0d5+DCG6tAXTv+bfNz7LlvVFJGcmce4tp/PT609Fqe0vueqyGqY/8gH31H5PtHdi0xtojYo6JCT6CcaiaMCoieIkutmWSd+siZH5+gYSllWAri+uf115fG76HJjDI1/e25AvVcdWQ3Q+qETwnYgyUjvgLyGE2F8opRZrrcfszWfw9svRPW6/tkM+K/+ym/Z6fRuTWfZCiD12xNSxHDF1LI7jYBgtd7QkZyRx2tUncefzec0PKoX2mtTGog1FgeUV1I7NApcCR9Pr4eW4yyI0LO7U6LdzNBxj85qtLHhnEUeecRi6+k4ITQNswAU1f4HUx1DeCW1WZyGE6AgtLGjXJUiXvRDiB2stGN0mOS0Rs5XZ9DtyfC4CKypQEZvAykpc1dGdvphDtWFufvQl/rvwQXRoOhAGYkAIdAhdeTVaR1u/gRBCiE5DWkiFEO1GKcVpfQczLW8t2t168Jr6QQFpc7agYg7V47rheA1UbOeBrONWhJJcdDc/QhFqdjwSilKX9wEZ/U770fUQQogO0UlnwHcEaSEVQrSrv5x+Csf1H4BLK9wtZHka7CrmP7/6lPfXfsPbq5bxuxO/IXPBll13Wxkq3sVPy5OhrKjFS39+lOr8O3Eqb0KH3kXrWIvnCiGE2LukhVQI0a68Lhf/OfMsttRUk1dZyYw1K5m+ejUhK0Y3X5DXJ79LwBPDMMDldjjl52X07Bfhj78c0OL9HLdBuHcC5af2wU5yMz1vCEf12ESC22pynsutufT2XFxGLoQ1OjwLgv+FjJdQSpYlFUJ0Rp1zBnxHkIBUCNEheiUl0yspmcNzenPqkGG8tXIFk7rPwO/WNB6K6vVrRh9VS/feEYo2edHQsMCo41JEsgMUXjYU7Y+/vj7e0pfZW/oxKTsXr2lhOQaOBqU1vkDjZtY6sNai615FJfy8o6othBBiN0iXvRCiQymlGN+7D/dPPpkTeocxTavZOVZM0X9YPM9o9bgsIj38RLv7KT+5N1uvPDAejFoO2A4axY0Lj2V2QV+c+vjTAIwWf26HIfxuu9VNCCHEDyMtpEKIvcd9IES/AprOhne5NQXrvTgmVPykN3ayp9mlytFkvbKB4osGccXwbzghJ4/4vKn4mNJWUyyrQJtWQQgh2pRMahJCiI6lAheCarrMaCwKuau92Dak9gWzuvXUTf7VVXhza/jVkKUEXE1bWpVqKSj1oQLntc3DCyGEaDMSkAoh9hpl9kClvwLuMYDCinn4dHoqt50/gK25Xqo3QPp7BahI0+n5KmqT9GUxZtgiIa+aRHfLQavacW6AkQneye1TGSGEaAu6g7ZORgJSIcRepdxDMTJeQnVfxXOP3sL91/WlptLNtqlMCSsryXx9I0ZNDBVz4sHogmIyp+XjuAyiiT6+W59OWdFujEBytrZvZYQQQvwgMoZUCNEpKKUoKShr8Zd78qJSkhaXYgdMzJCNqk89qkyTtNmbueXV3rgNh94DI9z6eB45gyIoWmghpWumUxFC7EM6YetlR5CAVAixV32Su4G/zZ/HxsoK/AdrfKszSVpc2uw8pcEMbu+6d7wGRG3chfGxozEMNqz0cf3UwVzxbiV1ppdT+65vdAcXeCehlELbW8DKR2OjdBTcw1Fmt/auqhBCiFZIQCqE2Gs+zd3IlTNnELbqg0oP1JzTH+1SJC8saXKuVjRZvUlF4s2kaoeTakJuSj53OOXc/EYHFBg9IfkWnIorIDIPsAAHjQsw0P6zUcl3oJo3qwohRMfQdNnE+DKGVAix1/xtwWcNweg22mNSfkofXF53w9j7cK/mqZoULXfAGzEbu9wm0d14mVAjnmKq9t8Q+Yx4mqltS45a8f3wW+jQG21QKyGEEHtKAlIhxF6TW1nRYrlO9nD5w78gISOBqsOzsFM8u17bvp5haIYdEtyh1IbIxxB6A4i0fKEOQd2zu/3sQgjRHpTumK2z2WmXvVLqn7txj2qt9e1t9DxCiC4kOymZ9RXlzcqTvV4OGjcUHbFRpkFwZBr+9dUYUaeFuzTlOIraKrOVo7FWyrddXLMbTy2EEKKt7aqFdCqweBfbWe35gEKI/dcN44/E52r6u9jvcnHV2MMb9lXMoXZUOtGeARx3K2OrGv3c147i7aczdzjBBO+x4Bqyk6dxgfe4PayBEEK0sS6ah3RXk5oe1FrvtA9LKZXWhs8jhOhCTho0mIg9mb99Po+i2lrSfH6uOuxwfjHqELTWBJL9JCwrp/Sn/dh89YEkflNG8udFJG2pQaGJRQ18AZvMnjFGjAvywUsZAFRVuqmNuUlwxYhqHx5XKkbynWAXoMt/SbzbvnFrq4rvx5bihOdg+CQwFUKIjrTTgFRr/dCubrA75wghRGumDh3G1KHDiNk2LsNomOWulOKO12/glpPupvfLuWw6tx91I9MZdJzDgyMWM/e1FIoK3Iw6IsjRp1YC8NXHyZSWeVgxoD+//zqHQSkV5NdmUM1EnpraDcxukDkNHXwaIp+Ds4UmTQbWMqj8NY45FJXxLMpI31t/FiGE2OuUUs8ApwDFWusRLRxXwMPAFKAOuFhrvaT+2C+AbUM6795VA+cPTvuklLpDa/2nH3q9EEI05jabj/s8cPxQXsx9nE9f+4LConKiozI5ftQscnwRLrqhqMm5oaDisBNreGdmTyqO7sXMAhcUxI+ZdgGPPzqNi39xIv7E/pBwOTr0Dq32W9mr0RVXojJebuNaCiHEPuV/wCPAc60cPxkYXL+NAx4Hximl0oE7gTHEX7SLlVLvaK1bnsnKj8tDeikgAakQol0lpSVyyv9Nath3ar6DoAE0Xd/eME38h/elYPgBaG/T4NbWDs8+P4vpv32FC247i7N/k4uHpummmoktQ1ubUK7ebVUVIYTYpc40A15rPU8p1W8np0wFntNaa+BLpVSqUqoncAzwkda6HEAp9RFwEtDqr/ydTmpSSlW3stUAvfaoVkII0QaU7xTA3azc6zMxDz2nWTAKgKlwXAo7ZvPCn9/gplO+w7Z3EZDiAqesTZ5ZCCH2U9nApkb7BfVlrZW3alez7CuBwVrr5B22JGDrnj+3EEL8OMo9BBKvArz1mz/+b8q9dEvOafW6cE4CAI7tsPa7GHU1O+8g0oTQ5efhFI7Aqfwd2qlsszoIIUSrtOqYDTKVUosabZfvzWrvqsv+OaAvUNTCsZfa/nGEEGLXjMTL0b4pEPkElDu+Rr2Zgddcg9/lIrTD6k8o1WRJUCtqU7LFRVJqy62kWoNGo5QN2BCeiY4th8z3UErWExFC7BdKtdZjfuQ9NgONxzXl1JdtJt5t37h87s5utNM3q9b6dq31V60cu3k3HlQIIdqFcuWgEi5CBc5FmfF0TxN698HRzQdgmZURMt/KbdjXKK47ZTCfv59MWdhLyDKJ2QaOhpqom4itMJqkPI2BnYcOf9S+lRJCiH3LO8DPVdzhQJXWeivwITBZKZVWnx50cn1Zq3a1UlMPrXXhjz1HCCE6QorPxx1HH8ef531CzIpiY6AiNhnT8lCx7XlHFRAJGzxwQ2/OfNvhwZVj6RaupnqpxaSBedx6wfIW3o4WVN2E4z0cw0jpyGoJIbqKTpa0Xin1MvGWzkylVAHxmfNuAK31E8BM4imf1hFP+/TL+mPlSqk/A1/X3+pP2yY4tWZXXfYzgUPb4BwhhOgQ5404iNE9e/HG4jv57hvY+kIIz4oaWlrjyYoprIIY7pklxD7Yis9UfGkYnHPfcO55cQMHjqnb4YoQlP0UnfmhdN0LIfZ7WuvzdnFcA1e2cuwZ4Jnd/axdvVFH7Ti7voXZ9t1398OEEKIjDMnI5JaJp/PiRZ9xzvj1GK3kUamLmCx8wUvSu1swLI0ZcXBCUFdj8oeL+hOLNg9jY7F87pv7N+bn57V3NYQQXVEXXTp0V2NITa11MrAIOE9rnbRtpj3wav3+TqfxCyHE3mD4J2GmP8xv/pLMtfdvxfE0fd1pBY7HZN0sV4utp46t+PbzxGblLqXp4VrI/707jZeWfddOTy+EEF3L7vY59QNuUkrd0ahsdNs/jhBCtB3lOxYjcwZTrp+P+8je8VykPgPHYxBL82BEnVaTUGsNkVBLoSqcM2AlNx/0CffOn0ukfka/1lF0CxOqhBBiTyjdMVtns7sBaSVwPNBDKTVDKSUj+oUQ+wylFA8+ewOlFw2mYnIOW35zAOVTeoPZcsAJEKozGDmulsYxptagFHhMzRl913B0j1wKy9/FKTkeXXQQuvhQnJqH0dpu9b5CCCGa292lQ5XW2gKuUEpdDMwH0trtqYQQog3NeWU+D//fk/RFE41GSO5pcfAvLOZa3mZDqTTxWfhoxU1nD+KOp3PJ7BkFDW5vPCAFSHBb/H7UXLo7s4FI/cVBCD6D1nWo5Fs7rH5CiP1IJ2y97Ai720L6xLb/aK3/B1wMzGqH5xFCiDa1YWkeD1z6OHU1IUI1YeyIpjLfYMXTij6Dw9DCSqPb5K7yc8mEYVx14lBmvpCBscMbs7s/iNoWjDYIQd3LaGfHGfpCCCFas1sBqdb63zvsL9ZaX9I+jySEEG3nncc+IBZpuiKTdhQ1FSa/unULhxxZg65f657uPu6ZfTu3vXw9A0f1xRvw0KNfFqdfVs3plzZf11611uOvDHBK26E2Qoj9XhedZb+7XfZCCLFPKttSgWM7zcqVAbaluO25Tdz4ydHMze9N9x4+xh03CoBjzjmi4Vwd/hhdeTVaW60HoU1oMCUjnhBC7C7J7CyE2K8dNuVQfAFvs/JYVDGsPvF92OvFTnYzNKtXi/fI3zCEl/41cjc/0Q8Jl6FU888UQoid6agZ9vvyLHshhNgnTfr50XTrm4XHt71DyBew+emvS0jLsog5Jl8W98JrKK45/Ohm11eVVnPtkbdTWVTELrM6qW6QdDMqocWFS4QQQrRCuuyFEPs1X8DLIwv/wozHZ/HpqzNITNzC5POqqa2Bp+7vxTTXSAYMT+KuY6cwqnuPZtdPf+R9QrVhSrZ4iNQp/IktR6WO6kvu1n/z2vsLWOz7D75eyUwdMZypQ4fhdcmrVgixm/RujQva78hbUgix3/Mn+vnZ76bys99NZe3ib/ndCfdjWw7hOgtfQiVDRhXQ41C47Td/4ZuPl+MNeJhy6fFM+sUxvPzXaTiWw1cfJ1EXNPH4LcxGM/PjCfQNfn++hwX+Byn7SW+0MqCohsVFW3lp+VJePescPKaBrnsNQs+DUwve41CJV6LMzL33hxFCiE5CAlIhRJehtebu854mWBVtKAvXhlm7eC1XHXYzsYiN1ppYJMa0R97ng/9+gh2Lz9C3YgY3njGI3z+RR98hIQwDYjHF/JkpfPVxMoGeDmVH9ka7t0erURzWlpYyY80qzsx+BUIzgFD8YOhVdOQjyJyJMpI78s8ghOjMOuH4zo4gAakQosso3FhM2ebm6ZiiYQd/YpRoePsrMRqKEQ3FGvYDSTYHjg0y69V01i73U1zuw+PEuO+1DUw4qZq5RX14d6lFrdU0sWnItnh/7TLOTJ8OTXKWWuBUo+teRyX+qq2rKoQQ+xQJSIUQXYcCtNXioXDQpNE6TU2MmlDDH/+Xi9ZgmvHmi+lvdOOIIyrI7BHDMCEzHEG3cK0CUj0hUG7QOybRD0P0C0ACUiFE1yaz7IUQXUaPft3I7BWleZ+YRmtFS8EoQOlWN99/HSCQ6OD1a7x+zWk/KyErOx6MAozOKCTR3fzeXtPFBSOGQIvr25tg9v2RtRJC7E8k7ZMQQuznlFLc/rRJYoqNL8HGMDUev91sSdAdbd7g44+X9Of7RYGGMo/HwTC3v9VNQ/O/o96juz+IX0VRIQsVc5hY5mN4xhhw9WNbp5Sj4eX1wzj5g7OY+GYGd3wym9I6WWpUCNF1SUAqhOhSBh5+PS8s2sBV92zmFzcVcutjeZiuXTcXRMKK5/+xffUlQzVvTx2cUslHx7/E1A0LSX+/AO+GGuaYFUz428MsDN4FnrGAhz8sPoa/fHsEa6vT2Fob4tUVyzj15eeojoTbtK5CiH1QF106VAJSIUSXorwT8ff6O5POS+Dcq4s54iQXYyb1wO3d1ZB6Rf4aX8NeKGjw9n8yCdcp7PphqVYMivI8fP1BMuWn9CY8OBk7yU15hotLZnzKzNLfs9X/PtPyhhGyt39ezHGoikR4dfmydqixEEJ0fhKQCiG6HMM/CSNrDqr7SozuC7n5xfsZdcxwPD43gWR/K1dp+g2LoHU8GP3q4ySevqcX10wZwrvPZbDgw2SmPdONq6cMoWByf7THBEcTWFFBwrdlxGrC3PPZJywvCeM2nGZ3D1sWXxTkt2/FhRCdWxdeOrRdZ9krpU4CHgZM4Cmt9V93OH4xcD+wub7oEa31U+35TEIIsY1S8RlJCckB7n3/dkoKyijfWsGnb37JjEc+IFy3fVa88pp4zsjkxbcsvn3RzbIvEwBF3hofj92eg8vjkNHDwooqojkJeDfW0PPJVfHM+VqhbIeK0/uROulwbCcGuJs8i0vZ9EkMdmDthRCi82i3gFTF3/SPApOAAuBrpdQ7Wuvvdzj1Va31Ve31HEIIsbuycjLIyslgyJiBZHRP5bX7p1NVWkPm0O58PymT5+0ACUvL6bZkHQZNWzmtqKIo3w0ozLIwPf+9CjPcdGZ9+ju5pFz5X/omJrCuOhVLb89Z6jIcLurzJNo+HmVmd0R1hRCdUSdsvewI7dllfxiwTmu9QWsdBV4Bprbj5wkhRJtQSnHW9afwcsG/+fM7N2OM6YlVGkRFHYIj0ggNTMbxxF+f2787tqeNGvjxWpRu/q1iWA6zn1/Os0e/y2FZW/EYNj7Toru/licmfEj/pBJ01a0dUkchhOhM2rPLPhvY1Gi/ABjXwnlnKaWOAtYA12utN7VwjhBCdKhQMMwNx9xJweothIJhsjwGGW/nseW64RReNpTAigoSF5fizQ/iKY937XfvHeHPz21k/Qo//7w5h1Ck6apN2lHU1WoyfGGeO+Y9KiJe6iw3vQK1qG1T9qNfo3UYpXwIIbogaSHdK2YA/bTWBwEfAc+2dJJS6nKl1CKl1KKSkpIOfUAhRNf04t1vkLt8E6HaMGgwIg5mnUW359eBoagbmU7pOQNw1UQBcHscHnxnHX0GRzj4yFosq3mSfV/AZsLJ1Q37ad4I2QmNglGgy34bCSG6tPYMSDcDvRvt57B98hIAWusyrRvW0nsKGN3SjbTWT2qtx2itx2RlZbXLwwohRGMfv/AZsUisSZnS4N1ch1lrocI2PZ5chRGLB5DjT6zGn+DwybRUrjtlMLGIqp/KGj/uC9iMPDzIuEnVO35UMzo8p83rI4TYN8gs+7b3NTBYKdWfeCB6LnB+4xOUUj211lvrd08DVrbj8wghRJvQSqMNhRHdPrGpR58o82cm88itvYmE6n/razBNTVZOmItvLuSoU6t2uSoUOFhVd+P2nYxSLS9lKoQQ+5t2ayHVWlvAVcCHxAPN17TWK5RSf1JKnVZ/2jVKqRVKqe+Aa4CL2+t5hBBiTxx/wUTc3qapmbSCSK8AToIbXAblp/RpOLZ+RQLP3ddzezBaz7YVFcUeKkvdxCIK2wbbimeDao12ynnh23ltWh8hhOjM2jUPqdZ6JjBzh7I7Gv3/VkCmlAohOp0Lbj+LxbOXUrBmC6HaCNpr4LgMii8aFD/BUNiDUklICeD2uhkyfipLPp3W4r0iIcUTd2Qzd1oqE0+tJCXdYtLZla1+dswxuPfzRaTluTj+hEPxJ7aWrF8IIfYP7RqQCiHEvsqf6OfRr/7KFzOX8NsnXiaU6iZ4cHp8BaZ6A3tmMa1i+1zMtx77gEhVpIW7xbveVy5JYOXSRO6eXdBwJOaYuI3t+UrrLBcvrBtOJOJw7+Nv8sSFj3H9k7/m+PMntn0lhRCdTycc39kR9vYseyGE6LQMw2DCKWM4+cYpWEf0bBKM+l0urjpsfMP+igWrKT44Dcfd9LWqDXBcCm0q6g5IIf/mg7hu1UnYTjxIXVjci9qYmzrLRdgyeXXDAfxj2WGgNbFQlEhdlAcve4KCtVsRQoj9lbSQCiHELtw28Rg08PqK5aDAY5r8bvyRnDRocMM5s5//lOABqYRzEkifuQlXRRQrzUP5T3pTO6ZpdpCgFWVJWXfGZhXSK8HiyBkXk+IJUhbxEbbj41aVckhYWg6AFbOZ9excLrn7vA6rsxBCdCQJSIUQYhfcpskfjzmeWyYcRUU4RLeERFw7TJe3LZvEZWWUntWP2rFZ8VlLrcySD9sms7f0ZVR6MQOSKrjusJHcv3AVju2gohYoReZrG3BVxxruXVtRC4C28iEyC7QFvhNQrkHtW3khRMfppCmZOoIEpEIIsZv8bjd+t7vFY8eedyQfv76AmoIgkZwEtNcER9evKNo0MLW1yUvrhvN1cTYvn1TGLw89ksmDD+WtBc/y8n15+L6paAhGAXyJPsafOgYn+BLU3As48a32MXTCrzCSrm2/SgshRAeQgFQIIdrAwceO4IRzJjD7v/OpGJRIqH8i3rxa/Ak+Qh6o7ZtA3fA0MOPBach2s7Y6g7fXbuVceyy90Fx1iCIwMotpCzOJYAAKb8BDRq80vp0zh4NHPoNpNk7Wb0PwabTvRJT7gL1SbyFEG5MWUiGEED+UUorr//1rTvzlcTxy1VOsfycPx44nzk8CEtwGsSwfm68dHm89BUK2wSuvBJjz0UDKCt30Hx6mqMZPxDLJyI5x+i+K+WR6GnmrIrzx4BY2fpPNjQ9tIjVj+6x8y4nw5uL7SM28hZMHDdkbVRdCiB9NAlIhhGhDxXklbFq9pSEY3caIObiLQ6R9tJnaUem4amK4NwcJzionLxbPM7psQSIaSE6L8dcX13HtKUOoq423lAIs+TSJ3501iCc/Wd1kFEB5XQ1//ehdCqomctnosR1UUyFEu5AWUiGEED/WO49/SDjYUi5SMCxN6pwtpMwrRBtghB12nPak0BxwSB1ffJiCZSlodIZtGZRsdrPsywQOGh8EwHIMDsko4svTnuTDgk+IRF/A60lpp9oJIUT7kDykQgjRhloLRhs4YEQdzBaC0TjFuuUB8tf5iIabv6K1hvyNPiK2QdgyeWTloVw6fwrVUS8n5qwlVnF5W1RDCLEXKOKz7Dti62wkIBVCiDZ0zDkT8Po9rR5vOQhtqkfvKMMOrcMbsJsdC1ku5nkG8cCyw/jJrLN5YuWhaBTvbRqI13Tw65Voa92PqIEQQnQ8CUiFEKINnXbFiWQP6YnH3zQ9lMvjQhm7Dke9focLflvE8T+tIDHZxnRtH4tquCHUN4m3nIN5es0o8mrjXfMx26AmFg+ClXKBld+GNRJCdCjdQVsnI2NIhRCiDfkCXh5ZeC/zXv+She8tJlwXod/w3hx83EjuOuM+QrXhJudrFd8wFMnJFlf8sYCxx9YA8K/31/LMX3ry5axklIKQ103xLwdzVI98TuiVS03Mw7v5g9hal8DEHgX1N4yBazBCCLEvkYBUCCHamNvj5vgLJnL8BROblF/z2KU89OsniYZjaEdjeF1Ek1xsuvZAUIqDepdyxLGrsB0wDcjobnHjQ5uIhBW2pTAMh28KtzCqTzkJbgtHw+UHfIcmPhQgapt4AsejXL3RWoOuBeWPt5oKITq/Tjq+syPIW0oIITrICRceTZ9hObz9r/cp21zOYScfwv9phxIbAAAgAElEQVRSS1HBCmyt+baiJz+bM5Vrhy9hYq9avKoMpRx8/u19bOMHFDekfNo2AkCxfaXSiP8WvKH34is6OeWgPGj/Raik61DK3Cv1FkKIXZGAVAghOtCQ0QO5+X9XNexPrK3l0hlvs6GiHFedTeVj1TzwXToPkcr4yQlc+Ici1qhuBFwWh2VtxW04Ld5XKXAczQNzb2VoSgVn9i8mYpu8sG4g7+SV4nE/wAUHT+H0Aw7EULsztUoIsVdIC6kQQoiO1j0xkRnnXcTakhLunHAXFXllWDEbG/hsZjJz5mdRdseBaLeBx7B5auL7jMooafFeXtOhX2IZN319FK9vHEDIdrOuOo2wHZ9gteqT2czPz+OBE6d0YA2FEGLXJCAVQohOoPyrfGoLq7Fi21M9aVth1FmwpJbg6EyCwCXzpvDFac/jMZu3lGoNW0OJgGJxaQ+UUtjawFQOJ+Vs4OScDYRsL/klfvpkHdtxlRNC7D5pIRVCCLG35K4oIBqONSs3Ig5JnxeRsKSE4EEZhEck88aGIZw/eFWL95m5aQAADiZoMJXDf496j1HpxSS4LWwHtHU1Tu31GIm/atc6CSHE7pI8pEII0Qn0PqBXs9ylEG8sMcIWJecNIjgqg6jLzV2LJnLLwqPQjVpSHA0rKjLIrU1rcvXk7I0NwSjEZ++7VBRqH0I75e1bKSGE2E0SkAohRCcwbsqhpHVLwXRtnwm/bW590a+G4gRcaJ+J9po4psE7uYN4Z8NA6qIegjE3G2tS+L/PT25yTwVMzt7YEIw2PeiCyJftWichxJ7rqkuHSpe9EEJ0AqbL5KHP7+FfVz3FF9O/RmuN7WiiPfzYie7tOZ7qRZWbu6aNwelzIOEhg7hrTR32Dl8yGoUm3nra4iJRRkK71UcIIfaEBKRCCNFJpHVL4Y7XbogntQfOzfk/trii8YiyBVHHxb/+WYkv/1N6B0wqjuxGeHAKVrIbO93HmMytTMrOpeUkT27wjG+3ugghfqBO2HrZEaTLXgghOhmlFEopTv3NZJLLYi12rxnBGAlLStDVUeyYjVkVJfO9AnIeWkGfe5fiza3hnjHz8LtsGqcdjd/KjUp/GqU8HVMhIYTYBWkhFUKIDlRdVsP0Rz/gmznL6NG/G2de+xMGHdy/xXPPvfl0cpfnU/PKGjZfOABtKHAZELHo+fhKPEVhjFjz9E8q5pC5voS+iVXNjwHgQblHtm3FhBA/3vZF2bocCUiFEKKDlBdW8OtDfkewqo5oOMaK+auY9/oX/P6l6zjitLHNzq8oqqKkoIzA6kr8a6oI90nESfaQsLIKT3HLwSjEg87K4ZnYWuFq4dtNG0nUxWJsqamme0IiSV5vW1dVCCH2iASkQgjRQV68+02qy2ux65PfO44mUhflwcv/zbifHIppbp9h7zgONx57J4W5JTi2g2dLHaHBKQAkLC3HiLYcjG5jhRSzF/TghHFb8Xq2B6V1MRf/Wnsmz696DFMpLMfhpweO4M6jj8NlyCguIfa2zjgDviPI20cIITrIwplLGoLRxsLBMIUbi5uULf30eyqKq3DseOCZ/n4BKfMKUREbT2Fol7162Q+v4JELM5j9ahrhkKKm1iRsm9z1zdG8sEoRtiyCsRgR22bJpvm8suR/aB1qq6oKIcQekRZSIYToIEnpiRTlNl+H3rYcElICTcpKN5c3GUumNGS8t4n0Dwpwu120kFkUraD09L5EsxPw5taQOq+Qf97cm2fv60H/URGWjRxM8QF9SXBVc8HANfRNrGJC981k+UJY2kAXPYxOugUj4by2rbgQYvd10RZSCUiFEKKDnHXdKTz8mycJByMNZS63yciJw0jNSmly7tCxA7Ht5t3yPq+bWKR5OOoo2Hz9CKwUN4nLKjCiDsXnDCDzrVyqyuDbOW6GOrl0H2/w6BGzMND4XDZa02QWPjX3ot2DUJ6xaLsIol+ASgTvRJSSsaZCiPYhAakQQnSQ4y+YyIaleUz71/t4fG6smEX/EX34/UvXNju399BsJkwdy4J3FhGpiwewbo8Lj9eNHbNxduj5V4bCVRUl+5HvQcdn2muPQbSHH8oigCY7PcivD59NwLU9oFU7JCnVRCD4LDr6NdQ+DsokPk3KgLRnUJ5RbftHEUI00ZnGkCqlTgIeBkzgKa31X3c4/iBwbP1uAOimtU6tP2YDy+qP5WutT9vpZ2ndiWq+G8aMGaMXLVq0tx9DCCF+sMqSKtZ/m0tmdjp9D+zd6nm2bfPuE7OY8fgswnURjvrp4az8ci3L569qfq7PBK0xI01bVR2PgRF1cHts/jFtHYMOimAaO3/vl0R6kumtQBFuekCloLotQCn37ldWiH2EUmqx1nrM3nwGf4/eetCFv+2Qz1r+j9/utL5KKRNYA0wCCoCvgfO01t+3cv7VwCFa60vq92u11om7+zwyqUkIITpYalYKoyeN2mkwCmCaJlOvPJmnlj/ICxse4/L7fk6PfqmoFgJKZTktrugUn42vSfhJIk+ExmPrltdt2kZryPBsBR1u4agF0a92er0Q4kfSHbTt2mHAOq31Bq11FHgFmLqT888DXt7teu5AAlIhhNiHnH71JDye5t8mjs9s1v2+TaynnyVHj2TGpsGUhAOtrUTaMJ7UUM278uMUyEx8IbqKbGBTo/2C+rJmlFJ9gf7AnEbFPqXUIqXUl0qp03f1YRKQCiHEPmTo2IOYdL7Bjk0cRthCm81f6Y5HUX58DhoDUPz68xNZVZnBq+uHMmdTX4JRk9KwD9tpLQhtRMfAM67N6iKE2EFHtY7GXx+Z9QHjtu3yH/Hk5wJvaK0bj27vWz8k4HzgIaXUwJ3dQCY1CSHEPiY1+0TggyZlhgVYNg098hpQEB6WQu2hGQ3nrazM5LSPzsJUDqbl4CjFYd238siEWSR7Wkom1Yj/QpSR1JZVEULsPaW7GDO7GWg8riinvqwl5wJXNi7QWm+u/3eDUmoucAiwvrUPkxZSIYTYxww8eCT+JH+zcrfHxfm3nMGQQwdgKLADJoU/Hxzvg29CYWuTqOnGUibratJJdDUPRpvNeQ29hLby264iQojO7GtgsFKqv1LKQzzofGfHk5RSBwBpwBeNytJUfZ44pVQmMAFocTLUNhKQCiHEPmb8qWPIzM7A5dneyeX2usgZ2otf/Okcbn/legLJAXxRULW7aPVUipqYhzXV6U2Km+UnBSCGrnupbSohhGhGdeC2K1prC7gK+BBYCbymtV6hlPqTUqpxCqdzgVd007RNw4BFSqnvgE+Av7Y2O38b6bIXQoh9jOkyefjzu/nv7S8z99UFKKU49rwJ/PLu8zBNk14De/Dk0n/w+v3v8MqWAjYne3f6DWQqTcje/nWgNdgaXM2uscBqnnJKCLF/0lrPBGbuUHbHDvt3tXDdAmDknnyWBKRCCLEPSkpL5JpHL+OaRy9r8Xi33plc+c9LSFv2HX/4ZPZOs7wYSjMirbRhP+YYKNVKbhhr6497cCHEzu1b6eHbjHTZCyHEfuzYfgPAar4EKYARjGGWh7FqHe59bgQ1lSYAUcdkYXEv6mJmw7mxCFRXmIRqctFObYc8uxCi65AWUiGE2I+lmR7S39tE+ck58bRQCozaKN1e2kBgbTXaACfg5o2zh/LZz5N54r7F2D19XPbuCfxf7hxOv6iYQILD/JkpvPFEFr36Rfn7e7eh0h7e21UTYr/UmZYO7UgSkAohxH7MsR3S5hXhX1VJ7ehMHLdB0teleLbWoWyNssGoitL92XUUXTSQu64eyIorxpCwoJj3Zmfw/jPxyU6GoenZL0rJFjcbvpnPwGPqUEZgL9dOCLG/kIBUCCH2Y4EkP/0P7sv6xRvJeHcTjjs+x9awmzbDKNshYXklRStMoqsipBTUYVjxc8YeV80ND27CF7BwucGKGujIZyj/iXuhRkLs57poC6mMIRVCiP3c75+7hkCKHwxQMY02m0+5Vw74V1cC0POR71Fa4xrsZuA/U6i5cgAf1w7E8Jm4PeBLcNCV1xApu5qmC7MIIcQPIwGpEELs5/oOy2HShUdhmiYKMCLNg0gNuKpi8eMaAquqKDh7CHP0EN7bNIg/LpnA1I/OpDbmRilQSmOHZjNn5d87ujpC7N86bunQTkUCUiGE6AI+evZT7Fh9IKpBN3r7b/tuatJuamtSXs3H0vGZ9iHbzabaZP63ZntqQZ/LJpMZfLh+bbs+uxBi/ycBqRBC7Oe01oSDkYZ9RbyLvsn+DtcowLehBpztTSkRx8V7+QObnGcqm6eWLGpSFrEsvtpcwHeFW3GarT8qhGiVjs+y74its5FJTUIIsZ9TSjFk7EBWf7Vuzy40VLNINVrlNCwrGrJMpucNorSuruH4B2vX8LvZH6CUQmtNksfL06edwbCsbm1QEyHE/kpaSIUQogu45tFL8SX6MF3mrk8GHFNRc0h60wXtbU0e6Qx74zJ+Ne8kpuUO5uV1Izm6X39yV2zixil/5r5D7yTt7kXw5RaCsRiFwVouePt1orZMfhJit3TRMaTSQiqEEF3AkNED+fc39/Pmg++y7puNVJVWsHVDMY7dtAlUKY2j42WVx2WjwhYA2mvGk+qHHczSMPOrevLp1j6gFGsKCrnirGeJVdRhajCDFlmvbMCsjFJ1XC8s22Fe3kZOGDCow+sthNg3SEAqhBBdRK+BPbj6kUsBKNtawdVjL6Wm0iFcZ+IL2LjcDhN+GeK9Z9JxVVv0vn8poUHJ1A1LpWp8FhkfbCb58yK0y0BZDsGD0ik+fyBfFW/Ff3oOPZ5Z0/BZRtQh/YMCqif2wHFrKsLhvVVtIfYpnXF8Z0eQgFQIIbqgjJ5pPLPiFj597res+c5kwLAw4yZVMbewL+VFvcl8Iw8j5hBYW00kJ4HkL0pIXlAcT5ZvxbvfE5aVkzHdRdlZ/QmOSKPgqmGkfFFC4pLS+JeqAld5BNvn5vDs3nu3wkKITk3GkAohRBflSxmLv9sNpHdTuNwOt50/gMfOTKX20CyKzxtALNOLBjxFIVI/LcSIOU2uN2Ka5C9LwNGoqEPGe5sI902g6BeD40PUbI2d5CbdH8Dvdu+NKgoh9hHSQiqEEF3Y2m+DvPK3TCATABOb1FkFVJ6QTfDQTPrf9BWBlZVoV8vtF8p2UPWBqndTEO/mOkrO7EtoYBJWuhcn4KIkWMtFb7/OzPN/jlLNV4kSQjTSRbvspYVUCCG6sH4j+uAJeJqUpX+0hR5PryFhRQXWyHigqmynxe/JWLoX7TFwlYTAUBhRh7TZW6g6uicl5wwAwNKaTdVVLC0qbO/qCCH2URKQCiFEFzbxrHH4At5m5YE1VfT4z2pG+0KkZCVTfUQ3tMegfgI+WoHjNig9ewAohdXDT9FFgwj1T6RiUjZ1B6VDo1ZVQyk219R0VLWE2GdJYnwhhBBdjsfn4a63buLGY+/EsZuOEXW5HYaMyIUbxrEiP5Wqo3uS+tEWvPm1xLr7qZiUTTQnAQDtNqk7MI26ISngbt7WEbOjDPc/ixMchvKfjlYJfL25gMpImNE9s8kMBDqiukKITkoCUiGE6OJGHnkAoycdxHdzlxINbw9K3R7NURdV8dCSVKK4IMtFyfkDW7+RAXibJ973GDZTcjbS2/Ux1PjZsPU5fj7vDGoi8RynMcfm16MP49rDj2jrqgmxb+mkSes7gnTZCyGE4M43b2TSuS48PgelNAccEuTvb62nLjmA13R2fYNWaYallvLXsXPiezrEJZ+Op7A2SG0sSm0sSsS2eXLJIubl5bZJXYQQ+x5pIRVCCIHX7+Wahw/m6nv+h+PEMOsbOsvCmojdQtuF1vGWHGPboFKaLjPayNCUMkwj3uyzojKTsogPTdNzQ1aM55d+y1F9+7VJfYTYZ0kLqRBCiK5MBS5EGe6GYBQgw+dwar8qfGbTb0kVc0hYXYmrOko2PiYPHIS7KET69DyyXlqPf3VVQ9A6e21v7p8+EisGwZgbpVv+xq2KyGpOQnRVEpAKIYQAQJk9UekvgmsE8a8HD/hP4S8n3cqvDj2cZI8LhebAFM11/m785aCJLPjl5Xx2zZWcWpZE778vI/XTrfhyawj3S2xoNS13JfHv2nFMvu4E3MEIdXbzJPluw2DKoCEdXWUhOhWFzLIXQgghUO7hqMy30DoKmChlYgA3jD+SG8Yf2eI1odoQj1/5TEOC/IrJOWiX2t6dD+A2yZ84gJ8t7N+0vJ6tNWcecGA71EgIsS+QFlIhhOiitBNER79BW5uaHVPKg1LNZ8y3ZPn8VZiNco6G+ieC2cLXiwIMo/4/TfldblaXl+7uowux/9IdtHUy0kIqhBBdkFP7H6j9FygX6BjaPRKV9ijKSNvje3n8HhoPC3XVxLAzfM1P3MmyoVo7uI3dC4CFEPsfaSEVQoguRofnQPARIAy6FohA7Dt05XU/6H4jJhyA17d9XGjyl8XQysSl1jjAyG7df9DnC7E/UVp3yNbZSEAqhBBdjA4+DTq0Q2kMoovRdtEe3890mdz93u9JSkvAl+AlaWEJRsjeo3uELYtrP3iPsrq6Pf58IcS+TwJSIYToapxWxmoqNzgVP+iWQ8cM5JUt/+HWF69l9PEH0fM/q1BhGxW169M/7bpFZtb6dfz09ZexnR+TiF+IfVhHjR/tfA2kMoZUCCG6HO9RUFcAxHY4oMA14Aff1uN1M3TsILasLyS5MIrn7m8IHpyJ7uanZEIWmK2MIdWaHp5a3jhxGpuCqXy7KY3Rfc9sdtqK4iKeW/otW2tqOLZ/f3524EgSPJ4f/LxCiM5DAlIhhOhiVMLl6PC74NQA0fpCPyTdhlI/LsB74LLHKdlUim05GEDS/EIcA4LJJnUj01uefQ94pheSPCnM2KwtWM4dOKEkDP+khuPvrF7JLR/PImrbOFqzaOtmnvvuW6afeyHJXu+PemYhxN4nXfZCCNHFKDMLlfEuJFwMrgPBezwq7SmMwFk/6r6xaIzFHy3Ftpp2uRsOZL6dh1kVbd5172iMmhjeuWX85oQh/PPmbIrygJq70fXnRiyL2z+ZTdiycOrLwpZFYW0N//t2yY96ZiE6m66aGF8CUiGE6IKUmYGRdCNG5jSMtMdRnrF7dL1T9zZO8dE4hQfglJyAE/oQ7Wi00/I3nRFxsNN9+NZUYdTGUJH4+FJ3YYjuz66laEpfvrrgMB7vfRynPTGF9z5TBCvjY11Xl5W2OAQ1YtvM2rBuj+suhOh8pMteCCHEHnHq3oDqPwH1a8/b+VD1O9yp/2D4EUNZ/vmqJoGpNiB4UHp8x1D0+dM32KkelKXRbsWm344EjxHPU6o1VVl+rsv7Cf0vf5Dzh4xgyCkHUReLbn8ArVERG+0xSZHuerG/6YStlx1BAlIhhBC7TWsNtQ/QEIw2CKNr/sENT/+Xa464jUhdlEhdJH6Ny6D8pGywHcKDkrEyvLiLwxi2ZvMVwxqCURWxSfq6BN+6aqwsH/ljs3jhXzPwPjCN5Cl9qDq6J4kLi8l4dxNm0MLxGKRd7EKfoVE7SbovhOj8JCAVQgixB2LglLV8yN5E9qCePL/+Uea+8jmv3jeNorwSiDr0/vsyHJeBk+ii4pgeJKypJvHbcsIDkkApjNoYOQ8sx6yNYUQdHFOR8mkh4f6JmKurSZ+Rj+M2yHw7DyMWH6Nqhm3W/W8hL2W/xQW3/bjxr0J0Fp1xfGdHkDGkQggh9oAbjPSWD5k5AASS/Ey57AQeW/Q3Dhw/NH6ozsZdHcO7JUS3N/MI9U9iw98Pa1jWPm3WZsyqKEY0HmwatsaIOvg21MZPMBTp7xc0BKPb2GGLV++bTmFuccMkKCHEvkcCUiGEELtNKQWJ1wH+HY74UEm/bVKSkJLA8AlDcXmarlFvRB0y38lHxZyGcaMJS8sx7OYBpWocgNoOkewARRcOouD6EZSe1gcr2U2oJsQlw67l/D6/ZtGs79qopkLsJV00Mb4EpEIIIfaIETgHkv8ARv3a82Y2pPwV5TsRAG2X4NT8A6fsbL569z2s6PZlRP+/vfuOk6q+9z/++pxp23dZWNrSBaQKKir2msSKJUaNxpgbS3LVaxJN0SSam9yfNyZeTYwmGjUxGmOsKagYY+8gqCiCgiDSOwvL1inn+/tjBtgyCyvuzszuvp+Px3kw53vOmfl+v3uW+ez3fIsDGgcVUr9XMXkfbU22kJrhwum/jnb0DPUdm84YxuYTBlE7sYzGoUVsPaI/K66eRKw8QqwxzsZVm/nvM25k2QcrO63sItI51IdUREQ+Na/gTCg4E+eaDyhyiTW4jaeBqwWilPcZwccUAxCtyGPNN8aQKA6B78Azej2xnJr9KwgcXYr/90a8aJPR+QAGzjMwo8+jSwHDHKz92ijqx5bhe8bmEwfR7/4lAMQaY/zjNzP41u2XZK4yRDpKjs4RmglqIRURkT3WcnS7q/k1uGq2rwB1xjfWE474OIPVl44lXh7BRQK4/CAuEmDLFwbR59GlbJ0ygqNOLicU8fHyDD/s4RcGqB1bAgZezCfQ4BNoSOA1Juj/x0UEtsXAM+pHl+74fD/hs2zh6kxWgYh0AAWkIiLScRpfA3Y+oh89qR6Ho2F4EX5+ELwWAWzAqDmogsvcMK599A5+/86NnPa/x9B41mD8sEfDXmXJfqatOArnJkf7e3U7P88PGsHxfTqjZCKZ0UP7kOqRvYiIdByvFPz1O3afe6wXngd+Yaj1sqEAAY9EQZD7X3iD/w0vJS8UojEQp/9LG9l2UD8s7mMJv9VlFnd49QmsMUHpC8kWUeeBnxek+PiRnVY8EekcaiEVEZGOU/AfNB2Bv3ppmMb6AHkfb4Ng668ca0xQsHAL6weG8YG6WIyQayRvRQ2JggDhtfU0Gdq0gwt51O9dQnBjA3mf1BAvCVF9UF82XT2ZKXuP6LzyiXQiQ2vZi4iIfGaW/0UoOBeIgBUzZr8YeYUQqI1T9sxKrHHn43VrTBDa2EBkRS1143rtSP/Rvm+AQe9/LqfonU3gu2ZPGP2wR+2EXsRLwsT65rPymkks+9n+bD1nJAOG9OW44XtlrsAi0iH0yF5ERDqMmWElP8AVXQyxRRx+QQX333IL65dtoPzfq8n7pJbqI/rjFwbpv6yRzdEGVl86DgLJVtCA+YxevwpjeKt5SZ1B3d6lVB/Sj7oJvSDhiKyuJV4UonBAKV8aN4ErDjqYUCCQLmsiXUMPXeBBAamIiHQ488ohMpVIBG6d+b/c998P89Ijb1BRH+ALAyfy5atPJ5wXZuof7sDV1u64LuQlmPlUcdrvZBfyqJ3cm7p9UitFeUbjkCKI+tTVNnDfG2/yyW9f47CxIzn4lCmM3n8v3n/1A+758YMsW7CCytED+Y//OYfJR0/IUC2ISHspIBURkU5V3KuIy275Opfd8vVWx66ceig/fel56uNxABoSIeoIJwdCtRzLZOBa9kM1g0iAOEAowPP7OT7+yd944Bd/JzqkGG/pVrx4MrrdunEhPz7l5/z4wSuZevL+HV9QEdlj6kMqIiJZc9b4iVx3xDH0KywEoDgcZv64fQiG0zSR+lA3vmzXb2hQM6EX9cVB1pw2mGU/3Z/V/zmWhsHJ92+si3L7lX/q4FKIdJyeOqhJLaQiIpJVZ0+YyNkTJuI7h5eac/QR/0/cc+0MAgEH5uH7Adaetxd+G0uMAuA7+v1hEQWLq/HzAxTOq6Lq85XUjyph9X+NY+CtC8hbUcvqxWvxfR/PU5uMSK5QQCoiIjnBazIB/pe++zWO/vIpvPnUXEKRIAefMoV1jXV85ca7WFcZSk6w32LCfIv6+CUhMKgfWUKiMEjBvM3EJ5cQJcjmkwYz8I4PKS4vUjAquSlHJ63PBAWkIiKSk/pU9ubEi47dsV/oCriASm5dsoT6kSWtpyd1yemhll89iXh5JDnvadQniOOwASt41Q0iUFHI2VedmtFyiMjuKSAVEZEuYcbdz/LEHc9Qslc+9aNKWh13nrHluEriFXk7W0/DHnEHi6vLGdNrE9t+sD9nfScZkL63bi03vfEqCzasZ1BJKd8+6BCOHDY8k0USacVaL0zWI+iZhYiIdAmP/N/jNNY1UjRvC8Wz1ifna4z7WEMCiyYoe2E1sX75rR7lA2xpjPD5wZ+wKc/n46rNzF27hnMee4hXli9jU309765by3/OmM70hR9koWQiohZSERHJSYlEgpcefoNn73+ZQNBj89qqHcf6PriUXv9axbYpffCCAQ4r78+z/QqSfUvTvRceFXl1BMxYX1vLLbPeoCE11dR2DfE417/yEqeMHoOlCWpFMkJ9SEVERHKDc46ffvH/eOe5eTTUNgLgBZo/1AttiVL+7Gryx/Zl8LWHUPTGW9S6WJoWUkfvSB3zNvelIR5nXEVfFmxcn/ZztzTUU93YSGleXmcUS0TaoIBURERyznsvLWgWjAL4iWTnukAwQCKewBnUTipnyVeH8/7sWalvtPQtm9dMfoPvzTqGsX0qmDFjJoEXVlBQGiI6oIB472Tw6dXHKdgQo25dNaVDFZBKduTiHKGZoIBURERyzpyn5zYLRrcLhgMMPHA4iz9ZQ0PfPDZ8ZWTax/SGT8AcZnBk/+X84M2j8aoh9puX+dkplUT374PzwHyHVxuj9KW19HphDcFwkIt+920mHT2BHz/4HQqK8zNRXJEeT4OaREQk5xT3LiIUCbVKD4aC1Hx5FCu/O5ENXx3VZp9Rh0fcBYj5AZ5dNYxev1tM5Y/nsGZ8CdGBBbi8AIQDuLwgBfOrKHthDRbzSdRGiTbEmPv8PG668HedXUyR5hzJwXqZ2NrBzI43s4VmttjMrk5z/GtmtsHM5qa2i5ocu8DMPkptF+zusxSQiohIzjnm3MPx0rV8eob1Lmj3uA8DKv6xjIIPtgJQc0AFLhRodk7ZC2vwYs3n2ok1xnnj8TnUVtftSfZFujwzCwC/BU4AxgFfNrNxaU59yDk3ObXdnc33EAcAACAASURBVLq2HPgJcBBwIPATM+u1q8/r1IB0d5F1k/O+aGbOzKZ0Zn5ERKRr6DOwnGsfvpKCkvwdW3F5Edc/8UO+MHoUecG2e5yFAwHG9OnD5P4DuPaIo+kzaxMAftDStqgGauOt0gAs6LF187aOKZBIO+XQWvYHAoudcx8756LAg0B7V5X4AvCMc26zc64KeAY4flcXdFof0iaR9eeAlcBsM5vunFvQ4rxi4FvArM7Ki4iIdD0HnbQ/j6z7A/Nf+5BAMMD4Q/YmEAwwIhrl/vfeZc22bTQkdgaTQc8jYB5nj5/AT448ZsfUTQ80xnHAuvNHUjBvMzX790mu4pRSP6qEorc37fiSjpeE2HD2COrGlHHk43/hoEGDueHYzzOopDSTxRfJtkpgRZP9lSRbPFv6opkdASwCvuOcW9HGtZW7+rDOHNS0I7IGMLPtkfWCFuf9D/AL4HudmBcREemCwpEQ+x4zsVlaYTjMP8/5Cn+d9y5PL/mI0rw8JvTtR/+iYqYOGszwsuZPBot7F7G+0FE/pozCdzYS3BolURTCRQLgHJtPHEzB/Cq8Bh88Y9W3xhMvi0DASDjHzJUrOOPhB3jpgovID7Xu1yrSoTI3yr6Pmc1psn+nc+7OT/kejwN/dc41mtk3gHuBY/YkM50ZkO42sjaz/YDBzrknzUwBqYiItEtROMzF+x/Axfsf0OY5Czdt5LdvzqQ6HiXWtxgc1Ezth7c1SnhVLY3Di8EMF/Qg4IH51I4vI1EYhMDOR/u+c9TFYjy1eBFnjB2fieKJZMJG59yuukquAgY32R+UStvBObepye7dwC+bXHtUi2tf3FVmsjaoycw84Gbgqnace4mZzTGzORs2bOj8zImISJf21ppVnPHQX5ix8EPclkbCa+p3TFHql4ZpHFGyYwL90Lo6Yr3DmINYRV4yQG2hLhbjiadm8sn8Fa2OiXRTs4FRZjbczMLAOcD0pieY2YAmu9OA7WvvPg183sx6pQYzfT6V1qbODEh3F1kXAxOAF83sE2AqMD3dwCbn3J3OuSnOuSkVFRWdmGUREekOfvrSC9TH4/gGLuIRWVlLZEUNFk3sPCk19U3DyFJWXz6eqqMHEF5Tj8XTPDN1jle3ruXiE3/C7759D66d0+aIfBpG7gxqcs7FgctJBpIfAA875+ab2c/MbFrqtCvMbL6ZvQtcAXwtde1mkl0yZ6e2n6XS2tSZAekuI2vn3FbnXB/n3DDn3DBgJjDNOTcn/duJiIi0z/z165IvzNhyeH/8kMeA3y+k5PV1WEMiGYxuX2LUM1w4QNWJgwmvqSW0uQFaTAOFGfFeEZZ+YzRP3vc8773UcjiESPfjnJvhnBvtnNvLOXd9Ku0659z01OtrnHPjnXOTnHNHO+c+bHLtH51zI1PbPbv7rE4LSNsZWYuIiHS4kkhkx+uqEwaz7aAKcI7yp1ZSNKeNrl++o37vMgbeuoDiNzdg9XGI++CnmpO8ZH/TTaOKePb+lzJQCulxMjUpfg628Hfq0qHOuRnAjBZp17Vx7lGdmRcREek5Lpi0H3e9PZv6eBwCxsYzh1MzbRgTg2UsZ2v6Je+dw2I+Xn2Cvo8spe8jS/FDHnXjylj3H6OTp4Q94mWRXPw+F+nStJa9iIh0O/914FQ21tXy2AfzCQUCxBIJzthvPD896ljmrV/HOY89RDSRaHaNC3rkf7ilWazqxXwK39vM0B/PIVEapuqYARSvb+SY7x+e2QJJj9HOSeu7HQWkIiLS7QQ8j/93zOf47iGHsaK6msElJZTl5QMwuf8AfnjYkfz81ZeIJxIkUv1Jez29imBdovWbOQjWxAnWxOn70FL22ncY+x4zIcMlEunetJa9iIh0W2V5+Uzs229HMLrdVyfty8tfu4jK6asIbGhIPq5P+PiB1s/ym7WYRn1WvLuChrrGTs659FguQ1uOUUAqIiI9UhFB8l5eRf8/L8aiPtWH9W82If52sd4R1p8zguVX78OaC0dTPTif3z/5YuYzLNKN6ZG9iIj0SHkFEQpKCoivqCGyspbGIYWsvmwcFQ8uIbyuHnyI9stj1Xcm4EIBCBixvvnU713KbUvmcvftizhiyFBOGj2G0eV9GFlejlm60VIi7ddT+5CqhVRERHokM+Mr136RvIIIA+74kJLX1hPrmwxA1587kkRRgM0nD8GFAztbTlNzlvqFIepiMf61ZDH/9dQTnPSXP3H8X+5lZfXWrJZJpKtSQCoiIj3W6VecxEU3nEekfzEW94l8UkPpi2voPX0ZwZoEDXuVgLf7Vs84sHjzJs7/+6NaxUn2nCM5720mthyjR/YiItJjmRl7nzOFFYHF1DdG8T2oH1nC1sP7M/C2Bbg0fUrb4oANdbW8u24tk/sP2O35IrKTWkhFRKRHu/b5Z6iNJYNRAEIeLhJI9h2NBD7VeznneHPVSuK+v/uTRdLpoaPs1UIqIiI9lu8c76xd0/qAZ8nlFeN+8vX2htLtg5ZSjz3Ln1hO6Rvr2bZfHzadOoT6PLh55mv88rWXKc8v4KzxE/nO1EMIeGr/EdkV/YaIiEiPZUAkkL5txov69LtnEV51jMJX17Y4aBD0qDpxMNH+BRS/uYGBty0A54gmEvjAxvo6fjdnFgf/4ffEEmkm3BdJw1xmtlyjgFRERHosM+OLY8cTCTR/NG8xn+I31lO4YAvBmhi1B/fb2TrahAt6VB/SFy/hCG9oIG/RVgrnbqL0hTXkLakG59hYX8ctM1/PVJFEuiQFpCIi0qP98PAjObByEHnBIMXhMJFAkP3KKhjwwjrC4RCVt86neGEyuGzFMxIFqRbWuM+APy6i4q9LKH9iOQN+/yEDfvsBxH3+8v67mS2USBejPqQiItKj5YdC3HvamSzZvImPq6oY2bs3w8t6senEU3n+gVeo3riNEUeN4cKFL7a61hoTFM3dnHztA43+zpaehCNvWQ1lL6ym7vihmSqOdHU9dNowBaQiIiLAXuW92au894793gN68aWrpgHwtw/mE1xoxHHJgMEMa0wQXlVL0dxNOA/wm697D+DFfEpmbqD0zAmZK4hIF6SAVEREZDeeXvJRMhiFHcFoyStrKf/XSgBqx5ZRsHArFk/TuuU7pg4anMHcSleWiwOOMkEBqYiIyG6URvIwdk7f6CIBth5XydZjBiYTPGPwz98ltK6+WSupHzRqpvTh/XXrOOJPd7OuZht7lffmmsOO4PAhwzJbCJEcpkFNIiIiu3HuxEnkBdO04Xi2Y2nRdV8diZ8XwA8lv1r9iEesbz5Vxw5k/srVrF+wmlg8wYcbN3DR9L/z9OJFmSyCdAWZmhQ/B1thFZCKiIjsxuT+A/jeIYcTCQQoCocpDIWpKCjkzpNP29EiGq0sZPl1+7Lp1CFUHTuA9eeNZOVVE3F5QcgLEh2QT8HcTeA7Yr7Pf854nIfnz8P10EEsIk1ZV/tFmDJlipszZ062syEiIj3Q1oYGZq9eSVE4wgEDKwl4HjNXruDCf/6N+kR854nbv1tbzl2a8MlbvI2GvUt3JA0sLuaW409i/wGVGSiBtMXM3nLOTclmHkpKBrkpB12ekc964dlrsl7eptRCKiIi0k6leXkcN2IkUwcN3rEc6NRBg3n/0it4+Myz+cKIkfQvLAIs7UT6eEbjkMJmSau3beOCfzzGupqaDJRAJDcpIBUREfmMzIwpAwdx+8mn8viXz289/1MTLi/QKi3u+zyyYF4n5lC6DD9DW45RQCoiItJBtjY0sKRqM1661lFItpqmORZNJFhRvbWTcyeSuzTtk4iIyGfknOMXr73Cve++TTgQSPYhdeyypbSlZz9ezIX//AsX7ncwhwwe0Wl5ldxmXWxsT0dRC6mIiMhn9MiC9/nze+/QmEiwLRrFp0lD6O4CDJech6eqoZEXlq3h4umPcNfMWzX6XnoUBaQiIiKf0V1vz6E+Hm+WtiOcbOvxPTQJVm3Hv/WJIDfPqaN668MdnEvJeZqHVERERNKp3rSNBTMXUbVuS5vnVDXU79mbt9GnNOj5vLv8b3v2niJdkPqQioiIpOH7Pr/91h/51x+eJxQJEWuMcchpB/K9ey4jHAk1O/fgQYN5avFH+C0es5eEw8R8v1Xr6e40JgKUhdbjO9f2ACnphtzuu3h0U2ohFRERSeOxm5/g6XteJNoQo3ZrHdGGGK//czZ3ff/Prc797sGHUxQKE0rNTWpAXjDIDw8/iorCJvOOOgf+7gOOhDMuef4oRv7mJsb9303c+sLL6lMq3ZoCUhERkTQe+/UTNNY1NkuL1kd56u7n8P3mEzkOLSvjqfMu4LyJkxlf0ZcTR43mL2ecxa9nvc6q6uqdJ7Zz5L3DWJ8oAjMawnDLW7O47bXXOqBUkuvMZWbLNXpkLyIikkZNVW3a9FhjjHg0Tjgv3Cx9QHEx1x159I79fy/5iJrGKImmLZue4SUcPj5e1MePBMBrEaE616pfqR/2uP2t2Vx6yCE7VogS6U50V4uIiKQx9uDRadMrRw9sFYyms7K6mqifaJXuB4zzJo7kN6edys3Hn0jvQASvIQHRBNaYgLhPZHkNeR9vg/jOltio86mJRve8QCI5TC2kIiIiaXzzpgv4zuHX0lgfxU/4eJ4Rygvzrd9d3K7rJ/TtR9DziCaaB6UFwSgHlt7PCaPuwbwS/nH6HSwK1BMvj5C3pJpAdQwv7uNSraTrzx9J3fheRPAojkQ6vJySY3poX2G1kIqIiKSx16Rh3P72L/n8BUcxYp+hHHn2ofzm9euZdNT4dl1/wMBKxvYuIOLtHGEf9uL0z6/lcwM/xtX/HYDVi9ZSuGALpa+uI7KmnmBtHK/RJ9CQINCQoN+fPiK4ro7L9jtAI+6l21ILqYiISBsqRw7gqrv/c5fnrFy0mrt+cD/vvjSf4rIizvj2iZx6+Ql4nsd9xxfz21mv8NgnI0g4j5MGLeZbE94iHIhC/AMAevUrZfPa5BynzgNrPl4K8x2fXxHh0iMO65QySg5xrX/+PYUCUhERkT20fsVGLj/oGuqq63HOUbuljj/88K+sWryWy39zIXl5o7hyn3e5cuIbLa7Mh+BYAM679kzu/N6fqSOBxRJYi2mhLOEYWVyWoRKJZIce2YuIiOyhR/5vOo11jc3mCG2sa+Spu59jy4atENoXAnsBTSfS98DysPwzADjlm5/ngp+eRf3UfmmXdPQjHsvy45w07RoOOfIKzp/6PWY+8VbnFkyyx7nMbDlGLaQiIiJ7aMEbi4jHWo+kD0VCrPhwNWWHl0L5vbhtP4f6x4E4hA/BSn6CecUAmBlfumoac/eJ8Ez9dIrf2ogXTT639cMe1Qf3Y/rAWuhbBtaLdZ6x6Pa/8GvnOPiUKZksrkinUUAqIiKyh4aMrWTx2x/jt3jMHmuM0W9oHwDMK8JKr4fS69t8n0Q8wUe3v8amU4dQP6aMktfXYXGf6gMrqDmwIjkvaXDnQ82NR/fnppse4lEFpN1P7jVeZoQCUhERkT101nen8cpjs5qt6BTOC7HfcfvQd0hFu99n5hNvUf/cUvIGDKNuTCm1k8qTB2IJSDgINh9d74LGkn5GfU09f/zRX3nuL6+QiPscdvqBXPzLr1BWUdoh5RPJFPUhFRER2UPDJw7lZ//4PgNG9CMYChCKhDjqnEP50YPf+VTv895L82nY1sCA339IxaNLyf9wCwXzNlP6ylosnm7YtREpyeO7x/yUJ+98lm2ba6irruO5v7zC5QdeQ7RBE+h3VeZcRrZcoxZSERGRz2C/4/bh3o9upWZLLZGCCOFIaPcXtdC7spxwXohoQ4zi2Rspnr0RgERhkOrDB7Q632I+x1QOY+5fnyPWGNuRnogn2LRmMzdddDv/8f++TP9hffe8YCIZpBZSERGRz8jMKO5VtEfBKMDnzj8SL9D6KzlQG6f335Zi0QQkfPAdXjTBfgW9+XjNBqLRWKtr4tEEzz/4KheMuYIb/vs+GuPxVudIDuuho+wVkIqIiGRRfSzG9LVL8W45ls3fHI/fv7DZ8dI3NjDopnmUPbea3m9u5L6zz+abJxzFR8F6XGBn39JmIYYPfjTBM//7BAfd8CveWbM6M4UR2UMKSEVERLKkIR7jjIcf4Jevvcy8ms1UjSlmzdWTCBY1X7M+vK6B3jNWcuiKEIcMHsq/liyialQRiaIQzgPfo81vdHt7HV+f/jeiidbTU0mOcYCfoS3HKCAVERHJksc+WMDyrVuob/JYvQGfDSdUEikINzs3UhDmwv89F4D8YAgv4LHqW+OpG1NGw4gSaGuZewcN8TgzV67orGKIfGYKSEVERLLk30s+ahaMbhc9ehCf/39nUDmyP5GCCHsfsBfXP/lDJh6eXG70zHETCAcCJErCrL1kDBu/NAxn6SPS2om9aIzFufv6h3nrmXc7tTzy2RiZGWGfi6PsFZCKiIhkSZ+CwrQNm845Djv7YP606FaeqLmf22bdwKQjx+84vk+//nz7oEOIBALkBYPE+hVQdfwg/JDhAuA8ww8Zm04eTLxPHhjMX7qS/z7jRv78s0cyV0CRdtK0TyIiIlly/j6TeWrxIhqatJIaUJaXz779W0/31NQl+x/AaWPG8uryZTy+8ENeOc6o3aecwvc2gxk1+5QTr8hLvalRP76chufW8Ncb/s7J3/gcvfqVdWLJRD4dtZCKiIhkyeT+A/jR4UeRFwxSHA5TEAoxqKSU+04/E2vjEXxTfQuLOGPseH530jQm9utHYGAxW46rZMuxA3cGoyleXTLoDYWDzHvlg04pj3SAHjrtk1pIRUREsui8iZM4de+xzF27hpJIhIl9+7UrGG0qPxTisbPO5eVlS7ny30+xpaGh2XFrTFD6ytrkjoPi8qKOyr5Ih1ALqYiISJYVhcMcNmQo+/Trv8tg1DU8g7/xZPx1++FvOhsXnb3jmGfGUcNG8LezzqWyuIT8QBCvIY7FfMqeW0XBwq0AhPJCTDh8TKeXSfZQD20hVUAqIiLSBfh1f8dtuQrii8DVQOwd3OYLcdE3m503rKwXL33tIu49/UwuKR/N6F/OZ+DrmzHPwKC+poHzh1/Guy/Oz1JJRFpTQCoiIpLjnHNQcyPQ0OJIA27bja3O98yYMrCS7190Oo8uvp1IXig56bqDaH2UTaur+NG0n/PYm+9w/Ssvcvfbc9hQV5uJosiu9OCJ8dWHVEREJNe5WvC3pD8W/2iXly54fSGxxngyqE3xg8bHF4/iR6+/QNRzRAIBfj3rdf447QwOrBzUkTkXaRe1kIqIiOQ6KwDLS3/M67/LSzetrsL3mzeJbT2sH/GIUfLYEipvnkfxAx8RW13NFf96Aj8H+xf2JJoYX0RERHKSmQeFFwH5LY7kY0VX7PLacQePxvd3BiANlQXUTCpn8M3zKXljPXnLaymZtZ5BN85j2wfr+HDduo4vgMhuKCAVERHpAqzwm1B0MVghEALrBSU/xPJP3OV1Q8ZUctjpBxIpCFM3uoRVV06gz/TleFEfSzWcmg9e1Kf80aXcfOHtzR7vS4bl0Ch7MzvezBaa2WIzuzrN8SvNbIGZvWdmz5nZ0CbHEmY2N7VN391nKSAVERHpAsw8vKLLsb6zsb5vYH3fwCs4u13Xfv/ey/HPHcu68/aCgEfesvQDmCLLa3knWsXXJ1/Jtqqajsy+dDFmFgB+C5wAjAO+bGbjWpz2DjDFObcP8CjwyybH6p1zk1PbtN19ngJSERGRLsQsiHklycf47bR8WzVLJxXhl0YA8CPpr3URjy3HD2bpsnWceORV/G72LPUpzagMtY6272d6ILDYOfexcy4KPAic2iy3zr3gnKtL7c4E9nhEnAJSERGRbm5zfR1Bb+dX/tbD+uGHmk/A74c8th7SD+I+jSOKiXxQxW3PvcSts97IdHYlN1QCK5rsr0ylteVC4Kkm+3lmNsfMZprZabv7MAWkIiIi3dzYPn2btXRWHT+I2knl+EEjkRfADxq148vYfNJgXMjDGn1cwIjXxfj97DeJJRJZzH0P4shkC2mfVMC4fbtkT7NtZl8BpgBNJ8Ud6pybApwL/NrM9trVe2geUhERkW6uIBTi+4cezi9efZmGRAICHuvP2YvAyUMIbWggVpFHoiz5OB/niKyswYU84uUREtEYm2pq6F9amt1CSEfbmAoY27IKGNxkf1AqrRkzOw74EXCkc65xe7pzblXq34/N7EVgX2BJWx+mFlIREZEe4IJJ+3HXtNM5ethwRpWXE9oWI1EWoWFU6c5gFKAxQax3hM1fqMSiCZxnrH5vZfYy3tPkzkpNs4FRZjbczMLAOUCz0fJmti/we2Cac259k/ReZhZJve4DHAos2NWHqYVURESkhzh08FAOHZycmefM2+7m7fgW8Jr3JSUcIFAdo/eTK+g9fTk1+/bmnZEb2C8L+ZXscc7Fzexy4GkgAPzROTffzH4GzHHOTSf5iL4IeMTMAJanRtSPBX5vZj7Jxs8bnHMKSEVERKS56848idMeeqD1AQcNo0opmbUBgKK5m3n+rue48JSjMptByTrn3AxgRou065q8Pq6N614HJn6az9IjexERkR6o0U+QH0rTLhUwtk2p2LHrxXw2/vsjog3RDOau59LSoSIiItJjhL0AnlnaYxbf2cmwsX8+a8/bi889cC/feOIfvLdubaayKD2IHtmLiIj0QBP79acwHKY2FmuWbo0JSt5IrmffMKSQ1ZeNw4U8ttVUs7KmmleXL+P3J5/GYUOGpntb+axysPUyE9RCKiIi0gN5Ztx1yumURCIUhkLkBYOEPY/Sd6soen8LABtPG4qLBHYMfHJAfTzOT196Pos5l+5ILaQiIiI91MS+/Zh54Td4funHVDU0cPCgwQSOqeW+2CN8OOsjlg4tTnvdx1WbqY1GKQiFsDYe+8secIDfM1tIFZCKiIj0YHnBECeO2ntnQq9yrn3oSgCm3n0H6+tqW13jgIl33EpFQQFXHXwYZ43/VAOqRVrRI3sRERFJ66L9ppAfbN52ZdEExa+uJfLJNjbU1fHj55/lnEcf5MVPljZbnlT2RIaWDc3Bn5MCUhEREUnr6/vuz7kT9sFiPl59HIv5FM3ZSMXfPmHg7R8Q2BYl7nzeXL2Ky596nMtnPK6gVPaIHtmLiIhIWp4Zx1aX8PoN77MtDMEtjQTqEwC4hKN41ga2HFcJQF0sxsvLP+HlZZ9w1LDh2cx219ZDA3q1kIqIiEibNq7ajNXFiayp2xGMAnhxR3BzY7Nz62Ixnlq8KNNZlG5ALaQiIiLSpjEHjoQ0A+n9sEfDXiXN0jyMglAoQznrptRCKiIiItLcyH2Hs99x+xApiOxIc0GPeK8INZPKm50bDgY4c+z4TGdRugG1kIqIiMguXffIVfzzt//iyTufJR6NcdTZhzLiKwfwXy/+C3A4IOH7fPfgwxjft1+2s9t1aR5SERERkfSCoSBf/PbJfPHbJwOwtmYbtdEob3z9El5dsZyGeIxDhwyloqAwyzmVrkoBqYiIiLTL2pptXDbjcRZsWE/A88gPhvjl577A8SNHUR+L8eiC91m8eTNj+lRwwshRRIIKMz4dB87PdiayQneKiIiI7JZzjvP//iifbKki4RwkEtTFYlw+43HunnY63/7XDGpjUaJrttHnxbXcurKOY46YzFevOYPBe1dmO/uS4xSQioiIyG7NXbuGtTXbksFoE43xOFfcfC/M3wRDCxn858VYzMd8eHH5K8x8bBa/eOY6xk0dnaWcS1egUfYiIiKyW+tqazFrPf+TD9TXNFD6/Cr6/2ER1pgMRpMHHQ21jdx6+d0ZzWuXpqVDRURERNKb1K8/0USiVbo1JshfuBVLgLm0U5ay5J1PSKS5VmQ7BaQiIiKyWwOKizlr3ATymw5UivkEamKUzNqwy2sjBWE8TyHHbm2f9ikTW45RH1IRERFpl58edSyT+w/gnrlv8+HilRTP3kDZ86vxojtHhjuat5KG88OcePFxaR/3i2ynP1dERESkXcyMM8aOZ/o5X6HPxgS9/r2KQF2LR/FBwwsHKCwtIJwX4uBT9ufCn5+XnQx3RT20D6laSEVERORTMTO+ffE0fr1gAwUvrQHPcAbmGRc/cCmfP2giKxaupnJkf/pU9s52dqULUEAqIiIin9rZE/Yh/7Zv8qvHn6X6nVVU9Cnle5eeybF7jwKgvH+vLOewi8rB1stMUEAqIiIie2Ta3mOZtvfYbGdDugEFpCIiIiI5ITf7d2aCBjWJiIiISFaphVREREQkFzjA93d7WnekFlIRERERySq1kIqIiEhOWjh7MX+94e+sWrSGcYfszTk/OI0BI/plO1udq4f2IVVAKiIiIh3G930e+9UTPParJ6ipqmXM1FF886YLGDl5+Kd6n1lPvsX/nHUz0YYozsGKhat48aHXuHXmzxkyprKTci/Zokf2IiIi0mHuuPJe7v3Jw2xaXUVjfZR3X5jPd464jpWLVrf7PZxz3HLpXTTWR3c0GCbiPvXbGrj76vs7Kec5ooeu1KSAVERERDrEtqoanrzzGRrrGpulR+ujPHjD39v9PtWbtlG1bmurdOcc81754DPnU3JPpwakZna8mS00s8VmdnWa4980s3lmNtfMXjWzcZ2ZHxEREek8qz5aQygSapXuJ3wWzl7S7vfJL8rDzNIeK+1dvMf5k9zVaQGpmQWA3wInAOOAL6cJOB9wzk10zk0Gfgnc3Fn5ERERkc7Vb1hfog2xVunmGcMmDG7zOt/3eef5ecy461k+fPMjQpEQx5x7GOG85sFtpCDCl743rcPznTsc+BnackxnDmo6EFjsnPsYwMweBE4FFmw/wTlX3eT8QpIzcImIiEgX1KtvKUecOZVX/zaLxvrojvRwXpizf3Ba2muq1m/lyiOvY9Oqzfi+j5mx9wEjue7Rq6irrmfmk28RCgeJR+OcfsUJnHjRcZkqjmRQZwaklcCKJvsrgYNanmRmlwFX8p942QAACpNJREFUAmHgmE7Mj4iIiHSyq/7wn5RWlPDknc8Sa4hSOXog/3XbhW2Osr/5ottZs2QdiXhiR9oHMxfx8C//yXWPXMXmtVVsWLGJQaMHUFhamKliZIcD53rmxPjmOmmklZmdCRzvnLsotX8+cJBz7vI2zj8X+IJz7oI0xy4BLgEYMmTI/suWLeuUPIuIiEjH8H2feDROOC/c5jnRhijTSr9KIpZodaysbymPrL27M7PYjJm95ZybkrEPTKM0WOEOLjs9I5/19Ka7sl7epjpzUNMqoGmHkUGptLY8CKRtz3fO3emcm+Kcm1JRUdGBWRQREZHO4HneLoNRgETCb3MKong03hnZyn09tA9pZwaks4FRZjbczMLAOcD0pieY2agmuycBH3VifkRERCSH5BfmMXLfEbQcUB8IBjh4Ws403kkGdFpA6pyLA5cDTwMfAA875+ab2c/MbPsQucvNbL6ZzSXZj7TV43oRERHpvr77x0spKCkgkp9sTc0rjNCrfxkX3XBelnOWJT10YvxOXTrUOTcDmNEi7bomr7/VmZ8vIiIiuW3Y+MHct/g2nv7TC6xYuJoxB4zk6HMPI78wL9tZkwzSWvYiIiKSVSW9i/nSVd15ftF2cg78njnKXkuHioiIiEhWqYVUREREJFfkYP/OTFALqYiIiIhklVpIRURERHKEUx9SEREREZHMUwupiIiISE7IzTlCM0EtpCIiIiKSVQpIRURERCSr9MheREREJBc4wNcjexERERGRjFMLqYiIiEiucJr2SUREREQk49RCKiIiIpIDHODUh1REREREJPPUQioiIiKSC5xTH1IRERERkWxQQCoiIiKSI5zvMrK1h5kdb2YLzWyxmV2d5njEzB5KHZ9lZsOaHLsmlb7QzL6wu89SQCoiIiIizZhZAPgtcAIwDviymY1rcdqFQJVzbiTwK+AXqWvHAecA44Hjgd+l3q9NCkhFREREcoXzM7Pt3oHAYufcx865KPAgcGqLc04F7k29fhQ41swslf6gc67RObcUWJx6vzYpIBURERGRliqBFU32V6bS0p7jnIsDW4He7by2mS43yv6tt97aaGbLsp2PDtYH2JjtTGSZ6kB10NPLD6oDUB309PJD9upgaBY+s5ltVD39rHu0T4Y+Ls/M5jTZv9M5d2eGPruVLheQOucqsp2HjmZmc5xzU7Kdj2xSHagOenr5QXUAqoOeXn7o2XXgnDs+23loYhUwuMn+oFRaunNWmlkQKAU2tfPaZvTIXkRERERamg2MMrPhZhYmOUhpeotzpgMXpF6fCTzvnHOp9HNSo/CHA6OAN3f1YV2uhVREREREOpdzLm5mlwNPAwHgj865+Wb2M2COc2468Afgz2a2GNhMMmgldd7DwAIgDlzmnEvs6vMUkOaGrPXZyCGqA9VBTy8/qA5AddDTyw+qg5zhnJsBzGiRdl2T1w3Al9q49nrg+vZ+liVbVkVEREREskN9SEVEREQkqxSQZoiZlZvZM2b2UerfXm2cN8TM/m1mH5jZgu3LcJnZn8xsqZnNTW2TM5n/jtABdTA8tTTZ4tRSZeFM5v+z+hTlTzT5OU9vkt6T7oG26qBL3wPQ/jpInVtiZivN7LYmaS+mluLbXj99M5PzjtEB5d/fzOal7oHfpCbh7lLaUwdmNtTM3k79jOeb2TebHOvS9wB0SB10+ftAmlNAmjlXA88550YBz6X207kPuNE5N5bkqgbrmxz7nnNucmqb27nZ7RSftQ5+AfwqtURZFckly7qS9pa/vsnPeVqLYz3lHmirDrr6PQDtrwOA/wFeTpN+XpP6WZ/meC77rOW/HbiY5KjdUSSXJexq2lMHa4CDnXOTgYOAq81sYJPjXfkegM9eB93hPpAmFJBmTtPlte4FTmt5giXXfg06554BcM7VOOfqMpfFTrfHdZD66/cYkkuTtXl9jttt+XuAPa6DbnIPQDvrwMz2B/oB/85QvjJlj8tvZgOAEufczNTUMve1dX2O220dOOeizrnG1G6E7vd9vcd10I3uA2miu93guayfc25N6vVakv/RtjQa2GJmfzOzd8zsRjMLNDl+vZm9Z2a/MrNIp+e4432WOugNbEktTQbtWIYsB7Wn/JBaPcPMZppZy/9ke8I9AOnroDvcA9COOjAzD7gJ+G4b73FP6jHmtV3wUeVnKX8lyZ/7dt32HgAws8Fm9h7JJRh/4Zxb3eRwV74H4LPVQXe5D6QJTfvUgczsWaB/mkM/arrjnHNmlm56gyBwOLAvsBx4CPgayXm+riH5SxsmOSXGD4CfdVTeO0on1sE/OzannaMDyg8w1Dm3ysxGAM+b2Tzn3BJ6zj0AaeqA5BrJXUIH1MGlwAzn3Mo0scZ5qbopBh4DzifZQpQzOrn8XUJH/B4451YA+6QeU//DzB51zq2jC9wD0Hl10PE5lVyggLQDOeeOa+uYma0zswHOuTWpxw3p+vysBOY65z5OXfMPYCrwhyZ/STaa2T203XKSVZ1YB38EyswsmGoh2+0yZNnQAeXHObcq9e/HZvYiyeB8SQ+6B9qqg8foAvcAdEgdHAwcbmaXAkVA2MxqnHNXN6mbbWb2AMl+1jkVjHRW+YFbSP7ct+vO90DT91ptZu+T/GP90a5wD0Cn1sFrdJH7QNpPj+wzp+nyWheQvsVvNskv3IrU/jEkVznY3mdmez+604D3OzW3nWOP6yDVT+gFkkuT7er6XLbb8ptZr+2P4s2sD3AoPeweaKsOusk9AO2oA+fcec65Ic65YST/8LjPOXe1mQVTdYKZhYCT6Xr3wR6XP/VHWbWZTU39Hnw13fVdQHt+DwaZWX7qdS/gMGBhN7kH4DPUQTe6D6Qp55y2DGwk+789B3wEPAuUp9KnAHc3Oe9zwHvAPOBPQDiV/nwq7X3gfqAo22XKQh2MILkW7mLgESCS7TJ1dPmBQ1Llfjf174VNru8R98Bu6qBL3wPtrYMW538NuC31uhB4K/X7MZ9ki2Eg22XKVPmbnPc+sAS4jdQCL11pa+fvwfb/B99N/XtJd7kHPmsddJf7QFvzTSs1iYiIiEhW6ZG9iIiIiGSVAlIRERERySoFpCIiIiKSVQpIRURERCSrFJCKiIiISFYpIBURERGRrFJAKiLdhpklUut7D0zt729m88xssZn9Zvua32Z2o5mtNbOcXO1KRKSnUUAqIt1JvXNusnNudWr/duBiYFRqOx7AOfc94I7sZFFERFpSQCoiXZKZfTPVGjrXzJaa2Qstjg8ASpxzM11yBZD7SC65KiIiOUYBqYh0Sc65O5xzk4EDgJXAzS1OqUylb7cylSYiIjlGAamIdHW3AM875x7PdkZERGTPBLOdARGRPWVmXwOGApenObwKGNRkf1AqTUREcoxaSEWkSzKz/YHvAl9xzvktjzvn1gDVZjY1Nbr+q8A/M5xNERFpB7WQikhXdTlQDryQms1pTppzLgX+BOQDT6U2ERHJMQpIRaRLcs79R8s0MzunxTlzgAkZy5SIiOwRPbIXke6kuunE+G0xsxuBrwC1mcmWiIjsiiWn5xMRERERyQ61kIqIiIhIVikgFREREZGsUkAqIiIiIlmlgFREREREskoBqYiIiIhk1f8HlGZ3JQwiekAAAAAASUVORK5CYII=\n",
            "text/plain": [
              "<Figure size 864x720 with 2 Axes>"
            ]
          },
          "metadata": {
            "tags": [],
            "needs_background": "light"
          }
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "-tP6HOCi00Xi",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 52
        },
        "outputId": "25914aad-57a8-4f1a-bb3b-99df99308915"
      },
      "source": [
        "print(x_train.shape)\n",
        "print(x_test.shape)"
      ],
      "execution_count": 13,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "(2661, 784)\n",
            "(766, 784)\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "JaZdvVfSvME4",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 52
        },
        "outputId": "5875854c-663c-4614-987c-6148e83b3500"
      },
      "source": [
        "z_mean_train, _, _ = encoder.predict(x_train, batch_size=batch_size)\n",
        "z_mean_train = np.asarray(z_mean_train)\n",
        "\n",
        "print(z_mean_train.shape)\n",
        "\n",
        "z_mean_val, _, _ = encoder.predict(x_test, batch_size=batch_size)\n",
        "z_mean_val = np.asarray(z_mean_val)\n",
        "\n",
        "print(z_mean_val.shape)"
      ],
      "execution_count": 14,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "(2661, 20)\n",
            "(766, 20)\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "C6x8-tbCBZMH",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "import pickle\n",
        "\n",
        "pickle.dump( z_mean_train, open( \"/content/drive/My Drive/Machine-Learning-Projects/cs231n-project/notebooks/VAE/z_mean_train_5.pkl\", \"wb\" ) )\n",
        "pickle.dump( z_mean_val, open( \"/content/drive/My Drive/Machine-Learning-Projects/cs231n-project/notebooks/VAE/z_mean_val_5.pkl\", \"wb\" ) )"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "L1xEPqEpuH6I",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "# Leila's experimentation below\n",
        "\n",
        "inputs = tf.keras.Input(shape=z_mean_val.shape[1:])\n",
        "\n",
        "x = tf.keras.layers.Dense(100, activation='selu', kernel_regularizer=tf.keras.regularizers.l2())(inputs)\n",
        "#x = tf.keras.layers.BatchNormalization()(x)\n",
        "#x = tf.keras.layers.Dense(50, activation='selu', kernel_regularizer=tf.keras.regularizers.l2())(x)\n",
        "#x = tf.keras.layers.BatchNormalization()(x)\n",
        "x = tf.keras.layers.Dense(32, activation = 'selu', kernel_regularizer=tf.keras.regularizers.l2())(x)\n",
        "\n",
        "# inputs = tf.keras.layers.Input(shape=(28, 28, 1))\n",
        "# x = tf.keras.layers.Conv2D(\n",
        "#     filters=32, kernel_size=3, strides=(2, 2), activation='relu')(inputs)\n",
        "# x = tf.keras.layers.Conv2D(\n",
        "#     filters=64, kernel_size=3, strides=(2, 2), activation='relu')(x)\n",
        "# x = tf.keras.layers.Flatten()(x)\n",
        "# x = tf.keras.layers.Dense(100)(x)\n",
        "outputs = tf.keras.layers.Dense(3, activation = 'softmax')(x)\n",
        "\n",
        "model = tf.keras.Model(inputs=[inputs] , outputs=[outputs])\n",
        "lr_schedule = tf.keras.optimizers.schedules.ExponentialDecay(\n",
        "      initial_learning_rate= 1e-2, #This LR came from the hyperparameter tuning using the HyperAS (modified HyperOpt for Keras) -- randomized search\n",
        "      decay_steps=10000,\n",
        "      decay_rate=0.9)\n",
        "opt = tf.keras.optimizers.Adam(learning_rate=0.001)\n",
        "\n",
        "model.compile(loss='sparse_categorical_crossentropy', optimizer=opt, metrics=['accuracy'])"
      ],
      "execution_count": 15,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "hSHEliTf-DcT",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 540
        },
        "outputId": "8dc31d2a-026b-4752-accb-af5afaca51fe"
      },
      "source": [
        "!pip install keras-tuner"
      ],
      "execution_count": 16,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Collecting keras-tuner\n",
            "\u001b[?25l  Downloading https://files.pythonhosted.org/packages/a7/f7/4b41b6832abf4c9bef71a664dc563adb25afc5812831667c6db572b1a261/keras-tuner-1.0.1.tar.gz (54kB)\n",
            "\r\u001b[K     |██████                          | 10kB 24.2MB/s eta 0:00:01\r\u001b[K     |████████████                    | 20kB 6.1MB/s eta 0:00:01\r\u001b[K     |██████████████████              | 30kB 7.5MB/s eta 0:00:01\r\u001b[K     |████████████████████████        | 40kB 8.3MB/s eta 0:00:01\r\u001b[K     |██████████████████████████████  | 51kB 7.1MB/s eta 0:00:01\r\u001b[K     |████████████████████████████████| 61kB 4.0MB/s \n",
            "\u001b[?25hRequirement already satisfied: future in /usr/local/lib/python3.6/dist-packages (from keras-tuner) (0.16.0)\n",
            "Requirement already satisfied: numpy in /usr/local/lib/python3.6/dist-packages (from keras-tuner) (1.18.5)\n",
            "Requirement already satisfied: tabulate in /usr/local/lib/python3.6/dist-packages (from keras-tuner) (0.8.7)\n",
            "Collecting terminaltables\n",
            "  Downloading https://files.pythonhosted.org/packages/9b/c4/4a21174f32f8a7e1104798c445dacdc1d4df86f2f26722767034e4de4bff/terminaltables-3.1.0.tar.gz\n",
            "Collecting colorama\n",
            "  Downloading https://files.pythonhosted.org/packages/c9/dc/45cdef1b4d119eb96316b3117e6d5708a08029992b2fee2c143c7a0a5cc5/colorama-0.4.3-py2.py3-none-any.whl\n",
            "Requirement already satisfied: tqdm in /usr/local/lib/python3.6/dist-packages (from keras-tuner) (4.41.1)\n",
            "Requirement already satisfied: requests in /usr/local/lib/python3.6/dist-packages (from keras-tuner) (2.23.0)\n",
            "Requirement already satisfied: scipy in /usr/local/lib/python3.6/dist-packages (from keras-tuner) (1.4.1)\n",
            "Requirement already satisfied: scikit-learn in /usr/local/lib/python3.6/dist-packages (from keras-tuner) (0.22.2.post1)\n",
            "Requirement already satisfied: chardet<4,>=3.0.2 in /usr/local/lib/python3.6/dist-packages (from requests->keras-tuner) (3.0.4)\n",
            "Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.6/dist-packages (from requests->keras-tuner) (2020.6.20)\n",
            "Requirement already satisfied: idna<3,>=2.5 in /usr/local/lib/python3.6/dist-packages (from requests->keras-tuner) (2.9)\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->keras-tuner) (1.24.3)\n",
            "Requirement already satisfied: joblib>=0.11 in /usr/local/lib/python3.6/dist-packages (from scikit-learn->keras-tuner) (0.15.1)\n",
            "Building wheels for collected packages: keras-tuner, terminaltables\n",
            "  Building wheel for keras-tuner (setup.py) ... \u001b[?25l\u001b[?25hdone\n",
            "  Created wheel for keras-tuner: filename=keras_tuner-1.0.1-cp36-none-any.whl size=73200 sha256=5a5a0f598e699bf80a0017b045ba16fe9a5bdfc1db472d58401bf5e78a54e7b0\n",
            "  Stored in directory: /root/.cache/pip/wheels/b9/cc/62/52716b70dd90f3db12519233c3a93a5360bc672da1a10ded43\n",
            "  Building wheel for terminaltables (setup.py) ... \u001b[?25l\u001b[?25hdone\n",
            "  Created wheel for terminaltables: filename=terminaltables-3.1.0-cp36-none-any.whl size=15356 sha256=5fa2c7891b518c7fcde3836d315ef84e6365bcb8117f79e46cab76a64b9ec25f\n",
            "  Stored in directory: /root/.cache/pip/wheels/30/6b/50/6c75775b681fb36cdfac7f19799888ef9d8813aff9e379663e\n",
            "Successfully built keras-tuner terminaltables\n",
            "Installing collected packages: terminaltables, colorama, keras-tuner\n",
            "Successfully installed colorama-0.4.3 keras-tuner-1.0.1 terminaltables-3.1.0\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "iuBU0SH39v0j",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "# Credit goes to Tom for help with this version! \n",
        "\n",
        "MODEL_NAME = \"ensemble-vae-with-capt-laugh-v1\"\n",
        "\n",
        "from pathlib import Path\n",
        "import tensorflow as tf\n",
        "import matplotlib.pyplot as plt\n",
        "\n",
        "def build_model(hp):\n",
        "    Path(f\"drive/My Drive/Machine-Learning-Projects/cs231n-project/models/{MODEL_NAME}\").mkdir(parents=True, exist_ok=True)\n",
        "    checkpoint_path = \"drive/My Drive/Machine-Learning-Projects/cs231n-project/models/\" + MODEL_NAME + \"/cp-{epoch:04d}.h5\"\n",
        "\n",
        "    cp_callback = tf.keras.callbacks.ModelCheckpoint(\n",
        "        filepath=checkpoint_path, \n",
        "        verbose=1,\n",
        "        save_weights_only=False,\n",
        "        save_best_only=True,\n",
        "        period=1\n",
        "    )\n",
        "\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(3, activation='softmax', kernel_regularizer=tf.keras.regularizers.l2())(x)\n",
        "        x = tf.keras.layers.Dense(50, activation='selu', kernel_regularizer=tf.keras.regularizers.l2())(inputs)\n",
        "        model = tf.keras.Model(inputs=inputs, outputs=x)\n",
        "        model.compile(optimizer=tf.keras.optimizers.Adam(\n",
        "            hp.Choice('learning_rate',\n",
        "                      values=[1e-2, 1e-3, 1e-4])),\n",
        "                      loss = 'sparse_categorical_crossentropy',\n",
        "                      metrics=['accuracy'])\n",
        "        return model\n",
        "\n",
        "    inputs = tf.keras.Input(shape=(z_mean_train.shape[1]))\n",
        "    model = create_model(inputs)\n",
        "    # model.summary()\n",
        "    return model\n"
      ],
      "execution_count": 17,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "PKz9-WgO95Bk",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 1000
        },
        "outputId": "3198f19a-708e-40e2-b09a-e974d52ca497"
      },
      "source": [
        "from kerastuner.tuners import RandomSearch\n",
        "tuner = RandomSearch(\n",
        "    build_model,\n",
        "    objective='val_accuracy',\n",
        "    max_trials=5,\n",
        "    executions_per_trial=3,\n",
        "    directory='fc-prediction',\n",
        "    project_name='fc-prediction'\n",
        ")\n",
        "tuner.search_space_summary()\n",
        "\n",
        "tuner.search(z_mean_train, y_train_np,\n",
        "             epochs=30,\n",
        "             validation_data=(z_mean_val, y_valid_np),\n",
        "             verbose=0)\n"
      ],
      "execution_count": 18,
      "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"
          ],
          "name": "stdout"
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:#4527A0\"><h1 style=\"font-size:18px\">Search space summary</h1></span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Default search space size: 2</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:#7E57C2\"><h2 style=\"font-size:16px\">units (Int)</h2></span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-default: None</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:blue\"> |-max_value: 128</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-min_value: 8</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:blue\"> |-sampling: None</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-step: 8</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:#7E57C2\"><h2 style=\"font-size:16px\">learning_rate (Choice)</h2></span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-default: 0.01</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:blue\"> |-ordered: True</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-values: [0.01, 0.001, 0.0001]</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "stream",
          "text": [
            "WARNING:tensorflow:`period` argument is deprecated. Please use `save_freq` to specify the frequency in number of batches seen.\n",
            "WARNING:tensorflow:`period` argument is deprecated. Please use `save_freq` to specify the frequency in number of batches seen.\n",
            "WARNING:tensorflow:`period` argument is deprecated. Please use `save_freq` to specify the frequency in number of batches seen.\n"
          ],
          "name": "stdout"
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:#4527A0\"><h1 style=\"font-size:18px\">Trial complete</h1></span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:#4527A0\"><h1 style=\"font-size:18px\">Trial summary</h1></span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Trial ID: 013da3e7c9370127e9b905ea730ee922</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Score: 0.3698868602514267</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Best step: 0</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:#7E57C2\"><h2 style=\"font-size:16px\">Hyperparameters:</h2></span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-learning_rate: 0.001</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:blue\"> |-units: 32</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "stream",
          "text": [
            "WARNING:tensorflow:`period` argument is deprecated. Please use `save_freq` to specify the frequency in number of batches seen.\n",
            "WARNING:tensorflow:`period` argument is deprecated. Please use `save_freq` to specify the frequency in number of batches seen.\n",
            "WARNING:tensorflow:`period` argument is deprecated. Please use `save_freq` to specify the frequency in number of batches seen.\n"
          ],
          "name": "stdout"
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:#4527A0\"><h1 style=\"font-size:18px\">Trial complete</h1></span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:#4527A0\"><h1 style=\"font-size:18px\">Trial summary</h1></span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Trial ID: 31b7cb149d4382cdad67c8f3ae3835fb</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Score: 0.4094865123430888</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Best step: 0</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:#7E57C2\"><h2 style=\"font-size:16px\">Hyperparameters:</h2></span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-learning_rate: 0.001</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:blue\"> |-units: 56</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "stream",
          "text": [
            "WARNING:tensorflow:`period` argument is deprecated. Please use `save_freq` to specify the frequency in number of batches seen.\n",
            "WARNING:tensorflow:`period` argument is deprecated. Please use `save_freq` to specify the frequency in number of batches seen.\n",
            "WARNING:tensorflow:`period` argument is deprecated. Please use `save_freq` to specify the frequency in number of batches seen.\n"
          ],
          "name": "stdout"
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:#4527A0\"><h1 style=\"font-size:18px\">Trial complete</h1></span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:#4527A0\"><h1 style=\"font-size:18px\">Trial summary</h1></span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Trial ID: 0f453a8f767efe3d6812f31f58fb1b1d</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Score: 0.21148825188477835</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Best step: 0</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:#7E57C2\"><h2 style=\"font-size:16px\">Hyperparameters:</h2></span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-learning_rate: 0.01</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:blue\"> |-units: 16</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "stream",
          "text": [
            "WARNING:tensorflow:`period` argument is deprecated. Please use `save_freq` to specify the frequency in number of batches seen.\n",
            "WARNING:tensorflow:`period` argument is deprecated. Please use `save_freq` to specify the frequency in number of batches seen.\n",
            "WARNING:tensorflow:`period` argument is deprecated. Please use `save_freq` to specify the frequency in number of batches seen.\n"
          ],
          "name": "stdout"
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:#4527A0\"><h1 style=\"font-size:18px\">Trial complete</h1></span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:#4527A0\"><h1 style=\"font-size:18px\">Trial summary</h1></span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Trial ID: 69c97d56b257cd2109a0886840511e82</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Score: 0.41035682956377667</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Best step: 0</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:#7E57C2\"><h2 style=\"font-size:16px\">Hyperparameters:</h2></span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-learning_rate: 0.001</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:blue\"> |-units: 120</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "stream",
          "text": [
            "WARNING:tensorflow:`period` argument is deprecated. Please use `save_freq` to specify the frequency in number of batches seen.\n",
            "WARNING:tensorflow:`period` argument is deprecated. Please use `save_freq` to specify the frequency in number of batches seen.\n",
            "WARNING:tensorflow:`period` argument is deprecated. Please use `save_freq` to specify the frequency in number of batches seen.\n"
          ],
          "name": "stdout"
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:#4527A0\"><h1 style=\"font-size:18px\">Trial complete</h1></span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:#4527A0\"><h1 style=\"font-size:18px\">Trial summary</h1></span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Trial ID: cc1e11bfa9566a91b33c9b63b4893cb9</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Score: 0.36205396552880603</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Best step: 0</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:#7E57C2\"><h2 style=\"font-size:16px\">Hyperparameters:</h2></span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-learning_rate: 0.0001</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:blue\"> |-units: 112</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "stream",
          "text": [
            "INFO:tensorflow:Oracle triggered exit\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "5MNEwtsQ_N88",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 931
        },
        "outputId": "c9078493-6fe6-4cf5-8208-1fdb5183115f"
      },
      "source": [
        "print(tuner.results_summary())"
      ],
      "execution_count": 19,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:#4527A0\"><h1 style=\"font-size:18px\">Results summary</h1></span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Results in fc-prediction/fc-prediction</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Showing 10 best trials</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Objective(name='val_accuracy', direction='max')</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:#4527A0\"><h1 style=\"font-size:18px\">Trial summary</h1></span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Trial ID: 69c97d56b257cd2109a0886840511e82</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Score: 0.41035682956377667</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Best step: 0</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:#7E57C2\"><h2 style=\"font-size:16px\">Hyperparameters:</h2></span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-learning_rate: 0.001</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:blue\"> |-units: 120</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:#4527A0\"><h1 style=\"font-size:18px\">Trial summary</h1></span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Trial ID: 31b7cb149d4382cdad67c8f3ae3835fb</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Score: 0.4094865123430888</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Best step: 0</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:#7E57C2\"><h2 style=\"font-size:16px\">Hyperparameters:</h2></span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-learning_rate: 0.001</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:blue\"> |-units: 56</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:#4527A0\"><h1 style=\"font-size:18px\">Trial summary</h1></span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Trial ID: 013da3e7c9370127e9b905ea730ee922</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Score: 0.3698868602514267</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Best step: 0</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:#7E57C2\"><h2 style=\"font-size:16px\">Hyperparameters:</h2></span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-learning_rate: 0.001</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:blue\"> |-units: 32</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:#4527A0\"><h1 style=\"font-size:18px\">Trial summary</h1></span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Trial ID: cc1e11bfa9566a91b33c9b63b4893cb9</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Score: 0.36205396552880603</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Best step: 0</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:#7E57C2\"><h2 style=\"font-size:16px\">Hyperparameters:</h2></span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-learning_rate: 0.0001</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:blue\"> |-units: 112</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:#4527A0\"><h1 style=\"font-size:18px\">Trial summary</h1></span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Trial ID: 0f453a8f767efe3d6812f31f58fb1b1d</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Score: 0.21148825188477835</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Best step: 0</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:#7E57C2\"><h2 style=\"font-size:16px\">Hyperparameters:</h2></span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-learning_rate: 0.01</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:blue\"> |-units: 16</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "stream",
          "text": [
            "None\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "uxLxfBp90AHk",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 1000
        },
        "outputId": "47278acf-7599-44ae-bcc0-1cb8d9d97575"
      },
      "source": [
        "from tensorflow.keras.callbacks import EarlyStopping\n",
        "from tensorflow.keras.callbacks import ModelCheckpoint\n",
        "initial_epochs = 200\n",
        "\n",
        "def create_final_model(inputs):\n",
        "        x = tf.keras.layers.Dense(104, activation='relu', kernel_regularizer=tf.keras.regularizers.l2())(inputs)\n",
        "        x = tf.keras.layers.Dense(3, activation='softmax', kernel_regularizer=tf.keras.regularizers.l2())(x)\n",
        "\n",
        "        model = tf.keras.Model(inputs=inputs, outputs=x)\n",
        "        model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=0.001)\n",
        "                      ,loss='sparse_categorical_crossentropy',\n",
        "                      metrics=['accuracy'])\n",
        "        return model\n",
        "\n",
        "inputs = tf.keras.Input(shape=(z_mean_train.shape[1]))\n",
        "\n",
        "#save_path = \"/content/drive/My Drive/Machine-Learning-Projects/cs231n-project/models/leila-all_samples_self_dense_vae_keras_classifier-v10-z-val-split-with-face.h5\"\n",
        "save_path = \"/content/drive/My Drive/Machine-Learning-Projects/cs231n-project/models/all_samples_dense_vae_classifier-caption-laugh-v4-la.h5\"\n",
        "es = EarlyStopping(monitor='val_loss', mode='min', verbose=1, patience=300)\n",
        "mc = ModelCheckpoint(save_path, monitor='val_accuracy', mode='max', verbose=1, save_best_only=True)\n",
        "\n",
        "model = create_final_model(inputs)\n",
        "history = model.fit(\n",
        "          x=z_mean_train, y=y_train_np,\n",
        "          epochs=initial_epochs, callbacks=[es, mc],\n",
        "          validation_data=(z_mean_val, y_valid_np), batch_size=32)"
      ],
      "execution_count": 20,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Epoch 1/200\n",
            "73/84 [=========================>....] - ETA: 0s - loss: 1.3856 - accuracy: 0.3472\n",
            "Epoch 00001: val_accuracy improved from -inf to 0.24021, saving model to /content/drive/My Drive/Machine-Learning-Projects/cs231n-project/models/all_samples_dense_vae_classifier-caption-laugh-v4-la.h5\n",
            "84/84 [==============================] - 0s 4ms/step - loss: 1.3749 - accuracy: 0.3450 - val_loss: 1.3065 - val_accuracy: 0.2402\n",
            "Epoch 2/200\n",
            "84/84 [==============================] - ETA: 0s - loss: 1.2392 - accuracy: 0.3769\n",
            "Epoch 00002: val_accuracy improved from 0.24021 to 0.26371, saving model to /content/drive/My Drive/Machine-Learning-Projects/cs231n-project/models/all_samples_dense_vae_classifier-caption-laugh-v4-la.h5\n",
            "84/84 [==============================] - 0s 4ms/step - loss: 1.2392 - accuracy: 0.3769 - val_loss: 1.2284 - val_accuracy: 0.2637\n",
            "Epoch 3/200\n",
            "71/84 [========================>.....] - ETA: 0s - loss: 1.1780 - accuracy: 0.3957\n",
            "Epoch 00003: val_accuracy did not improve from 0.26371\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.1766 - accuracy: 0.3995 - val_loss: 1.1870 - val_accuracy: 0.2572\n",
            "Epoch 4/200\n",
            "69/84 [=======================>......] - ETA: 0s - loss: 1.1484 - accuracy: 0.3854\n",
            "Epoch 00004: val_accuracy improved from 0.26371 to 0.44256, saving model to /content/drive/My Drive/Machine-Learning-Projects/cs231n-project/models/all_samples_dense_vae_classifier-caption-laugh-v4-la.h5\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.1463 - accuracy: 0.3980 - val_loss: 1.1578 - val_accuracy: 0.4426\n",
            "Epoch 5/200\n",
            "67/84 [======================>.......] - ETA: 0s - loss: 1.1283 - accuracy: 0.4193\n",
            "Epoch 00005: val_accuracy did not improve from 0.44256\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.1265 - accuracy: 0.4156 - val_loss: 1.1523 - val_accuracy: 0.3747\n",
            "Epoch 6/200\n",
            "67/84 [======================>.......] - ETA: 0s - loss: 1.1146 - accuracy: 0.4188\n",
            "Epoch 00006: val_accuracy did not improve from 0.44256\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.1132 - accuracy: 0.4310 - val_loss: 1.1442 - val_accuracy: 0.3916\n",
            "Epoch 7/200\n",
            "70/84 [========================>.....] - ETA: 0s - loss: 1.1047 - accuracy: 0.4330\n",
            "Epoch 00007: val_accuracy did not improve from 0.44256\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.1028 - accuracy: 0.4389 - val_loss: 1.1427 - val_accuracy: 0.3916\n",
            "Epoch 8/200\n",
            "68/84 [=======================>......] - ETA: 0s - loss: 1.0914 - accuracy: 0.4545\n",
            "Epoch 00008: val_accuracy did not improve from 0.44256\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0939 - accuracy: 0.4408 - val_loss: 1.1005 - val_accuracy: 0.4047\n",
            "Epoch 9/200\n",
            "81/84 [===========================>..] - ETA: 0s - loss: 1.0882 - accuracy: 0.4495\n",
            "Epoch 00009: val_accuracy did not improve from 0.44256\n",
            "84/84 [==============================] - 0s 4ms/step - loss: 1.0882 - accuracy: 0.4483 - val_loss: 1.1466 - val_accuracy: 0.3655\n",
            "Epoch 10/200\n",
            "78/84 [==========================>...] - ETA: 0s - loss: 1.0813 - accuracy: 0.4696\n",
            "Epoch 00010: val_accuracy did not improve from 0.44256\n",
            "84/84 [==============================] - 0s 4ms/step - loss: 1.0811 - accuracy: 0.4686 - val_loss: 1.1114 - val_accuracy: 0.4399\n",
            "Epoch 11/200\n",
            "66/84 [======================>.......] - ETA: 0s - loss: 1.0779 - accuracy: 0.4631\n",
            "Epoch 00011: val_accuracy improved from 0.44256 to 0.44517, saving model to /content/drive/My Drive/Machine-Learning-Projects/cs231n-project/models/all_samples_dense_vae_classifier-caption-laugh-v4-la.h5\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0765 - accuracy: 0.4664 - val_loss: 1.1063 - val_accuracy: 0.4452\n",
            "Epoch 12/200\n",
            "83/84 [============================>.] - ETA: 0s - loss: 1.0705 - accuracy: 0.4736\n",
            "Epoch 00012: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0705 - accuracy: 0.4735 - val_loss: 1.0972 - val_accuracy: 0.4399\n",
            "Epoch 13/200\n",
            "66/84 [======================>.......] - ETA: 0s - loss: 1.0702 - accuracy: 0.4721\n",
            "Epoch 00013: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0689 - accuracy: 0.4720 - val_loss: 1.0949 - val_accuracy: 0.4399\n",
            "Epoch 14/200\n",
            "68/84 [=======================>......] - ETA: 0s - loss: 1.0672 - accuracy: 0.4701\n",
            "Epoch 00014: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0653 - accuracy: 0.4731 - val_loss: 1.1504 - val_accuracy: 0.4073\n",
            "Epoch 15/200\n",
            "71/84 [========================>.....] - ETA: 0s - loss: 1.0657 - accuracy: 0.4688\n",
            "Epoch 00015: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0641 - accuracy: 0.4728 - val_loss: 1.1054 - val_accuracy: 0.4399\n",
            "Epoch 16/200\n",
            "70/84 [========================>.....] - ETA: 0s - loss: 1.0610 - accuracy: 0.4679\n",
            "Epoch 00016: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0624 - accuracy: 0.4652 - val_loss: 1.0897 - val_accuracy: 0.4308\n",
            "Epoch 17/200\n",
            "67/84 [======================>.......] - ETA: 0s - loss: 1.0616 - accuracy: 0.4627\n",
            "Epoch 00017: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0627 - accuracy: 0.4637 - val_loss: 1.1008 - val_accuracy: 0.4426\n",
            "Epoch 18/200\n",
            "74/84 [=========================>....] - ETA: 0s - loss: 1.0619 - accuracy: 0.4620\n",
            "Epoch 00018: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0616 - accuracy: 0.4660 - val_loss: 1.0744 - val_accuracy: 0.4217\n",
            "Epoch 19/200\n",
            "66/84 [======================>.......] - ETA: 0s - loss: 1.0602 - accuracy: 0.4683\n",
            "Epoch 00019: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0595 - accuracy: 0.4686 - val_loss: 1.1161 - val_accuracy: 0.4426\n",
            "Epoch 20/200\n",
            "67/84 [======================>.......] - ETA: 0s - loss: 1.0568 - accuracy: 0.4636\n",
            "Epoch 00020: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0575 - accuracy: 0.4671 - val_loss: 1.0895 - val_accuracy: 0.4413\n",
            "Epoch 21/200\n",
            "73/84 [=========================>....] - ETA: 0s - loss: 1.0570 - accuracy: 0.4696\n",
            "Epoch 00021: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0579 - accuracy: 0.4671 - val_loss: 1.0991 - val_accuracy: 0.4413\n",
            "Epoch 22/200\n",
            "67/84 [======================>.......] - ETA: 0s - loss: 1.0529 - accuracy: 0.4739\n",
            "Epoch 00022: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0554 - accuracy: 0.4728 - val_loss: 1.0885 - val_accuracy: 0.4373\n",
            "Epoch 23/200\n",
            "68/84 [=======================>......] - ETA: 0s - loss: 1.0575 - accuracy: 0.4609\n",
            "Epoch 00023: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0561 - accuracy: 0.4641 - val_loss: 1.1240 - val_accuracy: 0.4399\n",
            "Epoch 24/200\n",
            "80/84 [===========================>..] - ETA: 0s - loss: 1.0579 - accuracy: 0.4668\n",
            "Epoch 00024: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0567 - accuracy: 0.4705 - val_loss: 1.0980 - val_accuracy: 0.4452\n",
            "Epoch 25/200\n",
            "71/84 [========================>.....] - ETA: 0s - loss: 1.0534 - accuracy: 0.4696\n",
            "Epoch 00025: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0526 - accuracy: 0.4739 - val_loss: 1.1286 - val_accuracy: 0.4426\n",
            "Epoch 26/200\n",
            "69/84 [=======================>......] - ETA: 0s - loss: 1.0528 - accuracy: 0.4737\n",
            "Epoch 00026: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0535 - accuracy: 0.4720 - val_loss: 1.0949 - val_accuracy: 0.4413\n",
            "Epoch 27/200\n",
            "84/84 [==============================] - ETA: 0s - loss: 1.0516 - accuracy: 0.4697\n",
            "Epoch 00027: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0516 - accuracy: 0.4697 - val_loss: 1.1214 - val_accuracy: 0.4452\n",
            "Epoch 28/200\n",
            "65/84 [======================>.......] - ETA: 0s - loss: 1.0514 - accuracy: 0.4784\n",
            "Epoch 00028: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0534 - accuracy: 0.4739 - val_loss: 1.0850 - val_accuracy: 0.4269\n",
            "Epoch 29/200\n",
            "70/84 [========================>.....] - ETA: 0s - loss: 1.0527 - accuracy: 0.4679\n",
            "Epoch 00029: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0522 - accuracy: 0.4690 - val_loss: 1.1054 - val_accuracy: 0.4426\n",
            "Epoch 30/200\n",
            "68/84 [=======================>......] - ETA: 0s - loss: 1.0489 - accuracy: 0.4720\n",
            "Epoch 00030: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0525 - accuracy: 0.4634 - val_loss: 1.0822 - val_accuracy: 0.4295\n",
            "Epoch 31/200\n",
            "83/84 [============================>.] - ETA: 0s - loss: 1.0546 - accuracy: 0.4691\n",
            "Epoch 00031: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0548 - accuracy: 0.4682 - val_loss: 1.0868 - val_accuracy: 0.4334\n",
            "Epoch 32/200\n",
            "71/84 [========================>.....] - ETA: 0s - loss: 1.0543 - accuracy: 0.4723\n",
            "Epoch 00032: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0543 - accuracy: 0.4716 - val_loss: 1.0905 - val_accuracy: 0.4413\n",
            "Epoch 33/200\n",
            "66/84 [======================>.......] - ETA: 0s - loss: 1.0520 - accuracy: 0.4692\n",
            "Epoch 00033: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0510 - accuracy: 0.4720 - val_loss: 1.1017 - val_accuracy: 0.4413\n",
            "Epoch 34/200\n",
            "69/84 [=======================>......] - ETA: 0s - loss: 1.0528 - accuracy: 0.4669\n",
            "Epoch 00034: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0516 - accuracy: 0.4724 - val_loss: 1.0927 - val_accuracy: 0.4373\n",
            "Epoch 35/200\n",
            "69/84 [=======================>......] - ETA: 0s - loss: 1.0529 - accuracy: 0.4710\n",
            "Epoch 00035: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0510 - accuracy: 0.4758 - val_loss: 1.1053 - val_accuracy: 0.4413\n",
            "Epoch 36/200\n",
            "69/84 [=======================>......] - ETA: 0s - loss: 1.0515 - accuracy: 0.4728\n",
            "Epoch 00036: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0510 - accuracy: 0.4724 - val_loss: 1.0929 - val_accuracy: 0.4399\n",
            "Epoch 37/200\n",
            "66/84 [======================>.......] - ETA: 0s - loss: 1.0498 - accuracy: 0.4754\n",
            "Epoch 00037: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0513 - accuracy: 0.4690 - val_loss: 1.0970 - val_accuracy: 0.4426\n",
            "Epoch 38/200\n",
            "68/84 [=======================>......] - ETA: 0s - loss: 1.0469 - accuracy: 0.4775\n",
            "Epoch 00038: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0504 - accuracy: 0.4743 - val_loss: 1.0824 - val_accuracy: 0.4282\n",
            "Epoch 39/200\n",
            "64/84 [=====================>........] - ETA: 0s - loss: 1.0490 - accuracy: 0.4775\n",
            "Epoch 00039: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0511 - accuracy: 0.4716 - val_loss: 1.0819 - val_accuracy: 0.4269\n",
            "Epoch 40/200\n",
            "71/84 [========================>.....] - ETA: 0s - loss: 1.0555 - accuracy: 0.4657\n",
            "Epoch 00040: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0524 - accuracy: 0.4686 - val_loss: 1.0926 - val_accuracy: 0.4413\n",
            "Epoch 41/200\n",
            "73/84 [=========================>....] - ETA: 0s - loss: 1.0559 - accuracy: 0.4679\n",
            "Epoch 00041: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 4ms/step - loss: 1.0518 - accuracy: 0.4743 - val_loss: 1.1124 - val_accuracy: 0.4386\n",
            "Epoch 42/200\n",
            "67/84 [======================>.......] - ETA: 0s - loss: 1.0462 - accuracy: 0.4827\n",
            "Epoch 00042: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0513 - accuracy: 0.4701 - val_loss: 1.0848 - val_accuracy: 0.4282\n",
            "Epoch 43/200\n",
            "68/84 [=======================>......] - ETA: 0s - loss: 1.0521 - accuracy: 0.4688\n",
            "Epoch 00043: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0512 - accuracy: 0.4690 - val_loss: 1.0981 - val_accuracy: 0.4413\n",
            "Epoch 44/200\n",
            "71/84 [========================>.....] - ETA: 0s - loss: 1.0525 - accuracy: 0.4674\n",
            "Epoch 00044: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0511 - accuracy: 0.4709 - val_loss: 1.0867 - val_accuracy: 0.4347\n",
            "Epoch 45/200\n",
            "70/84 [========================>.....] - ETA: 0s - loss: 1.0553 - accuracy: 0.4634\n",
            "Epoch 00045: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0545 - accuracy: 0.4690 - val_loss: 1.0954 - val_accuracy: 0.4413\n",
            "Epoch 46/200\n",
            "67/84 [======================>.......] - ETA: 0s - loss: 1.0488 - accuracy: 0.4743\n",
            "Epoch 00046: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0509 - accuracy: 0.4686 - val_loss: 1.0894 - val_accuracy: 0.4399\n",
            "Epoch 47/200\n",
            "69/84 [=======================>......] - ETA: 0s - loss: 1.0446 - accuracy: 0.4832\n",
            "Epoch 00047: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0522 - accuracy: 0.4754 - val_loss: 1.0812 - val_accuracy: 0.4243\n",
            "Epoch 48/200\n",
            "72/84 [========================>.....] - ETA: 0s - loss: 1.0487 - accuracy: 0.4792\n",
            "Epoch 00048: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0507 - accuracy: 0.4731 - val_loss: 1.0610 - val_accuracy: 0.4191\n",
            "Epoch 49/200\n",
            "70/84 [========================>.....] - ETA: 0s - loss: 1.0509 - accuracy: 0.4746\n",
            "Epoch 00049: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0514 - accuracy: 0.4750 - val_loss: 1.0971 - val_accuracy: 0.4399\n",
            "Epoch 50/200\n",
            "66/84 [======================>.......] - ETA: 0s - loss: 1.0489 - accuracy: 0.4725\n",
            "Epoch 00050: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0498 - accuracy: 0.4716 - val_loss: 1.0732 - val_accuracy: 0.4204\n",
            "Epoch 51/200\n",
            "68/84 [=======================>......] - ETA: 0s - loss: 1.0509 - accuracy: 0.4715\n",
            "Epoch 00051: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0508 - accuracy: 0.4746 - val_loss: 1.0916 - val_accuracy: 0.4399\n",
            "Epoch 52/200\n",
            "68/84 [=======================>......] - ETA: 0s - loss: 1.0463 - accuracy: 0.4724\n",
            "Epoch 00052: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0493 - accuracy: 0.4671 - val_loss: 1.1226 - val_accuracy: 0.4413\n",
            "Epoch 53/200\n",
            "69/84 [=======================>......] - ETA: 0s - loss: 1.0472 - accuracy: 0.4697\n",
            "Epoch 00053: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0508 - accuracy: 0.4679 - val_loss: 1.0947 - val_accuracy: 0.4439\n",
            "Epoch 54/200\n",
            "71/84 [========================>.....] - ETA: 0s - loss: 1.0496 - accuracy: 0.4723\n",
            "Epoch 00054: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0499 - accuracy: 0.4656 - val_loss: 1.0841 - val_accuracy: 0.4269\n",
            "Epoch 55/200\n",
            "68/84 [=======================>......] - ETA: 0s - loss: 1.0521 - accuracy: 0.4600\n",
            "Epoch 00055: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0514 - accuracy: 0.4664 - val_loss: 1.0938 - val_accuracy: 0.4399\n",
            "Epoch 56/200\n",
            "65/84 [======================>.......] - ETA: 0s - loss: 1.0557 - accuracy: 0.4668\n",
            "Epoch 00056: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0512 - accuracy: 0.4701 - val_loss: 1.0946 - val_accuracy: 0.4413\n",
            "Epoch 57/200\n",
            "84/84 [==============================] - ETA: 0s - loss: 1.0504 - accuracy: 0.4686\n",
            "Epoch 00057: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0504 - accuracy: 0.4686 - val_loss: 1.1204 - val_accuracy: 0.4439\n",
            "Epoch 58/200\n",
            "72/84 [========================>.....] - ETA: 0s - loss: 1.0519 - accuracy: 0.4657\n",
            "Epoch 00058: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0499 - accuracy: 0.4709 - val_loss: 1.0695 - val_accuracy: 0.4243\n",
            "Epoch 59/200\n",
            "82/84 [============================>.] - ETA: 0s - loss: 1.0509 - accuracy: 0.4676\n",
            "Epoch 00059: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 4ms/step - loss: 1.0507 - accuracy: 0.4679 - val_loss: 1.0889 - val_accuracy: 0.4295\n",
            "Epoch 60/200\n",
            "68/84 [=======================>......] - ETA: 0s - loss: 1.0467 - accuracy: 0.4715\n",
            "Epoch 00060: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0491 - accuracy: 0.4731 - val_loss: 1.0843 - val_accuracy: 0.4269\n",
            "Epoch 61/200\n",
            "66/84 [======================>.......] - ETA: 0s - loss: 1.0552 - accuracy: 0.4626\n",
            "Epoch 00061: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0511 - accuracy: 0.4720 - val_loss: 1.0880 - val_accuracy: 0.4295\n",
            "Epoch 62/200\n",
            "70/84 [========================>.....] - ETA: 0s - loss: 1.0468 - accuracy: 0.4772\n",
            "Epoch 00062: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0498 - accuracy: 0.4690 - val_loss: 1.0823 - val_accuracy: 0.4217\n",
            "Epoch 63/200\n",
            "63/84 [=====================>........] - ETA: 0s - loss: 1.0515 - accuracy: 0.4717\n",
            "Epoch 00063: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0517 - accuracy: 0.4675 - val_loss: 1.0881 - val_accuracy: 0.4321\n",
            "Epoch 64/200\n",
            "70/84 [========================>.....] - ETA: 0s - loss: 1.0509 - accuracy: 0.4679\n",
            "Epoch 00064: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0512 - accuracy: 0.4697 - val_loss: 1.1093 - val_accuracy: 0.4426\n",
            "Epoch 65/200\n",
            "66/84 [======================>.......] - ETA: 0s - loss: 1.0506 - accuracy: 0.4830\n",
            "Epoch 00065: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0519 - accuracy: 0.4728 - val_loss: 1.0821 - val_accuracy: 0.4282\n",
            "Epoch 66/200\n",
            "69/84 [=======================>......] - ETA: 0s - loss: 1.0519 - accuracy: 0.4629\n",
            "Epoch 00066: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0514 - accuracy: 0.4660 - val_loss: 1.1019 - val_accuracy: 0.4439\n",
            "Epoch 67/200\n",
            "64/84 [=====================>........] - ETA: 0s - loss: 1.0526 - accuracy: 0.4731\n",
            "Epoch 00067: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0509 - accuracy: 0.4743 - val_loss: 1.0794 - val_accuracy: 0.4243\n",
            "Epoch 68/200\n",
            "62/84 [=====================>........] - ETA: 0s - loss: 1.0511 - accuracy: 0.4738\n",
            "Epoch 00068: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0500 - accuracy: 0.4701 - val_loss: 1.1108 - val_accuracy: 0.4426\n",
            "Epoch 69/200\n",
            "70/84 [========================>.....] - ETA: 0s - loss: 1.0475 - accuracy: 0.4790\n",
            "Epoch 00069: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0508 - accuracy: 0.4728 - val_loss: 1.1240 - val_accuracy: 0.4426\n",
            "Epoch 70/200\n",
            "65/84 [======================>.......] - ETA: 0s - loss: 1.0581 - accuracy: 0.4630\n",
            "Epoch 00070: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0525 - accuracy: 0.4705 - val_loss: 1.1082 - val_accuracy: 0.4426\n",
            "Epoch 71/200\n",
            "68/84 [=======================>......] - ETA: 0s - loss: 1.0499 - accuracy: 0.4678\n",
            "Epoch 00071: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0494 - accuracy: 0.4705 - val_loss: 1.0951 - val_accuracy: 0.4426\n",
            "Epoch 72/200\n",
            "66/84 [======================>.......] - ETA: 0s - loss: 1.0496 - accuracy: 0.4673\n",
            "Epoch 00072: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0498 - accuracy: 0.4709 - val_loss: 1.1059 - val_accuracy: 0.4439\n",
            "Epoch 73/200\n",
            "70/84 [========================>.....] - ETA: 0s - loss: 1.0492 - accuracy: 0.4710\n",
            "Epoch 00073: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0496 - accuracy: 0.4716 - val_loss: 1.0814 - val_accuracy: 0.4256\n",
            "Epoch 74/200\n",
            "64/84 [=====================>........] - ETA: 0s - loss: 1.0494 - accuracy: 0.4717\n",
            "Epoch 00074: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0507 - accuracy: 0.4724 - val_loss: 1.0904 - val_accuracy: 0.4321\n",
            "Epoch 75/200\n",
            "71/84 [========================>.....] - ETA: 0s - loss: 1.0522 - accuracy: 0.4745\n",
            "Epoch 00075: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0528 - accuracy: 0.4686 - val_loss: 1.0800 - val_accuracy: 0.4269\n",
            "Epoch 76/200\n",
            "70/84 [========================>.....] - ETA: 0s - loss: 1.0513 - accuracy: 0.4683\n",
            "Epoch 00076: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0499 - accuracy: 0.4671 - val_loss: 1.1042 - val_accuracy: 0.4452\n",
            "Epoch 77/200\n",
            "69/84 [=======================>......] - ETA: 0s - loss: 1.0502 - accuracy: 0.4706\n",
            "Epoch 00077: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0513 - accuracy: 0.4679 - val_loss: 1.0804 - val_accuracy: 0.4243\n",
            "Epoch 78/200\n",
            "71/84 [========================>.....] - ETA: 0s - loss: 1.0451 - accuracy: 0.4749\n",
            "Epoch 00078: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0500 - accuracy: 0.4690 - val_loss: 1.0898 - val_accuracy: 0.4321\n",
            "Epoch 79/200\n",
            "68/84 [=======================>......] - ETA: 0s - loss: 1.0497 - accuracy: 0.4724\n",
            "Epoch 00079: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0501 - accuracy: 0.4743 - val_loss: 1.1038 - val_accuracy: 0.4413\n",
            "Epoch 80/200\n",
            "70/84 [========================>.....] - ETA: 0s - loss: 1.0462 - accuracy: 0.4817\n",
            "Epoch 00080: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0522 - accuracy: 0.4743 - val_loss: 1.0863 - val_accuracy: 0.4282\n",
            "Epoch 81/200\n",
            "66/84 [======================>.......] - ETA: 0s - loss: 1.0536 - accuracy: 0.4659\n",
            "Epoch 00081: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0533 - accuracy: 0.4686 - val_loss: 1.1114 - val_accuracy: 0.4426\n",
            "Epoch 82/200\n",
            "74/84 [=========================>....] - ETA: 0s - loss: 1.0525 - accuracy: 0.4700\n",
            "Epoch 00082: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0535 - accuracy: 0.4656 - val_loss: 1.1041 - val_accuracy: 0.4426\n",
            "Epoch 83/200\n",
            "64/84 [=====================>........] - ETA: 0s - loss: 1.0509 - accuracy: 0.4683\n",
            "Epoch 00083: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0507 - accuracy: 0.4697 - val_loss: 1.0740 - val_accuracy: 0.4230\n",
            "Epoch 84/200\n",
            "65/84 [======================>.......] - ETA: 0s - loss: 1.0471 - accuracy: 0.4750\n",
            "Epoch 00084: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0503 - accuracy: 0.4694 - val_loss: 1.1197 - val_accuracy: 0.4452\n",
            "Epoch 85/200\n",
            "69/84 [=======================>......] - ETA: 0s - loss: 1.0523 - accuracy: 0.4755\n",
            "Epoch 00085: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0529 - accuracy: 0.4720 - val_loss: 1.0869 - val_accuracy: 0.4269\n",
            "Epoch 86/200\n",
            "70/84 [========================>.....] - ETA: 0s - loss: 1.0526 - accuracy: 0.4714\n",
            "Epoch 00086: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0494 - accuracy: 0.4739 - val_loss: 1.0752 - val_accuracy: 0.4217\n",
            "Epoch 87/200\n",
            "66/84 [======================>.......] - ETA: 0s - loss: 1.0507 - accuracy: 0.4702\n",
            "Epoch 00087: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0502 - accuracy: 0.4731 - val_loss: 1.0883 - val_accuracy: 0.4334\n",
            "Epoch 88/200\n",
            "71/84 [========================>.....] - ETA: 0s - loss: 1.0495 - accuracy: 0.4701\n",
            "Epoch 00088: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0502 - accuracy: 0.4682 - val_loss: 1.1344 - val_accuracy: 0.4452\n",
            "Epoch 89/200\n",
            "67/84 [======================>.......] - ETA: 0s - loss: 1.0433 - accuracy: 0.4729\n",
            "Epoch 00089: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0500 - accuracy: 0.4724 - val_loss: 1.1080 - val_accuracy: 0.4452\n",
            "Epoch 90/200\n",
            "69/84 [=======================>......] - ETA: 0s - loss: 1.0523 - accuracy: 0.4724\n",
            "Epoch 00090: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0511 - accuracy: 0.4705 - val_loss: 1.0899 - val_accuracy: 0.4321\n",
            "Epoch 91/200\n",
            "68/84 [=======================>......] - ETA: 0s - loss: 1.0524 - accuracy: 0.4743\n",
            "Epoch 00091: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0516 - accuracy: 0.4720 - val_loss: 1.0968 - val_accuracy: 0.4413\n",
            "Epoch 92/200\n",
            "69/84 [=======================>......] - ETA: 0s - loss: 1.0535 - accuracy: 0.4706\n",
            "Epoch 00092: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0501 - accuracy: 0.4739 - val_loss: 1.1316 - val_accuracy: 0.4426\n",
            "Epoch 93/200\n",
            "66/84 [======================>.......] - ETA: 0s - loss: 1.0504 - accuracy: 0.4706\n",
            "Epoch 00093: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0503 - accuracy: 0.4750 - val_loss: 1.0891 - val_accuracy: 0.4321\n",
            "Epoch 94/200\n",
            "67/84 [======================>.......] - ETA: 0s - loss: 1.0494 - accuracy: 0.4720\n",
            "Epoch 00094: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0496 - accuracy: 0.4716 - val_loss: 1.0832 - val_accuracy: 0.4269\n",
            "Epoch 95/200\n",
            "68/84 [=======================>......] - ETA: 0s - loss: 1.0481 - accuracy: 0.4779\n",
            "Epoch 00095: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0501 - accuracy: 0.4728 - val_loss: 1.0899 - val_accuracy: 0.4399\n",
            "Epoch 96/200\n",
            "83/84 [============================>.] - ETA: 0s - loss: 1.0501 - accuracy: 0.4680\n",
            "Epoch 00096: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0499 - accuracy: 0.4686 - val_loss: 1.0963 - val_accuracy: 0.4413\n",
            "Epoch 97/200\n",
            "66/84 [======================>.......] - ETA: 0s - loss: 1.0509 - accuracy: 0.4683\n",
            "Epoch 00097: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0511 - accuracy: 0.4716 - val_loss: 1.0850 - val_accuracy: 0.4269\n",
            "Epoch 98/200\n",
            "83/84 [============================>.] - ETA: 0s - loss: 1.0528 - accuracy: 0.4661\n",
            "Epoch 00098: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0523 - accuracy: 0.4664 - val_loss: 1.0809 - val_accuracy: 0.4256\n",
            "Epoch 99/200\n",
            "66/84 [======================>.......] - ETA: 0s - loss: 1.0534 - accuracy: 0.4612\n",
            "Epoch 00099: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0487 - accuracy: 0.4716 - val_loss: 1.1233 - val_accuracy: 0.4386\n",
            "Epoch 100/200\n",
            "69/84 [=======================>......] - ETA: 0s - loss: 1.0492 - accuracy: 0.4728\n",
            "Epoch 00100: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0529 - accuracy: 0.4720 - val_loss: 1.1082 - val_accuracy: 0.4452\n",
            "Epoch 101/200\n",
            "69/84 [=======================>......] - ETA: 0s - loss: 1.0470 - accuracy: 0.4778\n",
            "Epoch 00101: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0496 - accuracy: 0.4754 - val_loss: 1.0902 - val_accuracy: 0.4347\n",
            "Epoch 102/200\n",
            "71/84 [========================>.....] - ETA: 0s - loss: 1.0510 - accuracy: 0.4661\n",
            "Epoch 00102: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0491 - accuracy: 0.4697 - val_loss: 1.1078 - val_accuracy: 0.4426\n",
            "Epoch 103/200\n",
            "82/84 [============================>.] - ETA: 0s - loss: 1.0507 - accuracy: 0.4634\n",
            "Epoch 00103: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 4ms/step - loss: 1.0524 - accuracy: 0.4641 - val_loss: 1.1265 - val_accuracy: 0.4426\n",
            "Epoch 104/200\n",
            "68/84 [=======================>......] - ETA: 0s - loss: 1.0521 - accuracy: 0.4688\n",
            "Epoch 00104: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0508 - accuracy: 0.4690 - val_loss: 1.0961 - val_accuracy: 0.4399\n",
            "Epoch 105/200\n",
            "65/84 [======================>.......] - ETA: 0s - loss: 1.0461 - accuracy: 0.4731\n",
            "Epoch 00105: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0499 - accuracy: 0.4694 - val_loss: 1.1065 - val_accuracy: 0.4452\n",
            "Epoch 106/200\n",
            "71/84 [========================>.....] - ETA: 0s - loss: 1.0470 - accuracy: 0.4705\n",
            "Epoch 00106: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0495 - accuracy: 0.4652 - val_loss: 1.0725 - val_accuracy: 0.4230\n",
            "Epoch 107/200\n",
            "66/84 [======================>.......] - ETA: 0s - loss: 1.0572 - accuracy: 0.4616\n",
            "Epoch 00107: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0532 - accuracy: 0.4671 - val_loss: 1.0854 - val_accuracy: 0.4321\n",
            "Epoch 108/200\n",
            "69/84 [=======================>......] - ETA: 0s - loss: 1.0505 - accuracy: 0.4742\n",
            "Epoch 00108: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0504 - accuracy: 0.4709 - val_loss: 1.0912 - val_accuracy: 0.4386\n",
            "Epoch 109/200\n",
            "67/84 [======================>.......] - ETA: 0s - loss: 1.0526 - accuracy: 0.4664\n",
            "Epoch 00109: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0515 - accuracy: 0.4675 - val_loss: 1.0742 - val_accuracy: 0.4256\n",
            "Epoch 110/200\n",
            "64/84 [=====================>........] - ETA: 0s - loss: 1.0535 - accuracy: 0.4673\n",
            "Epoch 00110: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0496 - accuracy: 0.4739 - val_loss: 1.0716 - val_accuracy: 0.4217\n",
            "Epoch 111/200\n",
            "67/84 [======================>.......] - ETA: 0s - loss: 1.0594 - accuracy: 0.4604\n",
            "Epoch 00111: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0506 - accuracy: 0.4667 - val_loss: 1.1263 - val_accuracy: 0.4452\n",
            "Epoch 112/200\n",
            "75/84 [=========================>....] - ETA: 0s - loss: 1.0498 - accuracy: 0.4704\n",
            "Epoch 00112: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0506 - accuracy: 0.4690 - val_loss: 1.0862 - val_accuracy: 0.4269\n",
            "Epoch 113/200\n",
            "70/84 [========================>.....] - ETA: 0s - loss: 1.0539 - accuracy: 0.4683\n",
            "Epoch 00113: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0503 - accuracy: 0.4731 - val_loss: 1.0920 - val_accuracy: 0.4399\n",
            "Epoch 114/200\n",
            "62/84 [=====================>........] - ETA: 0s - loss: 1.0519 - accuracy: 0.4617\n",
            "Epoch 00114: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0506 - accuracy: 0.4713 - val_loss: 1.0768 - val_accuracy: 0.4204\n",
            "Epoch 115/200\n",
            "67/84 [======================>.......] - ETA: 0s - loss: 1.0502 - accuracy: 0.4701\n",
            "Epoch 00115: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0487 - accuracy: 0.4713 - val_loss: 1.1295 - val_accuracy: 0.4426\n",
            "Epoch 116/200\n",
            "66/84 [======================>.......] - ETA: 0s - loss: 1.0516 - accuracy: 0.4631\n",
            "Epoch 00116: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0503 - accuracy: 0.4682 - val_loss: 1.0780 - val_accuracy: 0.4243\n",
            "Epoch 117/200\n",
            "71/84 [========================>.....] - ETA: 0s - loss: 1.0514 - accuracy: 0.4665\n",
            "Epoch 00117: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0498 - accuracy: 0.4705 - val_loss: 1.0893 - val_accuracy: 0.4334\n",
            "Epoch 118/200\n",
            "70/84 [========================>.....] - ETA: 0s - loss: 1.0501 - accuracy: 0.4714\n",
            "Epoch 00118: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0504 - accuracy: 0.4709 - val_loss: 1.0965 - val_accuracy: 0.4413\n",
            "Epoch 119/200\n",
            "69/84 [=======================>......] - ETA: 0s - loss: 1.0470 - accuracy: 0.4769\n",
            "Epoch 00119: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0504 - accuracy: 0.4694 - val_loss: 1.0862 - val_accuracy: 0.4269\n",
            "Epoch 120/200\n",
            "66/84 [======================>.......] - ETA: 0s - loss: 1.0494 - accuracy: 0.4711\n",
            "Epoch 00120: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 4ms/step - loss: 1.0506 - accuracy: 0.4705 - val_loss: 1.0797 - val_accuracy: 0.4256\n",
            "Epoch 121/200\n",
            "64/84 [=====================>........] - ETA: 0s - loss: 1.0609 - accuracy: 0.4565\n",
            "Epoch 00121: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0533 - accuracy: 0.4686 - val_loss: 1.0920 - val_accuracy: 0.4334\n",
            "Epoch 122/200\n",
            "65/84 [======================>.......] - ETA: 0s - loss: 1.0468 - accuracy: 0.4697\n",
            "Epoch 00122: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0514 - accuracy: 0.4645 - val_loss: 1.0923 - val_accuracy: 0.4386\n",
            "Epoch 123/200\n",
            "66/84 [======================>.......] - ETA: 0s - loss: 1.0504 - accuracy: 0.4664\n",
            "Epoch 00123: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0498 - accuracy: 0.4728 - val_loss: 1.1151 - val_accuracy: 0.4426\n",
            "Epoch 124/200\n",
            "78/84 [==========================>...] - ETA: 0s - loss: 1.0487 - accuracy: 0.4696\n",
            "Epoch 00124: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0494 - accuracy: 0.4660 - val_loss: 1.1014 - val_accuracy: 0.4413\n",
            "Epoch 125/200\n",
            "70/84 [========================>.....] - ETA: 0s - loss: 1.0500 - accuracy: 0.4710\n",
            "Epoch 00125: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0510 - accuracy: 0.4716 - val_loss: 1.0752 - val_accuracy: 0.4243\n",
            "Epoch 126/200\n",
            "70/84 [========================>.....] - ETA: 0s - loss: 1.0545 - accuracy: 0.4688\n",
            "Epoch 00126: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0527 - accuracy: 0.4765 - val_loss: 1.0846 - val_accuracy: 0.4269\n",
            "Epoch 127/200\n",
            "67/84 [======================>.......] - ETA: 0s - loss: 1.0548 - accuracy: 0.4590\n",
            "Epoch 00127: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0508 - accuracy: 0.4690 - val_loss: 1.1084 - val_accuracy: 0.4452\n",
            "Epoch 128/200\n",
            "71/84 [========================>.....] - ETA: 0s - loss: 1.0494 - accuracy: 0.4723\n",
            "Epoch 00128: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0507 - accuracy: 0.4694 - val_loss: 1.1082 - val_accuracy: 0.4452\n",
            "Epoch 129/200\n",
            "67/84 [======================>.......] - ETA: 0s - loss: 1.0464 - accuracy: 0.4771\n",
            "Epoch 00129: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0495 - accuracy: 0.4728 - val_loss: 1.0943 - val_accuracy: 0.4334\n",
            "Epoch 130/200\n",
            "70/84 [========================>.....] - ETA: 0s - loss: 1.0483 - accuracy: 0.4804\n",
            "Epoch 00130: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0508 - accuracy: 0.4731 - val_loss: 1.0759 - val_accuracy: 0.4230\n",
            "Epoch 131/200\n",
            "84/84 [==============================] - ETA: 0s - loss: 1.0506 - accuracy: 0.4709\n",
            "Epoch 00131: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0506 - accuracy: 0.4709 - val_loss: 1.0974 - val_accuracy: 0.4373\n",
            "Epoch 132/200\n",
            "64/84 [=====================>........] - ETA: 0s - loss: 1.0482 - accuracy: 0.4668\n",
            "Epoch 00132: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0506 - accuracy: 0.4652 - val_loss: 1.1090 - val_accuracy: 0.4452\n",
            "Epoch 133/200\n",
            "70/84 [========================>.....] - ETA: 0s - loss: 1.0490 - accuracy: 0.4670\n",
            "Epoch 00133: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0516 - accuracy: 0.4664 - val_loss: 1.0913 - val_accuracy: 0.4373\n",
            "Epoch 134/200\n",
            "70/84 [========================>.....] - ETA: 0s - loss: 1.0542 - accuracy: 0.4683\n",
            "Epoch 00134: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0518 - accuracy: 0.4660 - val_loss: 1.0713 - val_accuracy: 0.4217\n",
            "Epoch 135/200\n",
            "69/84 [=======================>......] - ETA: 0s - loss: 1.0515 - accuracy: 0.4674\n",
            "Epoch 00135: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0504 - accuracy: 0.4694 - val_loss: 1.0983 - val_accuracy: 0.4413\n",
            "Epoch 136/200\n",
            "70/84 [========================>.....] - ETA: 0s - loss: 1.0528 - accuracy: 0.4616\n",
            "Epoch 00136: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0509 - accuracy: 0.4664 - val_loss: 1.0877 - val_accuracy: 0.4269\n",
            "Epoch 137/200\n",
            "70/84 [========================>.....] - ETA: 0s - loss: 1.0517 - accuracy: 0.4696\n",
            "Epoch 00137: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0516 - accuracy: 0.4686 - val_loss: 1.1056 - val_accuracy: 0.4413\n",
            "Epoch 138/200\n",
            "67/84 [======================>.......] - ETA: 0s - loss: 1.0456 - accuracy: 0.4762\n",
            "Epoch 00138: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0504 - accuracy: 0.4709 - val_loss: 1.0739 - val_accuracy: 0.4217\n",
            "Epoch 139/200\n",
            "68/84 [=======================>......] - ETA: 0s - loss: 1.0449 - accuracy: 0.4738\n",
            "Epoch 00139: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0503 - accuracy: 0.4709 - val_loss: 1.0890 - val_accuracy: 0.4321\n",
            "Epoch 140/200\n",
            "67/84 [======================>.......] - ETA: 0s - loss: 1.0436 - accuracy: 0.4804\n",
            "Epoch 00140: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0487 - accuracy: 0.4709 - val_loss: 1.0677 - val_accuracy: 0.4204\n",
            "Epoch 141/200\n",
            "72/84 [========================>.....] - ETA: 0s - loss: 1.0531 - accuracy: 0.4666\n",
            "Epoch 00141: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0527 - accuracy: 0.4690 - val_loss: 1.0943 - val_accuracy: 0.4399\n",
            "Epoch 142/200\n",
            "75/84 [=========================>....] - ETA: 0s - loss: 1.0469 - accuracy: 0.4729\n",
            "Epoch 00142: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0494 - accuracy: 0.4682 - val_loss: 1.1027 - val_accuracy: 0.4439\n",
            "Epoch 143/200\n",
            "71/84 [========================>.....] - ETA: 0s - loss: 1.0521 - accuracy: 0.4648\n",
            "Epoch 00143: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0516 - accuracy: 0.4656 - val_loss: 1.1015 - val_accuracy: 0.4413\n",
            "Epoch 144/200\n",
            "69/84 [=======================>......] - ETA: 0s - loss: 1.0489 - accuracy: 0.4746\n",
            "Epoch 00144: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0509 - accuracy: 0.4697 - val_loss: 1.0859 - val_accuracy: 0.4282\n",
            "Epoch 145/200\n",
            "83/84 [============================>.] - ETA: 0s - loss: 1.0508 - accuracy: 0.4654\n",
            "Epoch 00145: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0506 - accuracy: 0.4660 - val_loss: 1.1081 - val_accuracy: 0.4413\n",
            "Epoch 146/200\n",
            "67/84 [======================>.......] - ETA: 0s - loss: 1.0542 - accuracy: 0.4641\n",
            "Epoch 00146: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0505 - accuracy: 0.4713 - val_loss: 1.0915 - val_accuracy: 0.4373\n",
            "Epoch 147/200\n",
            "65/84 [======================>.......] - ETA: 0s - loss: 1.0497 - accuracy: 0.4716\n",
            "Epoch 00147: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0512 - accuracy: 0.4709 - val_loss: 1.1152 - val_accuracy: 0.4426\n",
            "Epoch 148/200\n",
            "66/84 [======================>.......] - ETA: 0s - loss: 1.0535 - accuracy: 0.4678\n",
            "Epoch 00148: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0514 - accuracy: 0.4671 - val_loss: 1.0862 - val_accuracy: 0.4295\n",
            "Epoch 149/200\n",
            "79/84 [===========================>..] - ETA: 0s - loss: 1.0507 - accuracy: 0.4695\n",
            "Epoch 00149: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0506 - accuracy: 0.4675 - val_loss: 1.0842 - val_accuracy: 0.4269\n",
            "Epoch 150/200\n",
            "67/84 [======================>.......] - ETA: 0s - loss: 1.0520 - accuracy: 0.4692\n",
            "Epoch 00150: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0496 - accuracy: 0.4705 - val_loss: 1.1047 - val_accuracy: 0.4452\n",
            "Epoch 151/200\n",
            "68/84 [=======================>......] - ETA: 0s - loss: 1.0527 - accuracy: 0.4660\n",
            "Epoch 00151: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0500 - accuracy: 0.4713 - val_loss: 1.0966 - val_accuracy: 0.4426\n",
            "Epoch 152/200\n",
            "68/84 [=======================>......] - ETA: 0s - loss: 1.0486 - accuracy: 0.4766\n",
            "Epoch 00152: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0496 - accuracy: 0.4713 - val_loss: 1.0981 - val_accuracy: 0.4426\n",
            "Epoch 153/200\n",
            "66/84 [======================>.......] - ETA: 0s - loss: 1.0591 - accuracy: 0.4683\n",
            "Epoch 00153: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0515 - accuracy: 0.4746 - val_loss: 1.0873 - val_accuracy: 0.4321\n",
            "Epoch 154/200\n",
            "73/84 [=========================>....] - ETA: 0s - loss: 1.0499 - accuracy: 0.4743\n",
            "Epoch 00154: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0522 - accuracy: 0.4705 - val_loss: 1.1235 - val_accuracy: 0.4426\n",
            "Epoch 155/200\n",
            "83/84 [============================>.] - ETA: 0s - loss: 1.0497 - accuracy: 0.4672\n",
            "Epoch 00155: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0497 - accuracy: 0.4675 - val_loss: 1.0738 - val_accuracy: 0.4191\n",
            "Epoch 156/200\n",
            "81/84 [===========================>..] - ETA: 0s - loss: 1.0492 - accuracy: 0.4699\n",
            "Epoch 00156: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0491 - accuracy: 0.4701 - val_loss: 1.0964 - val_accuracy: 0.4413\n",
            "Epoch 157/200\n",
            "64/84 [=====================>........] - ETA: 0s - loss: 1.0478 - accuracy: 0.4780\n",
            "Epoch 00157: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0506 - accuracy: 0.4754 - val_loss: 1.0743 - val_accuracy: 0.4230\n",
            "Epoch 158/200\n",
            "67/84 [======================>.......] - ETA: 0s - loss: 1.0543 - accuracy: 0.4660\n",
            "Epoch 00158: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0534 - accuracy: 0.4660 - val_loss: 1.0794 - val_accuracy: 0.4269\n",
            "Epoch 159/200\n",
            "69/84 [=======================>......] - ETA: 0s - loss: 1.0513 - accuracy: 0.4638\n",
            "Epoch 00159: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0495 - accuracy: 0.4679 - val_loss: 1.1007 - val_accuracy: 0.4413\n",
            "Epoch 160/200\n",
            "65/84 [======================>.......] - ETA: 0s - loss: 1.0537 - accuracy: 0.4697\n",
            "Epoch 00160: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0502 - accuracy: 0.4758 - val_loss: 1.1030 - val_accuracy: 0.4413\n",
            "Epoch 161/200\n",
            "68/84 [=======================>......] - ETA: 0s - loss: 1.0514 - accuracy: 0.4752\n",
            "Epoch 00161: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0497 - accuracy: 0.4709 - val_loss: 1.0826 - val_accuracy: 0.4295\n",
            "Epoch 162/200\n",
            "67/84 [======================>.......] - ETA: 0s - loss: 1.0501 - accuracy: 0.4743\n",
            "Epoch 00162: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0505 - accuracy: 0.4728 - val_loss: 1.1236 - val_accuracy: 0.4439\n",
            "Epoch 163/200\n",
            "80/84 [===========================>..] - ETA: 0s - loss: 1.0497 - accuracy: 0.4730\n",
            "Epoch 00163: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 4ms/step - loss: 1.0507 - accuracy: 0.4746 - val_loss: 1.0932 - val_accuracy: 0.4399\n",
            "Epoch 164/200\n",
            "70/84 [========================>.....] - ETA: 0s - loss: 1.0525 - accuracy: 0.4665\n",
            "Epoch 00164: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0501 - accuracy: 0.4735 - val_loss: 1.1085 - val_accuracy: 0.4426\n",
            "Epoch 165/200\n",
            "83/84 [============================>.] - ETA: 0s - loss: 1.0505 - accuracy: 0.4699\n",
            "Epoch 00165: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0506 - accuracy: 0.4697 - val_loss: 1.1030 - val_accuracy: 0.4426\n",
            "Epoch 166/200\n",
            "68/84 [=======================>......] - ETA: 0s - loss: 1.0476 - accuracy: 0.4715\n",
            "Epoch 00166: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0502 - accuracy: 0.4697 - val_loss: 1.0880 - val_accuracy: 0.4269\n",
            "Epoch 167/200\n",
            "64/84 [=====================>........] - ETA: 0s - loss: 1.0464 - accuracy: 0.4727\n",
            "Epoch 00167: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0488 - accuracy: 0.4697 - val_loss: 1.0945 - val_accuracy: 0.4386\n",
            "Epoch 168/200\n",
            "68/84 [=======================>......] - ETA: 0s - loss: 1.0548 - accuracy: 0.4623\n",
            "Epoch 00168: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0501 - accuracy: 0.4709 - val_loss: 1.1060 - val_accuracy: 0.4439\n",
            "Epoch 169/200\n",
            "67/84 [======================>.......] - ETA: 0s - loss: 1.0477 - accuracy: 0.4697\n",
            "Epoch 00169: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0527 - accuracy: 0.4641 - val_loss: 1.0891 - val_accuracy: 0.4347\n",
            "Epoch 170/200\n",
            "66/84 [======================>.......] - ETA: 0s - loss: 1.0490 - accuracy: 0.4650\n",
            "Epoch 00170: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0491 - accuracy: 0.4690 - val_loss: 1.0982 - val_accuracy: 0.4439\n",
            "Epoch 171/200\n",
            "68/84 [=======================>......] - ETA: 0s - loss: 1.0501 - accuracy: 0.4692\n",
            "Epoch 00171: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0490 - accuracy: 0.4705 - val_loss: 1.0735 - val_accuracy: 0.4230\n",
            "Epoch 172/200\n",
            "84/84 [==============================] - ETA: 0s - loss: 1.0502 - accuracy: 0.4675\n",
            "Epoch 00172: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0502 - accuracy: 0.4675 - val_loss: 1.0796 - val_accuracy: 0.4256\n",
            "Epoch 173/200\n",
            "68/84 [=======================>......] - ETA: 0s - loss: 1.0506 - accuracy: 0.4692\n",
            "Epoch 00173: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0492 - accuracy: 0.4701 - val_loss: 1.1056 - val_accuracy: 0.4413\n",
            "Epoch 174/200\n",
            "84/84 [==============================] - ETA: 0s - loss: 1.0525 - accuracy: 0.4720\n",
            "Epoch 00174: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0525 - accuracy: 0.4720 - val_loss: 1.0995 - val_accuracy: 0.4413\n",
            "Epoch 175/200\n",
            "67/84 [======================>.......] - ETA: 0s - loss: 1.0552 - accuracy: 0.4590\n",
            "Epoch 00175: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0500 - accuracy: 0.4705 - val_loss: 1.1032 - val_accuracy: 0.4413\n",
            "Epoch 176/200\n",
            "68/84 [=======================>......] - ETA: 0s - loss: 1.0505 - accuracy: 0.4738\n",
            "Epoch 00176: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0505 - accuracy: 0.4690 - val_loss: 1.0968 - val_accuracy: 0.4413\n",
            "Epoch 177/200\n",
            "71/84 [========================>.....] - ETA: 0s - loss: 1.0503 - accuracy: 0.4745\n",
            "Epoch 00177: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0511 - accuracy: 0.4697 - val_loss: 1.1003 - val_accuracy: 0.4426\n",
            "Epoch 178/200\n",
            "77/84 [==========================>...] - ETA: 0s - loss: 1.0487 - accuracy: 0.4773\n",
            "Epoch 00178: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 4ms/step - loss: 1.0497 - accuracy: 0.4739 - val_loss: 1.0991 - val_accuracy: 0.4426\n",
            "Epoch 179/200\n",
            "72/84 [========================>.....] - ETA: 0s - loss: 1.0485 - accuracy: 0.4722\n",
            "Epoch 00179: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0514 - accuracy: 0.4682 - val_loss: 1.0992 - val_accuracy: 0.4439\n",
            "Epoch 180/200\n",
            "67/84 [======================>.......] - ETA: 0s - loss: 1.0473 - accuracy: 0.4720\n",
            "Epoch 00180: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0498 - accuracy: 0.4731 - val_loss: 1.0757 - val_accuracy: 0.4217\n",
            "Epoch 181/200\n",
            "83/84 [============================>.] - ETA: 0s - loss: 1.0503 - accuracy: 0.4733\n",
            "Epoch 00181: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0500 - accuracy: 0.4735 - val_loss: 1.0859 - val_accuracy: 0.4269\n",
            "Epoch 182/200\n",
            "68/84 [=======================>......] - ETA: 0s - loss: 1.0431 - accuracy: 0.4770\n",
            "Epoch 00182: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0501 - accuracy: 0.4709 - val_loss: 1.0694 - val_accuracy: 0.4204\n",
            "Epoch 183/200\n",
            "66/84 [======================>.......] - ETA: 0s - loss: 1.0550 - accuracy: 0.4645\n",
            "Epoch 00183: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0491 - accuracy: 0.4690 - val_loss: 1.0891 - val_accuracy: 0.4399\n",
            "Epoch 184/200\n",
            "68/84 [=======================>......] - ETA: 0s - loss: 1.0511 - accuracy: 0.4692\n",
            "Epoch 00184: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0520 - accuracy: 0.4701 - val_loss: 1.0825 - val_accuracy: 0.4282\n",
            "Epoch 185/200\n",
            "65/84 [======================>.......] - ETA: 0s - loss: 1.0542 - accuracy: 0.4611\n",
            "Epoch 00185: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0519 - accuracy: 0.4709 - val_loss: 1.0961 - val_accuracy: 0.4413\n",
            "Epoch 186/200\n",
            "65/84 [======================>.......] - ETA: 0s - loss: 1.0507 - accuracy: 0.4769\n",
            "Epoch 00186: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0510 - accuracy: 0.4735 - val_loss: 1.0843 - val_accuracy: 0.4269\n",
            "Epoch 187/200\n",
            "67/84 [======================>.......] - ETA: 0s - loss: 1.0517 - accuracy: 0.4715\n",
            "Epoch 00187: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0536 - accuracy: 0.4679 - val_loss: 1.0756 - val_accuracy: 0.4256\n",
            "Epoch 188/200\n",
            "67/84 [======================>.......] - ETA: 0s - loss: 1.0511 - accuracy: 0.4669\n",
            "Epoch 00188: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0498 - accuracy: 0.4720 - val_loss: 1.1081 - val_accuracy: 0.4413\n",
            "Epoch 189/200\n",
            "67/84 [======================>.......] - ETA: 0s - loss: 1.0505 - accuracy: 0.4669\n",
            "Epoch 00189: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0499 - accuracy: 0.4690 - val_loss: 1.0993 - val_accuracy: 0.4413\n",
            "Epoch 190/200\n",
            "65/84 [======================>.......] - ETA: 0s - loss: 1.0463 - accuracy: 0.4740\n",
            "Epoch 00190: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0492 - accuracy: 0.4656 - val_loss: 1.0792 - val_accuracy: 0.4256\n",
            "Epoch 191/200\n",
            "70/84 [========================>.....] - ETA: 0s - loss: 1.0494 - accuracy: 0.4696\n",
            "Epoch 00191: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0510 - accuracy: 0.4656 - val_loss: 1.0872 - val_accuracy: 0.4269\n",
            "Epoch 192/200\n",
            "67/84 [======================>.......] - ETA: 0s - loss: 1.0512 - accuracy: 0.4674\n",
            "Epoch 00192: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0537 - accuracy: 0.4694 - val_loss: 1.0953 - val_accuracy: 0.4399\n",
            "Epoch 193/200\n",
            "82/84 [============================>.] - ETA: 0s - loss: 1.0497 - accuracy: 0.4718\n",
            "Epoch 00193: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0497 - accuracy: 0.4713 - val_loss: 1.0769 - val_accuracy: 0.4217\n",
            "Epoch 194/200\n",
            "65/84 [======================>.......] - ETA: 0s - loss: 1.0472 - accuracy: 0.4745\n",
            "Epoch 00194: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0486 - accuracy: 0.4720 - val_loss: 1.0755 - val_accuracy: 0.4230\n",
            "Epoch 195/200\n",
            "71/84 [========================>.....] - ETA: 0s - loss: 1.0493 - accuracy: 0.4736\n",
            "Epoch 00195: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0494 - accuracy: 0.4679 - val_loss: 1.0875 - val_accuracy: 0.4295\n",
            "Epoch 196/200\n",
            "66/84 [======================>.......] - ETA: 0s - loss: 1.0464 - accuracy: 0.4754\n",
            "Epoch 00196: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0498 - accuracy: 0.4697 - val_loss: 1.0788 - val_accuracy: 0.4256\n",
            "Epoch 197/200\n",
            "71/84 [========================>.....] - ETA: 0s - loss: 1.0522 - accuracy: 0.4714\n",
            "Epoch 00197: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0521 - accuracy: 0.4694 - val_loss: 1.0863 - val_accuracy: 0.4282\n",
            "Epoch 198/200\n",
            "73/84 [=========================>....] - ETA: 0s - loss: 1.0492 - accuracy: 0.4679\n",
            "Epoch 00198: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0496 - accuracy: 0.4679 - val_loss: 1.1033 - val_accuracy: 0.4413\n",
            "Epoch 199/200\n",
            "69/84 [=======================>......] - ETA: 0s - loss: 1.0494 - accuracy: 0.4647\n",
            "Epoch 00199: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0498 - accuracy: 0.4667 - val_loss: 1.0832 - val_accuracy: 0.4269\n",
            "Epoch 200/200\n",
            "72/84 [========================>.....] - ETA: 0s - loss: 1.0509 - accuracy: 0.4714\n",
            "Epoch 00200: val_accuracy did not improve from 0.44517\n",
            "84/84 [==============================] - 0s 3ms/step - loss: 1.0510 - accuracy: 0.4709 - val_loss: 1.1006 - val_accuracy: 0.4413\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "sMKTDHyPtk9A",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 513
        },
        "outputId": "eea1fe33-6010-4688-887f-b339e55dee4c"
      },
      "source": [
        "\n",
        "acc = history.history['accuracy']\n",
        "val_acc = history.history['val_accuracy']\n",
        "\n",
        "loss = history.history['loss']\n",
        "val_loss = history.history['val_loss']\n",
        "\n",
        "\n",
        "plt.figure(figsize=(8, 8))\n",
        "plt.subplot(2, 1, 1)\n",
        "plt.plot(acc, label='Training Accuracy')\n",
        "plt.plot(val_acc, label='Validation Accuracy')\n",
        "plt.legend(loc='lower right')\n",
        "plt.ylabel('Accuracy')\n",
        "plt.title('Training and Validation Accuracy')\n",
        "\n",
        "plt.subplot(2, 1, 2)\n",
        "plt.plot(loss, label='Training Loss')\n",
        "plt.plot(val_loss, label='Validation Loss')\n",
        "plt.legend(loc='upper right')\n",
        "plt.ylabel('Cross Entropy')\n",
        "plt.title('Training and Validation Loss')\n",
        "plt.xlabel('epoch')\n",
        "plt.show()"
      ],
      "execution_count": 21,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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Jfc0YmZ079692a0uSvBxTJu1hBlvfpLsMEREWpySe/rZk89MCT6Ovy1dw/ziDckOQ0SkTSktLWXIkCEMGTKEAw44gJ49e9Yt79ixo9F958+fz7XXXtvkexx33HEtEutrr73GmWee2SLHSgZdg48ju307dlTXJDsMEZE2pXv37ixatAiAadOmkZeXx/e+97269VVVVbRv33BqKioqoqioqMn3mDdvXssEm+ZUg48jq307dlRVJzsMEZE2b9KkSVx11VWMGjWKG264gTfffJNjjz2WoUOHctxxx7F8+XJg1xr1tGnTmDx5MqNHj+awww7jnnvuqTteXl5e3fajR4/mvPPOY8CAAVx44YXUzqA6e/ZsBgwYwPDhw7n22mubVVOfMWMGgwcP5qijjuLGG28EoLq6mkmTJnHUUUcxePBgfvWrXwFwzz33MHDgQI4++mguuOCCvf9hNYNq8HEECV41eBGR1lBSUsK8efPIyMhg06ZNvP7667Rv356XX36ZH/7whzzzzDO77bNs2TJeffVVNm/eTP/+/ZkyZcput5G9/fbbLFmyhIMOOojjjz+ef/7znxQVFXHllVcyd+5c+vTpw8SJEyPHuXr1am688UYWLFhAfn4+p512Gs899xwHH3wwq1atYvHixQBs3LgRgDvvvJOVK1eSnZ1dV9ZalODjyMpQE72ItG0/fn4JS1dvatFjDjyoM1O/NqjZ+02YMIGMjAwAysrKuOSSS/jggw8wMyorKxvcZ+zYsWRnZ5Odnc1+++3HmjVr6NWr1y7bjBw5sq5syJAhFBcXk5eXx2GHHVZ3y9nEiROZPn16pDjfeustRo8eTY8ewfwuF154IXPnzuWWW25hxYoVXHPNNYwdO5bTTjsNgKOPPpoLL7yQs846i7POOqvZP5e9oSb6OFSDFxFpPbm5uXWvb7nlFsaMGcPixYt5/vnn494elp2dXfc6IyODqqqqPdqmJeTn5/POO+8wevRofvvb33LZZZcB8MILL3D11VezcOFCRowYkbD3b4hq8HFktW/H1u2t90GIiLS2Palpt4aysjJ69uwJwCOPPNLix+/fvz8rVqyguLiY3r1788QTT0Ted+TIkVx77bWsW7eO/Px8ZsyYwTXXXMO6devIysri3HPPpX///lx00UXU1NTw6aefMmbMGE444QRmzpzJli1b6Nq1a4ufU0OU4OPI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\n",
            "text/plain": [
              "<Figure size 576x576 with 2 Axes>"
            ]
          },
          "metadata": {
            "tags": [],
            "needs_background": "light"
          }
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "QSCyrnQGtZEx",
        "colab_type": "text"
      },
      "source": [
        "### Load Best Model to Perform Prediction"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "C3liEbGWsOn5",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "load_path = \"/content/drive/My Drive/Machine-Learning-Projects/cs231n-project/models/all_samples_dense_vae_classifier-caption-laugh-v4-la.h5\"\n",
        "model = tf.keras.models.load_model(load_path)\n",
        "\n",
        "# z_mean_train = np.load('/content/drive/My Drive/Machine-Learning-Projects/cs231n-project/notebooks/VAE/z_mean_train_5.pkl', allow_pickle=True)\n",
        "# z_mean_val = np.load('/content/drive/My Drive/Machine-Learning-Projects/cs231n-project/notebooks/VAE/z_mean_val_5.pkl', allow_pickle=True)\n",
        "\n",
        "y_pred = model.predict(z_mean_val)"
      ],
      "execution_count": 23,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "jS2xNYs2tbO1",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 745
        },
        "outputId": "f31fd45e-d02a-4e33-8036-e52f08395f46"
      },
      "source": [
        "y_valid_labels = y_valid_np + 1\n",
        "print(y_valid_labels)\n",
        "\n",
        "y_pred_labels = np.argmax(y_pred, axis=1) + 1\n",
        "print(y_pred_labels)"
      ],
      "execution_count": 25,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "[3 3 3 2 2 3 3 3 3 3 3 3 3 3 3 3 2 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1\n",
            " 2 3 3 1 1 2 1 2 1 2 1 1 1 1 1 3 3 3 3 3 2 3 3 2 2 3 3 3 3 3 3 3 2 2 2 3 2\n",
            " 2 2 2 2 2 2 2 2 2 2 1 2 3 3 3 3 1 1 1 1 1 1 1 1 2 2 3 2 1 3 3 2 3 3 3 3 2\n",
            " 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 1 1 1 1 1 1 1 1 1 1 1 1 2 2 1 1\n",
            " 1 1 1 1 2 1 1 1 2 2 2 2 2 1 1 2 1 1 1 1 2 2 2 2 1 1 3 1 2 2 2 2 2 2 2 2 2\n",
            " 2 2 2 2 2 2 1 2 2 2 2 1 1 1 2 2 1 1 2 1 2 2 2 2 2 2 1 2 1 1 1 1 2 1 2 1 1\n",
            " 3 1 2 1 1 1 1 1 1 1 2 2 1 1 1 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 2 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 2 2 2 1 1 1 1 2 2 2 2 2 2 2 2\n",
            " 2 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 1 1 1 2 1 2 2 2\n",
            " 2 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n",
            " 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 1 1 3 3 3 3 3 3 3 3 3 3 3\n",
            " 3 3 3 3 3 3 3 3 3 3 2 1 2 2 2 1 2 2 2 1 2 2 2 2 1 1 1 1 1 1 1 2 3 3 2 3 2\n",
            " 3 3 3 3 3 2 3 3 3 3 1 1 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 2 3\n",
            " 3 2 3 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 2 2 3 3 3 3 3 2 3 3 2 3 3 3 3 3\n",
            " 3 1 3 2 3 3 2 2 2 2 2 1 2 1 2 1 3 3 1 2 1 1 1 2 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 2 3 1 1 1 2 1 2 1 1 1 1 1 1 1 1 1 1 2 2 1 2 2\n",
            " 2 2 2 2 2 1 2 1 1 2 2 1 1 1 1 1 2 1 1 1 1 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 1\n",
            " 1 1 2 2 2 2 2 2 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n",
            " 1 1 1 1 1 2 1 1 1 2 1 2 2 2 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 2 2 2 2 2 2 2 2\n",
            " 2 2 2 2 1 2 2 2 2 1 1 1 1 1 1 3 3 3 1 3 3 3 3 1 3 3 3 1 3 1 3 2 3 1 3 3 3\n",
            " 3 1 1 1 1 1 1 1 3 3 1 1 1 1 1 1 1 1 1 3 3 3 3 2 3 3]\n",
            "[3 3 3 2 2 2 3 3 3 3 3 3 3 3 3 3 2 2 3 3 2 2 3 3 3 3 2 2 3 2 2 3 3 2 2 2 2\n",
            " 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 2 2 3 3 3 3 2 3 3 3 3 3 3 2 3 3 3 3 3 2\n",
            " 2 2 3 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 2 3 3 2 2 2 2 2 2 2 2 2 2 3 3 2 3\n",
            " 3 2 3 3 2 2 2 3 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 2 3 3 3\n",
            " 3 3 3 3 3 3 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 2 3 3 3 3 3 2 2 2 3 3 3 3 3 3\n",
            " 3 3 3 3 3 3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 2 2 2 2 2 2 2 2 2 2 2 2 3 2\n",
            " 3 2 2 3 3 3 3 3 2 3 3 3 2 3 3 3 3 3 3 2 3 3 3 3 3 3 3 3 3 3 2 3 3 3 3 3 3\n",
            " 3 3 3 3 2 3 3 2 3 3 3 3 3 3 3 2 3 2 3 3 3 3 3 2 3 3 3 3 3 2 3 3 2 2 2 2 2\n",
            " 3 2 3 2 3 3 2 2 2 2 3 2 2 2 2 2 3 2 2 2 2 2 2 2 2 2 2 3 2 2 2 2 2 3 2 2 2\n",
            " 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n",
            " 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3\n",
            " 3 3 3 3 3 3 3 3 3 3 3 2 2 2 2 3 2 2 2 2 3 2 2 2 3 3 2 2 2 2 3 3 3 2 2 3 3\n",
            " 3 3 3 3 3 3 3 3 3 3 3 2 3 3 3 3 3 2 3 2 2 3 2 3 2 3 3 2 3 3 2 3 3 2 3 2 3\n",
            " 2 3 2 2 2 3 2 2 3 3 3 2 3 3 3 2 2 2 3 2 3 3 3 3 3 3 3 3 3 3 2 3 3 3 3 2 3\n",
            " 3 2 3 3 2 2 3 3 3 3 3 3 3 3 3 3 2 3 2 3 3 2 3 2 2 3 3 3 3 3 2 2 3 3 2 3 3\n",
            " 3 3 2 2 2 2 2 2 3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n",
            " 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n",
            " 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3\n",
            " 3 3 3 3 3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3\n",
            " 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3\n",
            " 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 2 3 3]\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "idvExeijtezQ",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 625
        },
        "outputId": "220e4b58-a8ef-4208-d47a-28d7c3ef377f"
      },
      "source": [
        "from sklearn import metrics \n",
        "import pandas as pd\n",
        "import seaborn as sn\n",
        "cm=metrics.confusion_matrix(y_valid_labels,y_pred_labels)\n",
        "import matplotlib.pyplot as plt\n",
        "\n",
        "classes=['Pos' , 'Neu' , 'Neg'] \n",
        "y_pred_final , y_true_final = y_pred_labels - 1 , y_valid_labels - 1\n",
        "con_mat = tensorflow.math.confusion_matrix(labels=y_true_final, predictions=y_pred_final).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(\"FC Voting Confusion Matrix with Scene & Audio\")\n",
        "sn.heatmap(con_mat_df, annot=True,cmap=plt.cm.Blues)\n",
        "\n",
        "\n",
        "accuracy = (y_pred_labels == y_valid_labels).mean()\n",
        "print(f\"Accuracy: {accuracy}\")"
      ],
      "execution_count": 26,
      "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.4451697127937337\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": "8gs-_n1xCkD7",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 245
        },
        "outputId": "ee76d9e4-dfc9-43f6-e8dc-68fdb51d1c77"
      },
      "source": [
        "from sklearn.metrics import classification_report\n",
        "print(classification_report(y_true_final, y_pred_final, target_names=classes, digits=3))"
      ],
      "execution_count": 27,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "/usr/local/lib/python3.6/dist-packages/sklearn/metrics/_classification.py:1272: UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.\n",
            "  _warn_prf(average, modifier, msg_start, len(result))\n"
          ],
          "name": "stderr"
        },
        {
          "output_type": "stream",
          "text": [
            "              precision    recall  f1-score   support\n",
            "\n",
            "         Pos      0.000     0.000     0.000       302\n",
            "         Neu      0.535     0.711     0.610       280\n",
            "         Neg      0.360     0.772     0.491       184\n",
            "\n",
            "    accuracy                          0.445       766\n",
            "   macro avg      0.298     0.494     0.367       766\n",
            "weighted avg      0.282     0.445     0.341       766\n",
            "\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "4t8l6KxNj3bs",
        "colab_type": "text"
      },
      "source": [
        "## t-SNE of the Validation Encodings"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "fJHdvqfkeh2v",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 258
        },
        "outputId": "8845bb5c-f13c-48ef-b605-7c97ffe2a66d"
      },
      "source": [
        "from sklearn.manifold import TSNE\n",
        "import matplotlib.pyplot as plt\n",
        "\n",
        "# z_mean_val = np.load('/content/drive/My Drive/Machine-Learning-Projects/cs231n-project/notebooks/VAE/z_mean_val_5.pkl' , allow_pickle=True)\n",
        "tsne = TSNE()\n",
        "X_valid_2D = tsne.fit_transform(z_mean_val)\n",
        "\n",
        "plt.scatter(X_valid_2D[:, 0], X_valid_2D[:, 1], c=y_valid_np, s=3)\n",
        "plt.colorbar()\n",
        "plt.axis('off')\n",
        "plt.show()"
      ],
      "execution_count": 30,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\n",
            "text/plain": [
              "<Figure size 432x288 with 2 Axes>"
            ]
          },
          "metadata": {
            "tags": [],
            "needs_background": "light"
          }
        }
      ]
    }
  ]
}