diff --git "a/docs/notebooks/ex11c - lstm on IMDB.ipynb" "b/docs/notebooks/ex11c - lstm on IMDB.ipynb" new file mode 100644--- /dev/null +++ "b/docs/notebooks/ex11c - lstm on IMDB.ipynb" @@ -0,0 +1,1505 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "provenance": [], + "machine_shape": "hm" + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3" + }, + "accelerator": "GPU", + "gpuClass": "standard" + }, + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "WMucfLUS1yhH" + }, + "source": [ + "# What is this?\n", + "\n", + "This Jupyter Notebook contains Python code for building a LSTM Recurrent Neural Network that gives 87-88% accuracy on the IMDB Movie Review Sentiment Analysis Dataset.\n", + "\n", + "

\n", + " \n", + "

\n", + "\n", + "More information is given on [this blogpost](https://www.bouvet.no/bouvet-deler/explaining-recurrent-neural-networks).\n", + "\n", + "We investigate the IMDB Movie Dataset.\n", + "\n", + "

\n", + " \n", + "

\n", + "\n", + "This code is supplied without license, warranty or support. Feel free to do with it what you will." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "wFUKGe4x3ala" + }, + "source": [ + "## Built for Google Collaboratory\n", + "\n", + "Train your network more quickly in Google Collaboratory. From the **Runtime** menu select **Change Runtime** Type and choose \"GPU\"!\n", + "\n", + "Don't forget to select **Runtime** -> **Restart runtime** to put your changes into effect." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "WP1VrbVp3sVu" + }, + "source": [ + "## Setting up\n", + "\n", + "When running this for the first time you may get a warning telling you to restart the Runtime. You can ignore this, but feel free to select \"Runtime->Restart Runtime\" from the overhead menu if you encounter problems." + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "2e3txwbh3q76", + "outputId": "fe815631-eaec-4d80-838d-a27414a20c0a", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "source": [ + "# keras.datasets.imdb is broken in TensorFlow 1.13 and 1.14 due to numpy 1.16.3\n", + "!pip install numpy==1.16.2\n", + "\n", + "# All the imports!\n", + "import tensorflow as tf\n", + "import numpy as np\n", + "from tensorflow.keras.preprocessing import sequence\n", + "from numpy import array\n", + "\n", + "# Supress deprecation warnings\n", + "import logging\n", + "logging.getLogger('tensorflow').disabled = True\n" + ], + "execution_count": 1, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Collecting numpy==1.16.2\n", + " Downloading numpy-1.16.2.zip (5.1 MB)\n", + "\u001b[?25l \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m0.0/5.1 MB\u001b[0m \u001b[31m?\u001b[0m eta \u001b[36m-:--:--\u001b[0m\r\u001b[2K \u001b[91m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[90m╺\u001b[0m\u001b[90m━━━━━━\u001b[0m \u001b[32m4.2/5.1 MB\u001b[0m \u001b[31m137.6 MB/s\u001b[0m eta \u001b[36m0:00:01\u001b[0m\r\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m5.1/5.1 MB\u001b[0m \u001b[31m79.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25h Preparing metadata (setup.py) ... \u001b[?25l\u001b[?25hdone\n", + "Building wheels for collected packages: numpy\n", + " \u001b[1;31merror\u001b[0m: \u001b[1msubprocess-exited-with-error\u001b[0m\n", + " \n", + " \u001b[31m×\u001b[0m \u001b[32mpython setup.py bdist_wheel\u001b[0m did not run successfully.\n", + " \u001b[31m│\u001b[0m exit code: \u001b[1;36m1\u001b[0m\n", + " \u001b[31m╰─>\u001b[0m See above for output.\n", + " \n", + " \u001b[1;35mnote\u001b[0m: This error originates from a subprocess, and is likely not a problem with pip.\n", + " Building wheel for numpy (setup.py) ... \u001b[?25lerror\n", + "\u001b[31m ERROR: Failed building wheel for numpy\u001b[0m\u001b[31m\n", + "\u001b[0m\u001b[?25h Running setup.py clean for numpy\n", + " \u001b[1;31merror\u001b[0m: \u001b[1msubprocess-exited-with-error\u001b[0m\n", + " \n", + " \u001b[31m×\u001b[0m \u001b[32mpython setup.py clean\u001b[0m did not run successfully.\n", + " \u001b[31m│\u001b[0m exit code: \u001b[1;36m1\u001b[0m\n", + " \u001b[31m╰─>\u001b[0m See above for output.\n", + " \n", + " \u001b[1;35mnote\u001b[0m: This error originates from a subprocess, and is likely not a problem with pip.\n", + "\u001b[31m ERROR: Failed cleaning build dir for numpy\u001b[0m\u001b[31m\n", + "\u001b[0mFailed to build numpy\n", + "\u001b[31mERROR: Could not build wheels for numpy, which is required to install pyproject.toml-based projects\u001b[0m\u001b[31m\n", + "\u001b[0m" + ] + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "### Vocabulary Size" + ], + "metadata": { + "id": "nGS3DM56wYhN" + } + }, + { + "cell_type": "code", + "source": [ + "# Fetch \"IMDB Movie Review\" data, constraining our reviews to\n", + "# the 10000 most commonly used words\n", + "vocab_size = 10000\n", + "(x_train, y_train), (x_test, y_test) = tf.keras.datasets.imdb.load_data(num_words=vocab_size)\n", + "\n", + "# Map for readable classnames\n", + "class_names = [\"Negative\", \"Positive\"]" + ], + "metadata": { + "id": "ProT4bJrwXZP", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "5a9f0147-a19d-4830-a033-3c32965b79e1" + }, + "execution_count": 2, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/imdb.npz\n", + "17464789/17464789 [==============================] - 2s 0us/step\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "hdyHL8FF0JJy" + }, + "source": [ + "## Create map for converting IMDB dataset to readable reviews\n", + "\n", + "Reviews in the IMDB dataset have been encoded as a sequence of integers. Luckily the dataset also\n", + "contains an index for converting the reviews back into human readable form." + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "E05AweFu0Imt", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "a43cb15f-d97f-43e3-c6af-98d759e514c4" + }, + "source": [ + "# Get the word index from the dataset\n", + "word_index = tf.keras.datasets.imdb.get_word_index()\n", + "\n", + "# Ensure that \"special\" words are mapped into human readable terms\n", + "word_index = {k:(v+3) for k,v in word_index.items()}\n", + "word_index[\"\"] = 0\n", + "word_index[\"\"] = 1\n", + "word_index[\"\"] = 2\n", + "word_index[\"\"] = 3\n", + "\n", + "# Perform reverse word lookup and make it callable\n", + "reverse_word_index = dict([(value, key) for (key, value) in word_index.items()])\n", + "def decode_review(text):\n", + " return ' '.join([reverse_word_index.get(i, '?') for i in text])" + ], + "execution_count": 3, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/imdb_word_index.json\n", + "1641221/1641221 [==============================] - 1s 1us/step\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "# IMDB: Data Processing" + ], + "metadata": { + "id": "Up61SKxDNiMD" + } + }, + { + "cell_type": "markdown", + "metadata": { + "id": "fFXK-g6G81sC" + }, + "source": [ + "## Data Insight\n", + "\n", + "Here we take a closer look at our data. How many words do our reviews contain?\n", + "\n", + "And what do our review look like in machine and human readable form?\n" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "yD1qHVBn81Y_", + "outputId": "8f122f34-98df-485e-dd6d-2c9ea49e9ad9", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "source": [ + "# Concatonate test and training datasets\n", + "allreviews = np.concatenate((x_train, x_test), axis=0)\n", + "\n", + "# Review lengths across test and training whole datasets\n", + "print(\"Maximum review length: {}\".format(len(max((allreviews), key=len))))\n", + "print(\"Minimum review length: {}\".format(len(min((allreviews), key=len))))\n", + "result = [len(x) for x in allreviews]\n", + "print(\"Mean review length: {}\".format(np.mean(result)))\n", + "\n", + "# Print a review and it's class as stored in the dataset. Replace the number\n", + "# to select a different review.\n", + "print(\"\")\n", + "print(\"Machine readable Review\")\n", + "print(\" Review Text: \" + str(x_train[60]))\n", + "print(\" Review Sentiment: \" + str(y_train[60]))\n", + "\n", + "# Print a review and it's class in human readable format. Replace the number\n", + "# to select a different review.\n", + "print(\"\")\n", + "print(\"Human Readable Review\")\n", + "print(\" Review Text: \" + decode_review(x_train[60]))\n", + "print(\" Review Sentiment: \" + class_names[y_train[60]])" + ], + "execution_count": 4, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Maximum review length: 2494\n", + "Minimum review length: 7\n", + "Mean review length: 234.75892\n", + "\n", + "Machine readable Review\n", + " Review Text: [1, 13, 219, 14, 33, 4, 2, 22, 1413, 12, 16, 373, 175, 2711, 1115, 1026, 430, 939, 16, 23, 2444, 25, 43, 697, 89, 12, 16, 170, 8, 130, 262, 19, 32, 4, 665, 7, 4, 2, 322, 5, 4, 1520, 7, 4, 86, 250, 10, 10, 4, 249, 173, 16, 4, 3891, 6, 19, 4, 167, 564, 5, 564, 1325, 36, 805, 8, 216, 638, 17, 2, 21, 25, 100, 376, 507, 4, 2110, 15, 79, 125, 23, 567, 13, 2134, 233, 36, 4852, 2, 5, 81, 1672, 10, 10, 92, 437, 129, 58, 13, 69, 8, 401, 61, 1432, 39, 1286, 46, 7, 12]\n", + " Review Sentiment: 0\n", + "\n", + "Human Readable Review\n", + " Review Text: i saw this at the film festival it was awful every clichéd violent rich boy fantasy was on display you just knew how it was going to end especially with all the shots of the wife and the rape of the first girl br br the worst part was the q a with the director writer and writer producer they tried to come across as but you could tell they're the types that get off on violence i bet anything they frequent and do drugs br br don't waste your time i had to keep my boyfriend from walking out of it\n", + " Review Sentiment: Negative\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "mF-Votm66zD5" + }, + "source": [ + "## Pre-processing Data\n", + "\n", + "We need to make sure that our reviews are of a uniform length. This is for the LSTM's parameters.\n", + "\n", + "

\n", + "\n", + "Another way is to use one-hot encode technique. The sentence \"I love cats\" could have a dictionary of [cats, i, love]. Using this dictionary, we can create the following transformation\n", + "$$\n", + "\\begin{bmatrix}\n", + "\\text{cats} \\\\\n", + "\\text{i} \\\\\n", + "\\text{love}\\\\\n", + "\\end{bmatrix}\n", + "→\n", + "\\begin{bmatrix}\n", + "\\text{i} & \\text{love} & \\text{cats} \\\\\n", + "0 & 0 & 1 \\\\\n", + "1 & 0 & 0 \\\\\n", + "0 & 1 & 0 \\\\\n", + "\\end{bmatrix}\n", + "$$\n", + "\n", + "Some reviews will need to be truncated, while others need to be padded." + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "uNtJTLJA6gaT", + "outputId": "72424605-2c3d-4f77-f6b8-57f096c211a0", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "source": [ + "# The length of reviews\n", + "review_length = 300\n", + "\n", + "# Padding / truncated our reviews\n", + "x_train = sequence.pad_sequences(x_train, maxlen = review_length)\n", + "x_test = sequence.pad_sequences(x_test, maxlen = review_length)\n", + "\n", + "# Check the size of our datasets. Review data for both test and training should\n", + "# contain 25000 reviews of 500 integers. Class data should contain 25000 values,\n", + "# one for each review. Class values are 0 or 1, indicating a negative\n", + "# or positive review.\n", + "print(\"Shape Training Review Data: \" + str(x_train.shape))\n", + "print(\"Shape Training Class Data: \" + str(y_train.shape))\n", + "print(\"Shape Test Review Data: \" + str(x_test.shape))\n", + "print(\"Shape Test Class Data: \" + str(y_test.shape))\n", + "\n", + "# Note padding is added to start of review, not the end\n", + "print(\"\")\n", + "print(\"Human Readable Review Text (post padding): \" + decode_review(x_train[60]))" + ], + "execution_count": 5, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Shape Training Review Data: (25000, 300)\n", + "Shape Training Class Data: (25000,)\n", + "Shape Test Review Data: (25000, 300)\n", + "Shape Test Class Data: (25000,)\n", + "\n", + "Human Readable Review Text (post padding): i saw this at the film festival it was awful every clichéd violent rich boy fantasy was on display you just knew how it was going to end especially with all the shots of the wife and the rape of the first girl br br the worst part was the q a with the director writer and writer producer they tried to come across as but you could tell they're the types that get off on violence i bet anything they frequent and do drugs br br don't waste your time i had to keep my boyfriend from walking out of it\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "# Model Architecture: Theory and Graphs" + ], + "metadata": { + "id": "0WNLCfM8Nk88" + } + }, + { + "cell_type": "markdown", + "metadata": { + "id": "BfOdV_VCCFee" + }, + "source": [ + "## Create and build LSTM Recurrent Neural Network\n", + "\n", + "Given data $X$ and $Y$, we want to feed information forward into a time stamp. Then we form some belief and we make some initial predictions. We investigate our beliefs by looking at the loss function of the initial guesses and the real value. We update our model according to error we observed." + ] + }, + { + "cell_type": "markdown", + "source": [ + "### Architecture: Feed-forward\n", + "\n", + "Consider data with time stamp\n", + "$$X_{\\langle 1 \\rangle} \\rightarrow X_{\\langle 2 \\rangle} \\rightarrow \\dots \\rightarrow X_{\\langle T \\rangle}$$\n", + "and feed-forward architecture pass information through exactly as the following:\n", + "$$\n", + "\\text{Information in:} \\rightarrow\n", + "\\begin{matrix}\n", + "\\{Y_{\\langle 1 \\rangle}, ..., Y_{\\langle k \\rangle}\\} & \\{Y_{\\langle 1 \\rangle}, ..., Y_{\\langle k \\rangle}\\} & & \\{Y_{\\langle 1 \\rangle}, ..., Y_{\\langle k \\rangle}\\} \\\\\n", + "\\updownarrow & \\updownarrow & & \\updownarrow \\\\\n", + "\\{\\hat{Y}_{\\langle 1 \\rangle}, ..., \\hat{Y}_{\\langle k \\rangle}\\} & \\{\\hat{Y}_{\\langle 1 \\rangle}, ..., \\hat{Y}_{\\langle k \\rangle}\\} & & \\{\\hat{Y}_{\\langle 1 \\rangle}, ..., \\hat{Y}_{\\langle k \\rangle}\\} \\\\\n", + "\\uparrow & \\uparrow & & \\uparrow \\\\\n", + "a_{\\langle 1 \\rangle} \\rightarrow & a_{\\langle 2 \\rangle} \\rightarrow & \\dots \\rightarrow & a_{\\langle T \\rangle} \\\\\n", + "\\uparrow & \\uparrow & & \\uparrow \\\\\n", + "X_{\\langle 1 \\rangle} & X_{\\langle 2 \\rangle} & & X_{\\langle T \\rangle} \\\\\n", + "\\uparrow & \\uparrow & & \\uparrow \\\\\n", + "w_{\\langle 1 \\rangle}, b_{0, \\langle 1 \\rangle} & w_{\\langle 2 \\rangle}, b_{0, \\langle 2 \\rangle} & & w_{\\langle T \\rangle}, b_{0, \\langle T \\rangle} \\\\\n", + "\\end{matrix}\n", + "\\rightarrow\n", + "\\text{Form beliefs about } Y_{\\langle T \\rangle}\n", + "$$\n", + "while the educated guesses $\\hat{Y}_{\\langle T \\rangle}$ are our beliefs about real $Y$ at time stamp $T$.\n", + "\n", + "To formally write out the forward propagation, the weights are implemented with the input features. There is a linear transformation and a non-linear transformation (or activation) inside of a hidden neuron. The neuron can be written by taking the following form\n", + "$$\n", + "\\begin{array}{}\n", + "a_{\\langle t \\rangle} &=& h(z), \\text{ where } z := X_{\\langle t \\rangle} \\cdot w_{\\langle t \\rangle} + b_{\\langle t \\rangle} \\\\\n", + "&=& h(X_{\\langle t \\rangle} \\cdot w_{\\langle t \\rangle} + b_{\\langle t \\rangle}), \\text{ choose sigmoid} \\\\\n", + "&=& 1/(1+\\exp(-(X_{\\langle t \\rangle} \\cdot w_{\\langle t \\rangle} + b_{\\langle t \\rangle})))\n", + "\\end{array}\n", + "$$" + ], + "metadata": { + "id": "IetEwhVEKDgc" + } + }, + { + "cell_type": "markdown", + "source": [ + "### Architecture: Feed-backward\n", + "\n", + "Let us clearly define our loss function to make sure we have a proper grip of our mistakes.\n", + "$$\\mathcal{L} (y, \\hat{y}) = \\sum_t \\sum_k L(\\hat{y}_{\\langle t,k \\rangle} - y_{\\langle t,k \\rangle})^2$$\n", + "and we can compute the gradient (notice $a$ is the activation function)\n", + "$$\\triangledown \\mathcal{L} (y, \\hat{y}) = \\frac{\\partial }{\\partial W} \\frac{\\partial }{\\partial a} \\mathcal{L} (y, \\hat{y})$$\n", + "where $W = \\{\\vec{w}, b\\}$ and then with respect with parameters $\\vec{w}$ and $b$ where $b$ is the bias (you do not have to have it),\n", + "$$\\frac{\\partial}{\\partial \\vec{w}} \\frac{\\partial}{\\partial a} \\mathcal{L} (y, \\hat{y}), \\frac{\\partial}{\\partial b} \\frac{\\partial}{\\partial a} \\mathcal{L} (y, \\hat{y})$$\n", + "and now with perspective of where we make our mistakes according to our parameters we can go backward\n", + "$$\n", + "\\text{Information in:} \\leftarrow\n", + "\\underbrace{\n", + "\\begin{matrix}\n", + "\\{Y_{\\langle 1 \\rangle}, ..., Y_{\\langle k \\rangle}\\} & \\{Y_{\\langle 1 \\rangle}, ..., Y_{\\langle k \\rangle}\\} & & \\{Y_{\\langle 1 \\rangle}, ..., Y_{\\langle k \\rangle}\\} \\\\\n", + "\\updownarrow & \\updownarrow & & \\updownarrow \\\\\n", + "\\{\\hat{Y}_{\\langle 1 \\rangle}, ..., \\hat{Y}_{\\langle k \\rangle}\\} & \\{\\hat{Y}_{\\langle 1 \\rangle}, ..., \\hat{Y}_{\\langle k \\rangle}\\} & & \\{\\hat{Y}_{\\langle 1 \\rangle}, ..., \\hat{Y}_{\\langle k \\rangle}\\} \\\\\n", + "\\downarrow & \\downarrow & & \\downarrow \\\\\n", + "a_{\\langle 1 \\rangle} \\leftarrow & a_{\\langle 2 \\rangle} \\leftarrow & \\dots \\leftarrow & a_{\\langle T \\rangle} \\\\\n", + "\\downarrow & \\downarrow & & \\downarrow \\\\\n", + "X_{\\langle 1 \\rangle} & X_{\\langle 2 \\rangle} & & X_{\\langle T \\rangle} \\\\\n", + "\\downarrow & \\downarrow & & \\downarrow \\\\\n", + "w'_{\\langle 1 \\rangle}, b'_{0, \\langle 1 \\rangle} & w'_{\\langle 2 \\rangle}, b'_{0, \\langle 2 \\rangle} & & w'_{\\langle T \\rangle}, b'_{0, \\langle T \\rangle} \\\\\n", + "\\end{matrix}}_{\\text{Update: } w, b \\text{ with } w', b'}\n", + "\\leftarrow\n", + "\\text{Total Loss: } \\mathcal{L} (\\hat{y}, y)\n", + "$$\n", + "and the *update* action in the above architecture is dependent on your optimizer specified in the algorithm. To formally describe the gradient descent algorithm, we can write, for each step $s$, update weights to be the following\n", + "$$\n", + "\\begin{array}{}\n", + "W_s &=& W_{s-1} - \\eta \\cdot \\nabla \\mathcal{L}(y, \\hat{y} \\\\\n", + "&=& \\{\\vec{w}_{s-1}, b_{s-1}\\} - \\eta \\cdot \\{\\frac{\\partial}{\\partial \\vec{w}} \\frac{\\partial}{\\partial a} \\mathcal{L} (y, \\hat{y}), \\frac{\\partial}{\\partial b} \\frac{\\partial}{\\partial a} \\mathcal{L} (y, \\hat{y})\\} \\\\\n", + "\\end{array}\n", + "$$\n", + "\n", + "Andrew Ng has a [video](https://www.coursera.org/lecture/nlp-sequence-models/backpropagation-through-time-bc7ED) on Coursera explaining Backward Propagation Through Time." + ], + "metadata": { + "id": "uC6j45XYKFub" + } + }, + { + "cell_type": "markdown", + "source": [ + "## Embedding\n", + "\n", + "Embedding layer turns positive integers (indexes) into dense vectors of fixed size.\n", + "\n", + "```\n", + "eg. [[4], [20]] -> [[0.25, 0.1], [0.6, -0.2]]\n", + "```\n", + "\n", + "

\n" + ], + "metadata": { + "id": "V04BSbvVIyoo" + } + }, + { + "cell_type": "code", + "source": [ + "# We begin by defining the a empty stack. We'll use this for building our\n", + "# network, later by layer.\n", + "model = tf.keras.models.Sequential()\n", + "\n", + "# The Embedding Layer provides a spatial mapping (or Word Embedding) of all the\n", + "# individual words in our training set. Words close to one another share context\n", + "# and or meaning. This spatial mapping is learning during the training process.\n", + "model.add(\n", + " tf.keras.layers.Embedding(\n", + " input_dim = vocab_size, # The size of our vocabulary\n", + " output_dim = 64, # Dimensions to which each words shall be mapped\n", + " input_length = review_length # Length of input sequences\n", + " )\n", + ")" + ], + "metadata": { + "id": "tChiwU_qsFjQ" + }, + "execution_count": 6, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "Recall the dimension of the input data." + ], + "metadata": { + "id": "_UGfpjrps0pg" + } + }, + { + "cell_type": "code", + "source": [ + "# display shape\n", + "x_train.shape" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "npc4ULuMsREY", + "outputId": "45715af9-34b5-469a-e199-3e2a9ba1ed8f" + }, + "execution_count": 7, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "(25000, 300)" + ] + }, + "metadata": {}, + "execution_count": 7 + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "These are the arguments required. Vocabulary size is define above. Review length is the length of the features, which is also defined above. The output dimension is a choice by the scientist." + ], + "metadata": { + "id": "tU8svnRDs4YI" + } + }, + { + "cell_type": "code", + "source": [ + "# recall args\n", + "vocab_size, review_length" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "iGhMEhSRsgCo", + "outputId": "ce6cd43c-09fb-4731-f4da-42b7b28b566c" + }, + "execution_count": 8, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "(10000, 300)" + ] + }, + "metadata": {}, + "execution_count": 8 + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "We can generate output without training anything. This will not be a trained model. However, the dimension should match and the *.predict()* function should work." + ], + "metadata": { + "id": "HkiFzML4te7P" + } + }, + { + "cell_type": "code", + "source": [ + "# test\n", + "some_fake_test_ = model.predict(x_train)\n", + "some_fake_test_.shape" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "o1z_E21gsKmv", + "outputId": "8f0fa619-9adb-4b80-af85-a3a119c18904" + }, + "execution_count": 9, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "782/782 [==============================] - 1s 1ms/step\n" + ] + }, + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "(25000, 300, 64)" + ] + }, + "metadata": {}, + "execution_count": 9 + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "## Dropout\n", + "\n", + "Simply put, dropout refers to ignoring units (i.e. neurons) during the training phase of certain set of neurons which is chosen at random. By “ignoring”, I mean these units are not considered during a particular forward or backward pass.\n", + "\n", + "Given that we know a bit about dropout, a question arises — why do we need dropout at all? Why do we need to literally shut-down parts of a neural networks?\n", + "\n", + "The answer to these questions is “to prevent over-fitting”.\n", + "\n", + "A fully connected layer occupies most of the parameters, and hence, neurons develop co-dependency amongst each other during training which curbs the individual power of each neuron leading to over-fitting of training data.\n", + "\n", + "

\n", + "\n", + "More see this [blog](https://medium.com/@amarbudhiraja/https-medium-com-amarbudhiraja-learning-less-to-learn-better-dropout-in-deep-machine-learning-74334da4bfc5)." + ], + "metadata": { + "id": "v4fRjOmgI1IW" + } + }, + { + "cell_type": "markdown", + "source": [ + "## LSTM\n", + "\n", + "All recurrent neural networks have the form of a chain of repeating modules of neural network. In standard RNNs, this repeating module will have a very simple structure, such as a single tanh layer.\n", + "\n", + "

\n", + "\n", + "\n", + "LSTMs also have this chain like structure, but the repeating module has a different structure. Instead of having a single neural network layer, there are four, interacting in a very special way.\n", + "\n", + "

\n", + "\n", + "The cell state is kind of like a conveyor belt. It runs straight down the entire chain, with only some minor linear interactions. It’s very easy for information to just flow along it unchanged.\n", + "\n", + "

\n", + "\n", + "Gates are a way to optionally let information through. They are composed out of a sigmoid neural net layer and a pointwise multiplication operation.\n", + "\n", + "

\n", + "\n", + "The first step in our LSTM is to decide what information we’re going to throw away from the cell state. This decision is made by a sigmoid layer called the “forget gate layer.”\n", + "\n", + "

\n", + "\n", + "The next step is to decide what new information we’re going to store in the cell state. This has two parts. First, a sigmoid layer called the “input gate layer” decides which values we’ll update. Next, a tanh layer creates a vector of new candidate values that could be added to the state.\n", + "\n", + "

\n", + "\n", + "It’s now time to update the old cell state and into the new cell state. The previous steps already decided what to do, we just need to actually do it.\n", + "\n", + "

\n", + "\n", + "Finally, we need to decide what we’re going to output. This output will be based on our cell state, but will be a filtered version. First, we run a sigmoid layer which decides what parts of the cell state we’re going to output. Then, we put the cell state through tanh (to push the values to be between −1 and 1) and multiply it by the output of the sigmoid gate, so that we only output the parts we decided to.\n", + "\n", + "

\n", + "\n", + "More can be read in this [blog](https://colah.github.io/posts/2015-08-Understanding-LSTMs/).\n", + "\n", + "\n" + ], + "metadata": { + "id": "OT0UMFnmI2UV" + } + }, + { + "cell_type": "markdown", + "source": [ + "# Application: Build, Train, and Evaluate" + ], + "metadata": { + "id": "UF8oXNFCNqs7" + } + }, + { + "cell_type": "markdown", + "source": [ + "## Build the Model: Simple RNN\n", + "\n", + "Build a single layer Recurrent Neural Network." + ], + "metadata": { + "id": "IJxut6sivQg2" + } + }, + { + "cell_type": "code", + "source": [ + "# We begin by defining the a empty stack. We'll use this for building our\n", + "# network, later by layer.\n", + "model = tf.keras.models.Sequential()\n", + "\n", + "# The Embedding Layer provides a spatial mapping (or Word Embedding) of all the\n", + "# individual words in our training set. Words close to one another share context\n", + "# and or meaning. This spatial mapping is learning during the training process.\n", + "model.add(\n", + " tf.keras.layers.Embedding(\n", + " input_dim = vocab_size, # The size of our vocabulary\n", + " output_dim = 16, # Dimensions to which each words shall be mapped\n", + " input_length = review_length # Length of input sequences\n", + " )\n", + ")\n", + "\n", + "# Fully-connected RNN where the output is to be fed back to input.\n", + "model.add(\n", + " tf.keras.layers.SimpleRNN(4) # unit: Positive integer, dimensionality of the output space\n", + ")\n", + "\n", + "# All LSTM units are connected to a single node in the dense layer. A sigmoid\n", + "# activation function determines the output from this node - a value\n", + "# between 0 and 1. Closer to 0 indicates a negative review. Closer to 1\n", + "# indicates a positive review.\n", + "model.add(\n", + " tf.keras.layers.Dense(\n", + " units=1, # Single unit\n", + " activation='sigmoid' # Sigmoid activation function (output from 0 to 1)\n", + " )\n", + ")\n", + "\n", + "# Compile the model\n", + "model.compile(\n", + " loss=tf.keras.losses.binary_crossentropy, # loss function\n", + " optimizer=tf.keras.optimizers.Adam(), # optimiser function\n", + " metrics=['accuracy']) # reporting metric\n", + "\n", + "# Display a summary of the models structure\n", + "model.summary()" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "oQtzt9LvchD_", + "outputId": "2fb35a03-5f07-42dc-de2c-ed2828762217" + }, + "execution_count": 10, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Model: \"sequential_1\"\n", + "_________________________________________________________________\n", + " Layer (type) Output Shape Param # \n", + "=================================================================\n", + " embedding_1 (Embedding) (None, 300, 16) 160000 \n", + " \n", + " simple_rnn (SimpleRNN) (None, 4) 84 \n", + " \n", + " dense (Dense) (None, 1) 5 \n", + " \n", + "=================================================================\n", + "Total params: 160,089\n", + "Trainable params: 160,089\n", + "Non-trainable params: 0\n", + "_________________________________________________________________\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "### Train Simple RNN" + ], + "metadata": { + "id": "n4kylHLGeAzu" + } + }, + { + "cell_type": "code", + "source": [ + "import tensorflow as tf\n", + "device_name = tf.test.gpu_device_name()" + ], + "metadata": { + "id": "56d3yZp1dpof" + }, + "execution_count": 11, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "outputId": "f1a27a94-3b54-4f81-eee6-18ee5ae76be6", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "IIKYaAfsdpof" + }, + "source": [ + "# Train the LSTM on the training data\n", + "with tf.device('/device:GPU:0'):\n", + " history = model.fit(\n", + "\n", + " # Training data : features (review) and classes (positive or negative)\n", + " x_train, y_train,\n", + "\n", + " # Number of samples to work through before updating the\n", + " # internal model parameters via back propagation. The\n", + " # higher the batch, the more memory you need.\n", + " batch_size=256,\n", + "\n", + " # An epoch is an iteration over the entire training data.\n", + " epochs=10,\n", + "\n", + " # The model will set apart his fraction of the training\n", + " # data, will not train on it, and will evaluate the loss\n", + " # and any model metrics on this data at the end of\n", + " # each epoch.\n", + " validation_split=0.2,\n", + "\n", + " # Set verbose=1 if it is desired to have output printed.\n", + " # In some scenarios where output needs to be hidden, we\n", + " # set verbose=0.\n", + " verbose=1\n", + " )" + ], + "execution_count": 15, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Epoch 1/10\n", + "79/79 [==============================] - 33s 347ms/step - loss: 0.6746 - accuracy: 0.6119 - val_loss: 0.6482 - val_accuracy: 0.7158\n", + "Epoch 2/10\n", + "79/79 [==============================] - 24s 306ms/step - loss: 0.5932 - accuracy: 0.8235 - val_loss: 0.5742 - val_accuracy: 0.8262\n", + "Epoch 3/10\n", + "79/79 [==============================] - 23s 291ms/step - loss: 0.5308 - accuracy: 0.8443 - val_loss: 0.5259 - val_accuracy: 0.8262\n", + "Epoch 4/10\n", + "79/79 [==============================] - 20s 260ms/step - loss: 0.4723 - accuracy: 0.8696 - val_loss: 0.4899 - val_accuracy: 0.8340\n", + "Epoch 5/10\n", + "79/79 [==============================] - 21s 260ms/step - loss: 0.4419 - accuracy: 0.8638 - val_loss: 0.4702 - val_accuracy: 0.8242\n", + "Epoch 6/10\n", + "79/79 [==============================] - 18s 229ms/step - loss: 0.4131 - accuracy: 0.8629 - val_loss: 0.4518 - val_accuracy: 0.8254\n", + "Epoch 7/10\n", + "79/79 [==============================] - 17s 222ms/step - loss: 0.3695 - accuracy: 0.8903 - val_loss: 0.4398 - val_accuracy: 0.8292\n", + "Epoch 8/10\n", + "79/79 [==============================] - 18s 223ms/step - loss: 0.3420 - accuracy: 0.8992 - val_loss: 0.4268 - val_accuracy: 0.8298\n", + "Epoch 9/10\n", + "79/79 [==============================] - 16s 208ms/step - loss: 0.3202 - accuracy: 0.9046 - val_loss: 0.4228 - val_accuracy: 0.8296\n", + "Epoch 10/10\n", + "79/79 [==============================] - 16s 201ms/step - loss: 0.3013 - accuracy: 0.9110 - val_loss: 0.4215 - val_accuracy: 0.8280\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "### Plot" + ], + "metadata": { + "id": "ustSMX80eDIf" + } + }, + { + "cell_type": "code", + "source": [ + "# import\n", + "import matplotlib.pyplot as plt" + ], + "metadata": { + "id": "Qz97Ha9fdXl_" + }, + "execution_count": 16, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "# plot history\n", + "plt.figure(figsize=(10,4))\n", + "plt.subplot(1, 2, 1)\n", + "plt.plot(history.history['loss'])\n", + "plt.plot(history.history['val_loss'])\n", + "plt.legend(['train', 'test'])\n", + "plt.title('loss')\n", + "plt.subplot(1, 2, 2)\n", + "plt.plot(history.history['accuracy'])\n", + "plt.plot(history.history['val_accuracy'])\n", + "plt.legend(['train', 'test'])\n", + "plt.title('accuracy')\n", + "plt.show()" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 391 + }, + "id": "RRCBfloidXmE", + "outputId": "93ff4dfe-ef47-4e1a-a16a-7a1755a7aa47" + }, + "execution_count": 17, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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r732Gr/99hu///57+T8ZEREpd/Pnz2fkyJG888473HbbbVx33XX06NGjUAXS8PBwdu7cecFzhYeHExMTQ25ubrFtatWqBVDo/PkjFy7Fjh072Lt3L++88w7PPPMMgwYNIjIykrp16xZo17hxY4CLxg0wbNgwTCYTX3/9NV9++SXOzs4MHTr0kmMSKQklQyLlJDIyEhcXF9577z2sVqt9/6xZs0hNTeWGG24AIC0tjby8vALHtmnTBqPRSHZ2NgAnT54sdP727dsD2NuIiEjVZjKZCnxfALz//vuFempuvfVWtm3bVmQJ6vzjb731VlJSUpg2bVqxbRo2bIjJZGL16tUF7v/ggw9KFPM/z5l/+9133y3QLiAggF69ejF79mzi4uKKjCefv78//fv354svvuDLL7+kX79++Pv7X3JMIiWh0toi5SQgIIDx48czadIk+vXrx0033URMTAwffPABV155pb3L/7fffuPhhx9myJAhNGvWjLy8PD7//HNMJhO33norAC+//DKrV6/mhhtuoGHDhiQlJfHBBx9Qv359evTo4cinKSIiZeTGG2/k888/x9fXl5YtW7J+/XpWrFhBnTp1CrR76qmnmD9/PkOGDOHee++lY8eOnDx5kkWLFjFjxgzatWvHiBEjmDt3LuPGjWPjxo307NmTzMxMVqxYwUMPPcSgQYPw9fVlyJAhvP/++xgMBsLDw/n5559JSkq65JibN29OeHg4Tz75JMeOHcPHx4fvv/+eU6dOFWr73nvv0aNHDzp06MADDzxAo0aNiI2NZfHixWzdurVA2xEjRnDbbbcB8Morr5T8xRS5VI4rZCdS/fyztHa+adOmWZs3b251dna2BgUFWceMGWM9deqU/f6DBw9a7733Xmt4eLjVzc3NWrt2bevVV19tXbFihb1NVFSUddCgQda6detaXVxcrHXr1rXecccd1r1791bgsxMRkfJ06tQp66hRo6z+/v5WLy8va9++fa179uyxNmzY0Dpy5MgCbU+cOGF9+OGHrfXq1bO6uLhY69evbx05cqQ1JSXF3iYrK8v6/PPPWxs1amR1dna2BgcHW2+77TbrgQMH7G2Sk5Ott956q9XDw8Naq1Yt63/+8x/rzp07iyyt7enpWWTcu3fvtkZGRlq9vLys/v7+1tGjR1u3bdtW6BxWq9W6c+dO6+DBg61+fn5WNzc3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\n" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "## Build the Model: LSTM\n", + "\n", + "Build a Long Short Term Memory (LSTM) model and add multiple dense layers." + ], + "metadata": { + "id": "zFWSZgp9dub1" + } + }, + { + "cell_type": "code", + "metadata": { + "id": "8nmO8M4aCKwT", + "outputId": "7735951a-b244-4a70-e6de-080c06d765f0", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "source": [ + "# We begin by defining the a empty stack. We'll use this for building our\n", + "# network, later by layer.\n", + "model = tf.keras.models.Sequential()\n", + "\n", + "# The Embedding Layer provides a spatial mapping (or Word Embedding) of all the\n", + "# individual words in our training set. Words close to one another share context\n", + "# and or meaning. This spatial mapping is learning during the training process.\n", + "model.add(\n", + " tf.keras.layers.Embedding(\n", + " input_dim = vocab_size, # The size of our vocabulary\n", + " output_dim = 16, # Dimensions to which each words shall be mapped\n", + " input_length = review_length # Length of input sequences\n", + " )\n", + ")\n", + "\n", + "# Dropout layers fight overfitting and forces the model to learn multiple\n", + "# representations of the same data by randomly disabling neurons in the\n", + "# learning phase.\n", + "model.add(\n", + " tf.keras.layers.Dropout(\n", + " rate=0.25 # Randomly disable 25% of neurons\n", + " )\n", + ")\n", + "\n", + "# We are using a fast version of LSTM whih is optimised for GPUs. This layer\n", + "# looks at the sequence of words in the review, along with their word embeddings\n", + "# and uses both of these to determine to sentiment of a given review.\n", + "model.add(\n", + " tf.keras.layers.LSTM(\n", + " units=32 # 32 LSTM units in this layer\n", + " )\n", + ")\n", + "\n", + "# Add a second dropout layer with the same aim as the first.\n", + "model.add(\n", + " tf.keras.layers.Dropout(\n", + " rate=0.25 # Randomly disable 25% of neurons\n", + " )\n", + ")\n", + "\n", + "# All LSTM units are connected to a single node in the dense layer. A sigmoid\n", + "# activation function determines the output from this node - a value\n", + "# between 0 and 1. Closer to 0 indicates a negative review. Closer to 1\n", + "# indicates a positive review.\n", + "model.add(\n", + " tf.keras.layers.Dense(\n", + " units=1, # Single unit\n", + " activation='sigmoid' # Sigmoid activation function (output from 0 to 1)\n", + " )\n", + ")\n", + "\n", + "# Compile the model\n", + "model.compile(\n", + " loss=tf.keras.losses.binary_crossentropy, # loss function\n", + " optimizer=tf.keras.optimizers.Adam(), # optimiser function\n", + " metrics=['accuracy']) # reporting metric\n", + "\n", + "# Display a summary of the models structure\n", + "model.summary()" + ], + "execution_count": 18, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Model: \"sequential_2\"\n", + "_________________________________________________________________\n", + " Layer (type) Output Shape Param # \n", + "=================================================================\n", + " embedding_2 (Embedding) (None, 300, 16) 160000 \n", + " \n", + " dropout (Dropout) (None, 300, 16) 0 \n", + " \n", + " lstm (LSTM) (None, 32) 6272 \n", + " \n", + " dropout_1 (Dropout) (None, 32) 0 \n", + " \n", + " dense_1 (Dense) (None, 1) 33 \n", + " \n", + "=================================================================\n", + "Total params: 166,305\n", + "Trainable params: 166,305\n", + "Non-trainable params: 0\n", + "_________________________________________________________________\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "8Xx1Q2I8WNI9" + }, + "source": [ + "### Visualise the Model" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "cz0Erj2WU3Vh", + "outputId": "7ebc1454-5057-41fe-a8d9-f9e8df38d7b8", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 644 + } + }, + "source": [ + "tf.keras.utils.plot_model(model, to_file='model.png', show_shapes=True, show_layer_names=False)" + ], + "execution_count": 19, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAUkAAAJzCAYAAACCg+H+AAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nOzde1RTd7YH8G+AQB6Eh4pIESiEV33VZ0dQru045VYdUUQKtbbFrvGqraWIZRQVRUWs0otcH4zX0dJOtb5Z0inSumgvWlfV1VYpNO1YRBHwQcAXj/AIsO8frmSIgRAgENT9WSt/eLJzss9J2J6c8/vtIyAiAmOMsXZZmDsBxhjrz7hIMsaYAVwkGWPMAC6SjDFmgFV3X3ju3DmkpqaaMhfGGOsVAQEBiI2N7dZru30kWVZWhmPHjnX35awXnT9/HufPnzd3Gv1aeXk5f3+fEufPn8e5c+e6/fpuH0lqHD16tKerYCYWHh4OgD8bQ44cOYKIiAjeR08Bzd9Dd/E5ScYYM4CLJGOMGcBFkjHGDOAiyRhjBnCRZIwxA7hIsnadPHkS9vb2+Oc//2nuVPqNxYsXQyAQaB/z58/Xi8nNzUV8fDyOHz8OLy8vbewbb7yhFxscHAyZTAZLS0sMHz4cFy9e7IvN6JItW7bA398fYrEYUqkU/v7+SEhIQHV1tU7c2bNnMWnSJEgkEri4uGDFihVobGw0OuaLL77Ali1b0NLSovOaEydO6OzzQYMG9e4Gt4OLJGsXN4dq34ABA5CTk4PLly9j3759Os+tW7cO27dvx6pVqxAWFoarV69CLpdj4MCB2L9/P7Kzs3XiT506haNHj2LmzJlQKBQYO3ZsX26KUb777jssXLgQpaWlqKiowMaNG7FlyxbMnTtXG6NQKBAcHIypU6eisrISmZmZ+Pjjj7FkyRKjY0JCQiASiTB16lTcv39f+7pZs2ahvLwcZ86cwfTp0/tuw9uibjp8+DD14OWsF82dO5fmzp1r7jR6RKVSUUBAQK+tvzvf30WLFpGrq2u7z23evJl8fX2pvr5eZ7lcLqcDBw6QhYUFubq60v3793Wez8nJoVmzZnUt+T4UGhqqt03h4eEEgG7evElERBEREeTp6Umtra3amJSUFBIIBPTbb78ZHUNEFB0dTQEBAaRWq/Vyef/992ngwIFd3oae/j3wkSTrl/bt2welUmnuNIxy5coVJCQkYP369RCJRHrPBwYGIiYmBjdu3MAHH3xghgy7LzMzU2+bXF1dAQC1tbVobm5GdnY2pkyZAoFAoI2ZNm0aiAhZWVlGxWgkJiYiPz8faWlpvbxlxuMiyfScPXsW7u7uEAgE2LlzJwAgPT0dUqkUEokEWVlZmDZtGuzs7DB06FAcPHgQALB9+3aIRCIMHjwYixcvhouLC0QiEQIDA3HhwgUAQHR0NKytrTFkyBDt+7377ruQSqUQCASoqqpCTEwMli9fjuLiYggEAnh7ewMAvvrqK9jZ2WHTpk19vEcM2759O4gIISEhHcYkJSXB19cXe/fuRW5ubodxRITU1FQ899xzsLGxgaOjI2bPno1//etfAIz7HACgpaUFa9euhbu7O8RiMUaNGoXDhw+bZHuLiorg4OAADw8PXL16FbW1tXB3d9eJkcvlAICCggKjYjQcHR0xZcoUpKWl9ZtTPlwkmZ7Jkyfj+++/11n2zjvvYNmyZaivr4dMJsPhw4dRXFwMLy8vLFy4EGq1GtHR0YiKioJKpcL777+PkpISXLx4Ec3NzXj55ZdRVlaG7du349VXX9VZ965du7B+/Xrtv9PS0jBz5kzI5XIQEa5cuQIA2pP6ra2tvbwHuiY7Oxt+fn6QSCQdxojFYnzyySewsLDAwoULUVdX125cYmIi4uPjsXr1aiiVSpw5cwZlZWUICgpCRUWFUZ8DAKxcuRJbt27Ftm3bcOvWLcycORPz5s3Djz/+2K1tVKvVuHHjBnbu3Inc3Fzs2LED1tbWuH37NgBAJpPpxItEIojFYlRUVBgV09aYMWNw48YN/Pzzz93K1dS4SLIuCwwMhJ2dHZycnBAZGYm6ujqUlpZqn7eystIeCQ0bNgzp6emoqalBRkZGj953xowZqK6uRkJCQk83wWTq6upw7do17VGRIQEBAVi2bBlKSkqwcuVKvefr6+uRmpqKOXPmYP78+bC3t8fIkSOxe/duVFVVYc+ePTrxHX0ODQ0NSE9PR2hoKMLCwuDg4IA1a9ZAKBR2+zNwc3PD0KFDkZiYiK1btyIiIgIAtFenLS0t9V4jFApRX19vVExbPj4+AIDCwsJu5WpqXCRZj1hbWwOA9gimPePHj4dEItH+ZHySKJVKEJHBo8i2kpKS4Ofnh127duHs2bM6zykUCtTW1mL8+PE6yydMmABra2vtKYv2tP0cLl++DJVKhREjRmifF4vFGDJkSLc/g7KyMiiVSnz++ef49NNPMWbMGCiVSu35yubmZr3XNDU1QSwWGxXTlmZfPnqEaS5cJFmfsLGxQWVlpbnTMLmGhgYAD7fPGCKRCBkZGRAIBHj77bd1jqI0Q19sbW31Xufg4ICamhqj3kPzU37NmjU6YwyvX78OlUpl1DoeJRQK4eTkhODgYBw6dAgKhQLJycnac8uPjptUqVRoaGiAi4uLUTFtaYqmZt+aGxdJ1uvUajXu37+PoUOHmjsVk9P8QT86CNoQTQPYoqIibNy4UbvcwcEBANothl3Zf05OTgCAbdu2gYh0Hj3pq6jh7e0NS0tLKBQKeHp6QiaT4fr16zoxmvPIo0aNMiqmraamJgDQO8I0Fy6SrNfl5eWBiDBx4kQAD89ZGvp5/jgZPHgwBAIBHjx40KXXbdy4Ef7+/rh06ZJ22YgRI2Bra6t3ceXChQtoamrCuHHjjFq3m5sbRCIR8vPzu5TTo+7cuYN58+bpLS8qKkJLSwvc3NxgZWWF6dOn48yZMzoX1HJyciAQCBASEmJUTFuafens7Nyj/E2FiyQzudbWVty7dw/Nzc0oKChATEwM3N3dERUVBeDhkcjdu3dx4sQJqNVqVFZW6h1lDBgwADdv3kRJSQlqamqgVquRk5PT74YASSQSeHl5oby8vEuv0/zsbnsxQyQSYfny5cjMzMT+/ftRXV2NwsJCLFmyBC4uLli0aJHR616wYAEOHjyI9PR0VFdXo6WlBeXl5bh16xYAIDIyEs7OzganQkqlUpw6dQrffvstqquroVarcenSJbz11luQSqXa2yEkJCSgoqIC69atQ11dHc6dO4eUlBRERUXBz8/P6BgNzb4cOXKk8Tu0N3V3FDrPuOm/ejrDYMeOHTRkyBACQBKJhEJCQmjXrl0kkUgIAPn4+FBxcTHt2bOH7OzsCAB5eHjQ77//TosWLSKhUEiurq5kZWVFdnZ2NHv2bCouLtau/86dO/TSSy+RSCQiT09Peu+99yguLo4AkLe3N5WWltLFixfJw8ODxGIxTZ48mW7fvk0nT54kmUxGSUlJPd5HppxxEx0dTUKhkFQqlXZZZmYmyeVyAkCDBg2ipUuXtrvOuLg4nRk3ra2tlJKSQj4+PiQUCsnR0ZFCQ0Pp8uXLRERGfw6NjY20YsUKcnd3JysrK3JycqKwsDBSKBRE9HAmDQBau3atwW0OCQkhT09PsrW1JRsbG5LL5RQZGUmFhYU6cadPn6YXXniBbGxsyMXFheLi4qihoaHLMUREM2bMIFdXV53ZOUTmm3HDRfIJZM5piYsWLaIBAwaY5b27wpRFsqioiKysrOizzz4zVXq9rqWlhYKCgmjfvn3mTkVHVVUViUQi+uijj/Se42mJ7InRlYsYj5v6+np8/fXXKCoq0l5g8Pb2xoYNG7BhwwbU1taaOcPOtbS04MSJE6ipqUFkZKS509GRmJiI0aNHIzo6GsDDGUg3b97E2bNntRd6+hoXSca64O7du3jllVfg6+uLt99+W7s8Pj4e4eHhiIyM7PJFnL6Wl5eH48ePIycnx+jxnX0hNTUV+fn5OHnyJIRCIQAgKysLrq6uCAoK0uui1Ff6rEieP38ezz33HCwsLCAQCODs7IykpKS+evsOPdr3b8iQIe32CWSdW7VqFTIyMvDgwQN4eno+cbds3b17t85wmv379+s8v2nTJkRHR2Pz5s1mytA4U6dOxYEDB3Tmz5tbVlYWGhsbkZeXB0dHR+3y2bNn6+zzqqqqPs9NQNS9WeSaW3J29eWvvPIKvv76a9y7d087Lqw/8Pb2RlVVlU4vu8cV31K2c939/rLHT0//Hp66n9v19fUIDAw0dxqMscfEU1ckH6c+hYwx8zN7kewPfQq74rvvvsOwYcNgb28PkUiEkSNH4uuvvwYA/OUvf9Ge25TL5drZFAsWLIBEIoG9vT2++OILg73+tm7dColEAplMBqVSieXLl8PV1RWXL1/u0X5mjHVTd8cOdXec5H/+538SALp375522erVqwkAffPNN/TgwQNSKpUUFBREUqmUmpqaiOjhGDWpVEq//vorNTQ0kEKhoAkTJpBMJqPS0lIiInr99dfJ2dlZ5/1SUlIIAFVWVhIRUVhYGMnlcr285HI52dvbd5r/0aNHKTExke7evUt37tyhiRMn6ozdCgsLI0tLS7px44bO6+bNm0dffPEFERF98MEHZGNjQ8eOHaN79+7RqlWryMLCgn744Qed/fH+++/Tjh07aM6cOTot7jvzJNy+obfxON+nxxM1TtJcfQq7Yu7cuVi3bh0cHR0xYMAAhISE4M6dO9oON0uWLEFLS4tOTtXV1fjhhx8wffr0LvX6+/DDD7F06VIcP34c/v7+fbaNjLF/szJ3Ah15XPoUasZzaQZQ//GPf4Svry8+/vhjrFq1CgKBAIcOHUJkZCQsLS3xyy+/mLzXX3uOHTumcz8R1j7eR0+Htnd37Kp+WySN1dd9CrOzs5GSkgKFQqGd9N+WQCDA4sWLERsbi2+++QZ/+tOf8I9//AMHDhwAoNvrb82aNTqvfbSvXk9MnDgRy5YtM9n6njTnzp1DWlqaye77wvqvbdu29ej1j3WR7Ks+hWfOnMFPP/2EsLAwhIaGYs6cOfj444/xzDPPYMeOHfjrX/+qEx8VFYVVq1Zh7969cHNzg52dHTw8PADo9vqLiYnptZyHDh2qdy8ZpistLY330VOgp+OFH+si2Vd9Cn/66SdIpVIUFhZCrVbjnXfegZeXF4D2f645OjoiIiIChw4dgkwmw8KFC7XPmarXH2Osb/SrCzed6a0+hR1Rq9WoqKhAXl4epFKp9paYubm5aGhoQFFRUYf3HVmyZAkaGxvx5ZdfYubMmdrlxvT6Y4z1I929LN7VIRTnz5+n4cOHk4WFBQGgIUOG0KZNm8zep/Bvf/ubtu+foUdmZiYREa1YsYIGDBhADg4OFB4eTjt37iQAJJfLtUORNMaMGUPx8fF6+8JQr78tW7aQWCwmAOTm5tat9ls8BKhzPATo6dHTv4c+n7vdXYsXL8bRo0dx586dPnk/U5gxYwZ27twJT0/PPn1fnrvdOZ67/fR4quZu9/c+hW1/uhcUFEAkEvV5gWSMmdZjVST7uxUrVqCoqAi///47FixYoHMnPPb4W7x4sc4tWttrqZebm4v4+Hi9FnxvvPGGXmxwcDBkMhksLS0xfPhwg/ebMZctW7bA398fYrEYUqkU/v7+SEhI0Ls97NmzZzFp0iRIJBK4uLhgxYoVaGxsNDrmiy++wJYtW/QOhE6cOKGzzwcNGtS7G9ye7v5O78tzOvHx8WRtbU0A6Nlnn6WjR4/2yft21erVq8nCwoLc3Ny0UxDNgc9Jdq67t28YMGAA5eTk0OXLl/Xuz7J27VqaOXMmVVdXa5fJ5XIaOHAgAaAvv/xSb505OTk697jpb2bMmEEfffQRKZVKqqmpoSNHjpBQKKSXX35ZG/PLL7+QWCymhIQEqq2tpe+//54GDRpECxYs6FJMWloaTZkyRWfKcmtrK5WXl9OZM2do+vTpfI8bZhrmLJIqlYoCAgL6/bpNeY8bIqLNmzeTr68v1dfX6yyXy+V04MABsrCwIFdXV7p//77O8/29SIaGhuptU3h4OAGgmzdvEhFRREQEeXp66ty4KyUlhQQCgbbngDExRA9vqhYQEEBqtVovF77HDXsi9GYruv7a5u7KlStISEjA+vXrIRKJ9J4PDAxETEwMbty4gQ8++MAMGXZfZmam3ja5uroCAGpra9Hc3Izs7GxMmTJFZ8zwtGnTQETIysoyKkYjMTER+fn5SEtL6+UtMx4XSQbg4Q2XUlNTtQ1EHB0dMXv2bO188u62ouvtNndfffWV2e/FvX37dhARQkJCOoxJSkqCr68v9u7di9zc3A7jOvscjGktCMBgO76eKioqgoODAzw8PHD16lXU1tZqxxBryOVyAA8vYBoTo+Ho6IgpU6YgLS2t34w84CLJADz8Hzw+Ph6rV6+GUqnEmTNnUFZWhqCgIFRUVGD79u16U/h27dqF9evXa/+dlpaGmTNnQi6Xg4hw5coVREdHIyoqCiqVCu+//z5KSkpw8eJFNDc34+WXX0ZZWVm31w38e8RDa2trb+2aTmVnZ8PPz8/gTbXEYjE++eQTWFhYYOHChdo5/I/q7HN45513sGzZMtTX10Mmk+Hw4cMoLi6Gl5cXFi5cqB1hsXLlSmzduhXbtm3DrVu3MHPmTMybNw8//vhjt7ZRrVbjxo0b2LlzJ3Jzc7Fjxw5YW1vj9u3bAACZTKYTLxKJIBaLUVFRYVRMW2PGjMGNGzfw888/dytXU+MiyVBfX4/U1FTMmTMH8+fPh729PUaOHIndu3ejqqoKe/bs6fF79FabuxkzZqC6uhoJCQk9zrE76urqcO3aNe1RkSEBAQFYtmwZSkpKsHLlSr3nu/o5dNRasCvt+Izl5uaGoUOHIjExEVu3bkVERAQAaK9OW1pa6r1GKBSivr7eqJi2fHx8AACFhYXdytXUuEgyKBQK1NbWYvz48TrLJ0yYAGtr6w6nXvZEf2hzZwpKpRJEZPStWZOSkuDn54ddu3bh7NmzOs/15HNo21rw8uXLJm/HV1ZWBqVSic8//xyffvopxowZA6VSqT1f2dzcrPeapqYmiMVio2La0uzLR48wzYWLJNPeIdLW1lbvOQcHB9TU1PTK+/Z1m7ve0NDQAODhthhDJBIhIyMDAoEAb7/9ts5RlKk+h7bt+NqOMbx+/TpUKpVR63iUUCiEk5MTgoODcejQISgUCiQnJ2vPIz86blKlUqGhoQEuLi5GxbSlKZqafWtuXCSZ9ta+7f0R9lYrur5qc9fbNH/QXZkNFhAQgNjYWBQVFelMODDV59C2HR+1uWc1EeHcuXNG59kRb29vWFpaQqFQwNPTEzKZTK+RjOac8ahRo4yKaaupqQkA9I4wzYWLJMOIESNga2urd1L/woULaGpqwrhx4wCYthVdX7W5622DBw+GQCDAgwcPuvS6jRs3wt/fX3uzOMD4z6EzpmrHd+fOHcybN09veVFREVpaWuDm5gYrKytMnz4dZ86c0bl4lpOTA4FAgJCQEKNi2tLsS2dn5x7lbypcJBlEIhGWL1+OzMxM7N+/H9XV1SgsLMSSJUvg4uKCRYsWAehZK7reanOXk5Nj1iFAEokEXl5eKC8v79LrND+7217MMPZzMGbdnbXji4yMhLOzs8GpkFKpFKdOncK3336r7cJ/6dIlvPXWW5BKpYiNjQUAJCQkoKKiAuvWrUNdXR3OnTuHlJQUREVFwc/Pz+gYDc2+HDlypPE7tDd1dxQ6z7jpv7ozw6C1tZVSUlLIx8eHhEIhOTo6UmhoKF2+fFkb051WdLdv3+61Nne3b9+mkydPkkwmo6SkpC5tryln3ERHR5NQKCSVSqVdlpmZqW3BN2jQIFq6dGm764yLi9OZcdPZ52Bsa0FD7fiIHs6kAUBr1641uM0hISHk6elJtra2ZGNjQ3K5nCIjI6mwsFAn7vTp0/TCCy+QjY0Nubi4UFxcnN60TWNiiB5OhXR1ddWZnUNkvhk3XCSfQP1t7rZmznN/YsoiWVRURFZWVt3q/WkuLS0tFBQURPv27TN3KjqqqqpIJBLRRx99pPccT0tkT7T+3ubOWPX19fj6669RVFSkvcDg7e2NDRs2YMOGDaitrTVzhp1raWnBiRMnUFNTg8jISHOnoyMxMRGjR49GdHQ0gIczkG7evImzZ89qL/T0NS6SjHXB3bt38corr8DX1xdvv/22dnl8fDzCw8MRGRnZ5Ys4fS0vLw/Hjx9HTk6O0eM7+0Jqairy8/Nx8uRJ7a2as7Ky4OrqiqCgIGRnZ5slLy6SrFetWrUKGRkZePDgATw9PXHs2DFzp9Rtu3fv1hlOs3//fp3nN23ahOjoaGzevNlMGRpn6tSpOHDggM5ceXPLyspCY2Mj8vLy4OjoqF0+e/ZsnX1eVVXV57k91ndLZP1fcnIykpOTzZ1GnwkODkZwcLC503jszJo1C7NmzTJ3Gu3iI0nGGDOAiyRjjBnARZIxxgzgIskYYwb0+MLNkSNHTJEHMyHNtC7+bDqmafTA++jJV15e3rNGKt0dha6ZscAPfvCDH/390ZMZNwKifnIjCcYACAQCHD58WO92DoyZC5+TZIwxA7hIMsaYAVwkGWPMAC6SjDFmABdJxhgzgIskY4wZwEWSMcYM4CLJGGMGcJFkjDEDuEgyxpgBXCQZY8wALpKMMWYAF0nGGDOAiyRjjBnARZIxxgzgIskYYwZwkWSMMQO4SDLGmAFcJBljzAAukowxZgAXScYYM4CLJGOMGcBFkjHGDOAiyRhjBnCRZIwxA7hIMsaYAVwkGWPMAC6SjDFmABdJxhgzgIskY4wZwEWSMcYM4CLJGGMGcJFkjDEDrMydAHt6/f3vf8fdu3f1lmdlZeHatWs6yxYsWIDBgwf3VWqMaQmIiMydBHs6LV68GP/7v/8LGxubDmPUajUcHR1x+/ZtWFnx/+ms7/HPbWY2r732GgCgsbGxw4elpSXmzZvHBZKZDR9JMrMhIri6uuLWrVsG477//nsEBAT0UVaM6eIjSWY2AoEAr7/+OqytrTuMeeaZZzBx4sQ+zIoxXVwkmVm99tpraGpqavc5a2trvPXWWxAIBH2cFWP/xj+3mdn5+PjgypUr7T5XUFCAkSNH9nFGjP0bH0kys5s/fz6EQqHecm9vby6QzOy4SDKzmz9/Ppqbm3WWCYVCLFiwwEwZMfZv/HOb9QujR49GQUEBNF9HgUCA4uJieHp6mjkz9rTjI0nWL7z55puwtLQE8LBAjhs3jgsk6xe4SLJ+4bXXXkNraysAwNLSEm+++aaZM2LsIS6SrF9wcXHBpEmTIBAI0NraivDwcHOnxBgALpKsH3njjTdARHjxxRcxZMgQc6fD2EP0iMOHDxMAfvCDH/x46h5z5859tCRSh10DDh8+3NFTrJ/Ytm0bAGDZsmVmzsR0tm3bhv/6r/+CVCo1yfrOnTuHtLQ0/j6zTmn+nh7VYZF89dVXey0ZZhpHjx4F8GR9VpMnT8Yzzzxj0nWmpaU9UfuI9Q7N39Oj+Jwk61dMXSAZ6ykukowxZgAXScYYM4CLJGOMGcBFkjHGDOAi+ZQ7efIk7O3t8c9//tPcqTxRcnNzER8fj+PHj8PLywsCgQACgQBvvPGGXmxwcDBkMhksLS0xfPhwXLx40QwZG7Zlyxb4+/tDLBZDKpXC398fCQkJqK6u1ok7e/YsJk2aBIlEAhcXF6xYsQKNjY1Gx3zxxRfYsmULWlpa+mzbOsNF8inHTaBMb926ddi+fTtWrVqFsLAwXL16FXK5HAMHDsT+/fuRnZ2tE3/q1CkcPXoUM2fOhEKhwNixY82Uece+++47LFy4EKWlpaioqMDGjRuxZcsWzJ07VxujUCgQHByMqVOnorKyEpmZmfj444+xZMkSo2NCQkIgEokwdepU3L9/v8+3s10dzbhh/d/cuXPbnSHwOFGpVBQQENBr6+/r7/PmzZvJ19eX6uvrdZbL5XI6cOAAWVhYkKurK92/f1/n+ZycHJo1a1af5dlVoaGhetsUHh5OAOjmzZtERBQREUGenp7U2tqqjUlJSSGBQEC//fab0TFERNHR0RQQEEBqtbo3N0tHR39PfCTJzGrfvn1QKpXmTsMkrly5goSEBKxfvx4ikUjv+cDAQMTExODGjRv44IMPzJBh92VmZuptk6urKwCgtrYWzc3NyM7OxpQpU3TuSTRt2jQQEbKysoyK0UhMTER+fj7S0tJ6ecs6x0XyKXb27Fm4u7tDIBBg586dAID09HRIpVJIJBJkZWVh2rRpsLOzw9ChQ3Hw4EEAwPbt2yESiTB48GAsXrwYLi4uEIlECAwMxIULFwAA0dHRsLa21mlU8e6770IqlUIgEKCqqgoxMTFYvnw5iouLIRAI4O3tDQD46quvYGdnh02bNvXxHumZ7du3g4gQEhLSYUxSUhJ8fX2xd+9e5ObmdhhHREhNTcVzzz0HGxsbODo6Yvbs2fjXv/4FwLjPCQBaWlqwdu1auLu7QywWY9SoUSabollUVAQHBwd4eHjg6tWrqK2thbu7u06MXC4H8PBeRcbEaDg6OmLKlClIS0sz+ykhLpJPscmTJ+P777/XWfbOO+9g2bJlqK+vh0wmw+HDh1FcXAwvLy8sXLgQarUa0dHRiIqKgkqlwvvvv4+SkhJcvHgRzc3NePnll1FWVobt27frTQXctWsX1q9fr/13WloaZs6cCblcDiLS3gxMc9Je01/ycZGdnQ0/Pz9IJJIOY8RiMT755BNYWFhg4cKFqKurazcuMTER8fHxWL16NZRKJc6cOYOysjIEBQWhoqLCqM8JAFauXImtW7di27ZtuHXrFmbOnIl58+bhxx9/7NY2qtVq3LhxAzt37kRubi527NgBa2tr3L59GwAgk8l04kUiEcRiMSoqKoyKaWvMmDG4ceMGfv75527laipcJFmHAgMDYWdnBycnJ0RGRqKurg6lpaXa562srLRHOsOGDUN6ejpqamqQkZHRo/edMWMGqqurkZCQ0NNN6DN1dXW4du2a9qjIkICAACxbtgwlJSVYuXKl3vP19fVITU3FnDlzMH/+fNjb22PkyJHYvc/4ZB0AACAASURBVHs3qqqqsGfPHp34jj6nhoYGpKenIzQ0FGFhYXBwcMCaNWsgFAq7/Rm5ublh6NChSExMxNatWxEREQEA2qvTmu7ybQmFQtTX1xsV05aPjw8AoLCwsFu5mgoXSWYUa2trANAeobRn/PjxkEgk2p+ETxOlUgkiMngU2VZSUhL8/Pywa9cunD17Vuc5hUKB2tpajB8/Xmf5hAkTYG1trT2l0Z62n9Ply5ehUqkwYsQI7fNisRhDhgzp9mdUVlYGpVKJzz//HJ9++inGjBkDpVKpPV/56A3dAKCpqQlisdiomLY0+/LRI8y+xkWSmZSNjQ0qKyvNnUafa2hoAPBw+40hEomQkZEBgUCAt99+W+coSjP0xdbWVu91Dg4OqKmpMeo9ND/l16xZox2nKRAIcP36dahUKqPW8SihUAgnJycEBwfj0KFDUCgUSE5O1p57fnTcpEqlQkNDA1xcXIyKaUtTNDX71ly4SDKTUavVuH//PoYOHWruVPqc5g+6K4OgAwICEBsbi6KiImzcuFG73MHBAQDaLYZd2b9OTk4AHvZJJCKdx7lz54zOsyPe3t6wtLSEQqGAp6cnZDIZrl+/rhOjOc88atQoo2LaampqAgC9I8y+xkWSmUxeXh6ICBMnTgTw8JyloZ/nT5LBgwdDIBDgwYMHXXrdxo0b4e/vj0uXLmmXjRgxAra2tnoXVy5cuICmpiaMGzfOqHW7ublBJBIhPz+/Szk96s6dO5g3b57e8qKiIrS0tMDNzQ1WVlaYPn06zpw5o3PBLScnBwKBACEhIUbFtKXZl87Ozj3Kv6e4SLJua21txb1799Dc3IyCggLExMTA3d0dUVFRAB4eady9excnTpyAWq1GZWWl3lHEgAEDcPPmTZSUlKCmpgZqtRo5OTmP3RAgiUQCLy8vlJeXd+l1mp/dbS9miEQiLF++HJmZmdi/fz+qq6tRWFiIJUuWwMXFBYsWLTJ63QsWLMDBgweRnp6O6upqtLS0oLy8HLdu3QIAREZGwtnZ2eBUSKlUilOnTuHbb79FdXU11Go1Ll26hLfeegtSqRSxsbEAgISEBFRUVGDdunWoq6vDuXPnkJKSgqioKPj5+Rkdo6HZlyNHjjR+h/aGR0eX84ybx0dPZ9zs2LGDhgwZQgBIIpFQSEgI7dq1iyQSCQEgHx8fKi4upj179pCdnR0BIA8PD/r9999p0aJFJBQKydXVlaysrMjOzo5mz55NxcXF2vXfuXOHXnrpJRKJROTp6UnvvfcexcXFEQDy9vam0tJSunjxInl4eJBYLKbJkyfT7du36eTJkySTySgpKanH+6gvv8/R0dEkFApJpVJpl2VmZpJcLicANGjQIFq6dGm7r42Li9OZcdPa2kopKSnk4+NDQqGQHB0dKTQ0lC5fvkxEZPTn1NjYSCtWrCB3d3eysrIiJycnCgsLI4VCQUQPZ9IAoLVr1xrctpCQEPL09CRbW1uysbEhuVxOkZGRVFhYqBN3+vRpeuGFF8jGxoZcXFwoLi6OGhoauhxDRDRjxgxydXXVmZ3Tmzr6e+Ii+Rgz57TERYsW0YABA8zy3l3Rl9/noqIisrKyos8++6xP3s8UWlpaKCgoiPbt22fuVHRUVVWRSCSijz76qM/ek6clMpPrT51a+gNvb29s2LABGzZsQG1trbnT6VRLSwtOnDiBmpoaREZGmjsdHYmJiRg9ejSio6PNnUrPz0k+2gqqvcezzz7b40QnTJgAS0tLjB49usfrausvf/kLZDIZBAJBhye424vhFmOsPfHx8QgPD0dkZGSXL+L0tby8PBw/fhw5OTlGj+/sC6mpqcjPz8fJkychFArNnU7Pi2TbVlD29vbaIQbNzc1QqVSoqKgwyQfwww8/4KWXXurxeh61d+9e/P3vf+9yDD3FLcZWrVqFjIwMPHjwAJ6enjh27Ji5U+pXNm3ahOjoaGzevNncqRg0depUHDhwQGd+vbllZWWhsbEReXl5cHR0NHc6AAzcUranLC0tIRaLIRaL4evra7L1tu0eYk4zZszo90cKvSU5ORnJycnmTqNfCw4ORnBwsLnTeOzMmjULs2bNMncaOvrknOSJEydMtq7eOPw2pvD2ZnEmIhw9elRvTi5jzPz69MJNWloapFIpLCwsMG7cODg7O0MoFEIqlWLs2LEICgrSDoB1cHDAX//6V711XLlyBf7+/pBKpRCLxQgKCtKZ+9pZaygiQkpKCvz8/GBjYwN7e3vExcXpvEdnMd1tMabJLzk5GX5+fhCLxRg0aBA8PT2RnJys1zWHMdYPPHq5u7tDJuRyOdnb2+sse//99/XGUa1bt44A0IULF6iuro6qqqrolVdeIQCUnZ1NlZWVVFdXR9HR0QSA8vPzta+dOnUqeXl50bVr10itVtMvv/xCf/jDH0gkEtHvv/9OREQffPAB2djY0LFjx+jevXu0atUqsrCwoB9++IGIiFavXk0CgYD++7//m+7du0cqlYp27dpFAOjSpUtGx5SVlREA2rFjhza/1atXEwD65ptv6MGDB6RUKikoKIikUik1NTUREdGmTZvI0tKSsrKySKVS0U8//UTOzs704osvdnmfPwmdyXsbD2ljxuqTIUAPHjzQuar9P//zPx3GDhs2DBKJBAMHDsRrr70GAHB3d8egQYMgkUgwf/58ANDrViKTyfDss8/CysoKw4cPx9///nc0NDRgz549nbaGqq+vx7Zt2/CnP/0JsbGxcHBwgFgsxoABA7TrNyamM4ZajJ04cQLjxo1DSEgIxGIxxo4di1mzZuHMmTPauaqMsf7DpBdu7O3tdW7eExMTY9TrNO2d2rZQ0px77Gzu78iRI2Fvb4+CgoJOW0NduXIFKpUKU6dO7XB9xsR0xaMtxhoaGvTa4Le0tEAoFLbbZ68z5eXlOHLkSM8TfUJpGjnwPmKdKS8vb7d5SK9d3QbQZ/enEAqFUKvVOq2h1qxZoxPj4uKinQuq6Y7SHmNiemL69OlISUlBVlYWgoODoVAocOLECfz5z3/uVpE8f/68tvEp6xjvI2aMtnd/1HjsZ9w0Nzfj7t27cHd377Q1lOYI7tH7ALdlTExPJCYm4o9//COioqJgZ2eHOXPm4NVXX+10rGZH5s6dq7et/Pj3Q3PRztx58KP/P9orkEAfFclbt25hwYIFvbLu//u//0NrayvGjh3baWuoESNGwMLCAqdPn+5wfcbE9IRCoUBxcTEqKyuhVqtRWlqK9PT0fjNwljGmq1eLJBGhvr4ex48fh52dnUnW2dTUhAcPHqC5uRkXL15EdHQ0PDw8EBUV1WlrKCcnJ4SFheHYsWPYt28fqqurUVBQoDM+0ZiYnli6dCnc3d0fi7m9jDH0fAhQ21ZQhh5r1qyhtLQ0bXunZ599lr777jv68MMPyd7engCQs7MzHThwgA4dOkTOzs4EgBwdHengwYNERJSRkUEvvfQSDR48mKysrGjgwIH02muv0fXr17X5dNYaqqamhv7yl7/QwIEDydbWliZPnkxr164lADR06FD6+eefO41ZuHBht1uMffvttzRw4ECdfSMUCum5556j48ePG73fiXgIkDF4CBAzVkd/TwIi0pmEfOTIEUREROCRxcxE0tPTUVRUhG3btmmXNTU1YeXKlUhPT8e9e/eMblcfHh4OADh69Giv5Pok4O8zM1ZHf0+9enWb6bp9+zaio6P1zplaW1vD3d0darUaarXa7Pf0YIz922N/dftxIhaLIRQKsW/fPlRUVECtVuPmzZvYu3cv1q5di8jISJOdu2WMmQYXyT5kb2+PU6dO4ZdffoGvry/EYjGGDRuGjIwMfPjhh/j000/NnSJ7RG5uLuLj4/X6pr7xxht6scHBwZDJZLC0tMTw4cMN3jfGXLZs2QJ/f3+IxWJIpVL4+/sjISFB7zavZ8+exaRJkyCRSODi4oIVK1boDYszJqYrWltbsW3bNgQGBrb7vFqtRnJyMry9vWFtbQ0HBweMGDECJSUl+OKLL7Bly5beaQT96ElKPtH9+OALN53ryfd57dq1NHPmTKqurtYuk8vl2gtvX375pd5rcnJydO5V09/MmDGDPvroI1IqlVRTU0NHjhwhoVBIL7/8sjbml19+IbFYTAkJCVRbW0vff/89DRo0iBYsWNClmK74/fffadKkSQSAnn/++XZjQkNDyc/Pj86fP09qtZpu3rxJISEh2v4QaWlpNGXKFLp37163cuB73DyBzFkkVSoVBQQE9Pt1d/f7vHnzZvL19aX6+nqd5XK5nA4cOEAWFhbk6upK9+/f13m+vxfJ0NBQvW0KDw8nAHTz5k0iIoqIiCBPT0+dG3ClpKSQQCCg3377zegYY+Xn59OcOXNo//79NHr06HaL5MGDB0kgEFBBQYHBdUVHR1NAQACp1eou5UDE97hhJrZv3z4olcrHbt3GuHLlChISErB+/Xq9efbAwwYmMTExuHHjBj744AMzZNh9mZmZetvk6uoKAKitrUVzczOys7MxZcoUnR6q06ZNAxEhKyvLqJiueP7553H8+HG8/vrrsLGxaTfmb3/7G8aOHdvp7WUTExORn59v0inRXCSfMkSE1NRUPPfc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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "execution_count": 19 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "5KdfAoHsGwzo" + }, + "source": [ + "### Train the LSTM" + ] + }, + { + "cell_type": "code", + "source": [ + "import tensorflow as tf\n", + "device_name = tf.test.gpu_device_name()" + ], + "metadata": { + "id": "FzggVO33rDLB" + }, + "execution_count": 20, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "rEN1vV4nG1V3", + "outputId": "3ad40a02-9660-40bd-ff47-44be61f15f79", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "source": [ + "# Train the LSTM on the training data\n", + "with tf.device('/device:GPU:0'):\n", + " history = model.fit(\n", + "\n", + " # Training data : features (review) and classes (positive or negative)\n", + " x_train, y_train,\n", + "\n", + " # Number of samples to work through before updating the\n", + " # internal model parameters via back propagation. The\n", + " # higher the batch, the more memory you need.\n", + " batch_size=256,\n", + "\n", + " # An epoch is an iteration over the entire training data.\n", + " epochs=10,\n", + "\n", + " # The model will set apart his fraction of the training\n", + " # data, will not train on it, and will evaluate the loss\n", + " # and any model metrics on this data at the end of\n", + " # each epoch.\n", + " validation_split=0.2,\n", + "\n", + " # Set verbose=1 if it is desired to have output printed.\n", + " # In some scenarios where output needs to be hidden, we\n", + " # set verbose=0.\n", + " verbose=1\n", + " )" + ], + "execution_count": 21, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Epoch 1/10\n", + "79/79 [==============================] - 15s 142ms/step - loss: 0.6549 - accuracy: 0.6346 - val_loss: 0.5275 - val_accuracy: 0.8044\n", + "Epoch 2/10\n", + "79/79 [==============================] - 11s 137ms/step - loss: 0.3858 - accuracy: 0.8536 - val_loss: 0.3611 - val_accuracy: 0.8550\n", + "Epoch 3/10\n", + "79/79 [==============================] - 9s 110ms/step - loss: 0.2497 - accuracy: 0.9064 - val_loss: 0.2867 - val_accuracy: 0.8856\n", + "Epoch 4/10\n", + "79/79 [==============================] - 6s 71ms/step - loss: 0.2124 - accuracy: 0.9237 - val_loss: 0.2991 - val_accuracy: 0.8852\n", + "Epoch 5/10\n", + "79/79 [==============================] - 6s 80ms/step - loss: 0.1663 - accuracy: 0.9428 - val_loss: 0.3147 - val_accuracy: 0.8894\n", + "Epoch 6/10\n", + "79/79 [==============================] - 5s 62ms/step - loss: 0.1428 - accuracy: 0.9520 - val_loss: 0.3265 - val_accuracy: 0.8806\n", + "Epoch 7/10\n", + "79/79 [==============================] - 4s 47ms/step - loss: 0.1197 - accuracy: 0.9620 - val_loss: 0.3169 - val_accuracy: 0.8816\n", + "Epoch 8/10\n", + "79/79 [==============================] - 4s 50ms/step - loss: 0.1042 - accuracy: 0.9663 - val_loss: 0.4370 - val_accuracy: 0.8748\n", + "Epoch 9/10\n", + "79/79 [==============================] - 3s 34ms/step - loss: 0.0978 - accuracy: 0.9675 - val_loss: 0.4231 - val_accuracy: 0.8768\n", + "Epoch 10/10\n", + "79/79 [==============================] - 4s 49ms/step - loss: 0.0804 - accuracy: 0.9746 - val_loss: 0.3690 - val_accuracy: 0.8754\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "# import\n", + "import matplotlib.pyplot as plt" + ], + "metadata": { + "id": "NqsGmotUwWym" + }, + "execution_count": 22, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "# plot history\n", + "plt.figure(figsize=(10,4))\n", + "plt.subplot(1, 2, 1)\n", + "plt.plot(history.history['loss'])\n", + "plt.plot(history.history['val_loss'])\n", + "plt.legend(['train', 'test'])\n", + "plt.title('loss')\n", + "plt.subplot(1, 2, 2)\n", + "plt.plot(history.history['accuracy'])\n", + "plt.plot(history.history['val_accuracy'])\n", + "plt.legend(['train', 'test'])\n", + "plt.title('accuracy')\n", + "plt.show()" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 391 + }, + "id": "e3asOXqDv9Je", + "outputId": "2ca13a99-7cc3-4420-a26d-7fc9dd23544a" + }, + "execution_count": 23, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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9Ons2LGD559/nl9//ZUlS5bU/8WIiEi9++qrr7jzzjt59dVXufHGG7nssssYNmxYhUqdnTt3Jj4+/ozn6ty5M7t376a4uLjKNq1atQKocP6yEQfVsW3bNvbs2cOrr77KY489xjXXXENMTAzh4eHl2nXq1AngrHED3HLLLVgsFj777DM++eQTXF1dGTNmTLVjEqkJJToitRATE4Obmxv/+c9/sNvtjv3vvvsuWVlZXHnllQBkZ2dTUlJS7tg+ffpgNpspLCwE4Pjx4xXO379/fwBHGxERadosFku5zwuA119/vUIPyw033MCWLVsqLcNcdvwNN9xAeno6b7zxRpVtOnTogMViYdmyZeXuf/PNN2sU8+nnLLv92muvlWsXHBzMRRddxJw5c0hMTKw0njJBQUFcfvnlfPzxx3zyySeMGjWKoKCgasckUhMqLy1SC8HBwUyePJlnnnmGUaNGcfXVV7N7927efPNNBg8e7OiG//XXX5k0aRI33XQT3bp1o6SkhI8++giLxcINN9wAwLPPPsuyZcu48sor6dChA6mpqbz55pu0a9eOYcOGOfMyRUSkjlx11VV89NFH+Pv707NnT1avXs0vv/xC69aty7X729/+xldffcVNN93E3XffzcCBAzl+/Djff/89s2fPpl+/fowbN44PP/yQuLg41q1bx/Dhw8nLy+OXX37hgQce4JprrsHf35+bbrqJ119/HZPJROfOnfnhhx9ITU2tdszdu3enc+fOPProoyQlJeHn58fXX3/NiRMnKrT9z3/+w7BhwzjvvPO477776NixIwcPHmT+/Pls3ry5XNtx48Zx4403AvDcc8/V/MkUqS7nFXwTaVpOLy9d5o033rB3797d7urqag8NDbVPnDjRfuLECcf9+/fvt9999932zp072z08POyBgYH2Sy65xP7LL7842ixevNh+zTXX2MPDw+1ubm728PBw+9ixY+179uxpwKsTEZH6dOLECfv48ePtQUFBdh8fH3tsbKx9165d9g4dOtjvvPPOcm0zMjLskyZNsrdt29bu5uZmb9eunf3OO++0p6enO9rk5+fbn3jiCXvHjh3trq6u9rCwMPuNN95o37dvn6NNWlqa/YYbbrB7eXnZW7VqZf/zn/9sj4+Pr7S8tLe3d6Vx79ixwx4TE2P38fGxBwUF2SdMmGDfsmVLhXPY7XZ7fHy8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\n" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "## Save Model" + ], + "metadata": { + "id": "PCpCTao7xraz" + } + }, + { + "cell_type": "code", + "source": [ + "model.save(\"lstm_model_sentiment_classification_on_imdb.h5\")" + ], + "metadata": { + "id": "VmMk6sElxsEW" + }, + "execution_count": 24, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "rpCS2-jFH1KY" + }, + "source": [ + "## Evaluate model with test data and view results" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "nPnfxwbnITqV", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "44778322-f85d-44d6-9bae-a39a1ad5442e" + }, + "source": [ + "# Get Model Predictions for test data\n", + "from sklearn.metrics import classification_report\n", + "predicted_classes = model.predict(x_test)" + ], + "execution_count": 25, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "782/782 [==============================] - 4s 4ms/step\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "predicted_classes = (predicted_classes > 0.5).astype(int)" + ], + "metadata": { + "id": "OZQ3GKjA4Pn7" + }, + "execution_count": 26, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "print(classification_report(y_test, predicted_classes, target_names=class_names))" + ], + "metadata": { + "id": "mvhWpt9n4NqL", + "outputId": "1f10b4ef-3ba2-424a-93e3-67151c7530f8", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "execution_count": 27, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + " precision recall f1-score support\n", + "\n", + " Negative 0.86 0.87 0.86 12500\n", + " Positive 0.87 0.85 0.86 12500\n", + "\n", + " accuracy 0.86 25000\n", + " macro avg 0.86 0.86 0.86 25000\n", + "weighted avg 0.86 0.86 0.86 25000\n", + "\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "CkfHCIVHrJni" + }, + "source": [ + "## View some incorrect predictions\n", + "\n", + "Lets have a look at some of the incorrectly classified reviews. For readability we remove the padding.\n", + "\n" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "bwKLBwBbp7zg", + "outputId": "b69383d7-a00c-421e-b1ee-7113b5281268", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "source": [ + "predicted_classes_reshaped = np.reshape(predicted_classes, 25000)\n", + "\n", + "incorrect = np.nonzero(predicted_classes_reshaped!=y_test)[0]\n", + "\n", + "# We select the first 10 incorrectly classified reviews\n", + "for j, incorrect in enumerate(incorrect[0:20]):\n", + "\n", + " predicted = class_names[predicted_classes_reshaped[incorrect]]\n", + " actual = class_names[y_test[incorrect]]\n", + " human_readable_review = decode_review(x_test[incorrect])\n", + "\n", + " print(\"Incorrectly classified Test Review [\"+ str(j+1) +\"]\")\n", + " print(\"Test Review #\" + str(incorrect) + \": Predicted [\"+ predicted + \"] Actual [\"+ actual + \"]\")\n", + " print(\"Test Review Text: \" + human_readable_review.replace(\" \", \"\"))\n", + " print(\"\")" + ], + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Incorrectly classified Test Review [1]\n", + "Test Review #2: Predicted [Negative] Actual [Positive]\n", + "Test Review Text: alive simultaneously while for his part is depicted as a white guy in the clouds who looks like he'd rather be taking a when sends them a tree like god who regards them the decide that this is no improvement and demand a different king irritated sends them a br br delighted with this looking new king who towers above them the welcome him with a of dressed the mayor steps forward to hand him the key to the as cameras record the event to everyone's horror the promptly eats the mayor and then goes on a merry rampage citizens at random a title card reads news of the king's throughout the kingdom when the now terrified once more for help he loses his temper and their community with lightning the moral of our story delivered by a hapless frog just before he is eaten is let well enough alone br br considering the time period when this startling little film was made and considering the fact that it was made by a russian at the height of that country's civil war it would be easy to see this as a about those events may or may not have had turmoil in mind when he made but whatever his choice of material the film stands as a tale of universal could be the soviet union italy germany or japan in the 1930s or any country of any era that lets its guard down and is overwhelmed by it's a fascinating film even a charming one in its macabre way but its message is no joke\n", + "\n", + "Incorrectly classified Test Review [2]\n", + "Test Review #8: Predicted [Positive] Actual [Negative]\n", + "Test Review Text: hollywood had a long love affair with bogus nights tales but few of these products have stood the test of time the most memorable were the jon hall maria films which have long since become camp this one is filled with dubbed songs and slapstick it's a truly crop of corn and pretty near today it was nominated for its imaginative special effects which are almost in this day and age mainly of trick photography the only outstanding positive feature which survives is its beautiful color and clarity sad to say of the many films made in this genre few of them come up to alexander original thief of almost any other nights film is superior to this one though it's a loser\n", + "\n", + "Incorrectly classified Test Review [3]\n", + "Test Review #17: Predicted [Positive] Actual [Negative]\n", + "Test Review Text: ed mitchell is a teenager who lives for his job at good a small but friendly neighborhood stand while his buddy thompson also works there but lack single minded devotion to his job he's there because he accidentally destroyed the car of his teacher mr and has to raise money to pay the when a fast foot chain opens across the street it looks like good is history until ed a secret that brings hundreds of new customers to their door however the manager of kurt jan is determined to get his hands on the and put good out of business meanwhile ed and must rescue the world's oldest fast food employee from the demented hills asylum and ed might just find love with jackson if he could take his mind off the long enough to pay attention to her good is a comedy directed for kids decent story acting and overall a pretty harmless kids movie\n", + "\n", + "Incorrectly classified Test Review [4]\n", + "Test Review #32: Predicted [Positive] Actual [Negative]\n", + "Test Review Text: if you have never read the classic science fiction novel this mini series is based on it may actually be good unfortunately if you are a fan of the book you probably won't be able to watch more than the first hour or two all of the political intrigue has been taken out of the film the most important scenes from the book have been taken out characters motivations have been changed completely and words from the wrong characters mouths where in the novel paul was a teen age boy with incredible political skill and a great understanding of the way the world worked in this film he is hot headed and and frustrated avoid this movie at all costs\n", + "\n", + "Incorrectly classified Test Review [5]\n", + "Test Review #49: Predicted [Negative] Actual [Positive]\n", + "Test Review Text: i can't understand why imdb users would rate this movie 5 2 10 it really is great very funny i would strongly recommend this movie for all of you adults teenagers and especially children br br the story is about a 14 year old kid who always tell lie at home and school one day he had his of writing a 1000 word story but he didn't so the teacher told him to write it and gave her in 3 hours or he would have to go to summer school yep he wrote it in 2 45 big fat liar i think it was a story of himself on the way to the school he hit a of a famous hollywood producer and he gave him a ride but the kid forgot the story in the he told his parents and the teacher but of course they did not believe him and the movie producer he took the kid's story as his new movie big fat liar when the kid saw the trailer of the movie he told his parents he had written it but they didn't believe so he and his friend had to go to l a to prove one thing the truth is never overrated br br enjoy this great movie you won't be disappointed don't trust the 5 2 10 rate it should be 9 10 believe me br br p s so sorry my english isn't good enough to make a better comment\n", + "\n", + "Incorrectly classified Test Review [6]\n", + "Test Review #66: Predicted [Positive] Actual [Negative]\n", + "Test Review Text: i believe there is a line in film that cannot be crossed the line of making a movie purely for your own emotional needs and i feel that this is what has unintentionally happened here br br by his own admission the director had no technical experience at all and sadly this makes the movie come off looking like nothing more than a year twelve media project br br as for any that this movie should be studied at school or that all teenagers should watch it not sure there either because there is a very dangerous line at the end i too have been in a place where i have thought that someone who no longer has to is but as an adult i do worry that this line could be influential on a young viewer that was in a vulnerable frame of mind might be in there to promote discussion but again it reflects no possibility of redemption or joy in this story as a whole in fact it almost that there is more sadness to come br br i haven't seen elephant but i just might go find it given all the comparisons here br br nothing personal here guys i do hope you can make another movie someday and we all have to start out somewhere so forgive me if i've been too harsh i am glad that you are proud of what you created which in the end is what life is all about it's not a movie i would recommend though br br oh i did like the way the time frames often thought that was an interesting way to film br br but the whole its the quiet ones you have to watch we already know that\n", + "\n", + "Incorrectly classified Test Review [7]\n", + "Test Review #80: Predicted [Negative] Actual [Positive]\n", + "Test Review Text: with the obvious exception of fools horses this was in my opinion david finest series br br coming straight after his tv debut on not your set ' these 13 episodes revealed a of comic timing not seen since the old silent movie days by comparison open all hours and that awful series man' did not come close br br i believe jason banned the series being repeated because it showed him at his shame on him a new generation deserves to enjoy this the series actually in the ratings but that is most likely because it was shown against 'the which aired on bbc at the same time before were br br btw i have only just noticed that his long suffering assistant spencer was played by mark alan off street i am amazed he didn't try to murder edgar \n", + "\n", + "Incorrectly classified Test Review [8]\n", + "Test Review #100: Predicted [Negative] Actual [Positive]\n", + "Test Review Text: a quick glance at the premise of this film would seem to indicate just another dumb slash fest the type where sex equals death and the actors are all annoying stereotypes you actually want to die however delivers considerably more br br rather than focus on bare flesh and gore though there is a little of each no sex however the flick focuses on delivering impending dread tension amidst a lovely backdrop these feelings are further by a cast of realistically likable characters and that are more amoral than cardboard of evil oh yeah george kennedy is here too and when is that not a good thing br br if you liked wrong turn then watch this to see where much of its' came from\n", + "\n", + "Incorrectly classified Test Review [9]\n", + "Test Review #101: Predicted [Negative] Actual [Positive]\n", + "Test Review Text: is the first of its kind in turkish cinema and it's way better than i expected those people who say it's neither scary nor funny have a point it's not all that great indeed but it must be kept in mind that everyone involved with the movie is rather amateur so it's basically a maiden voyage and comparing this one to other films such as the 1st class garbage propaganda this movie is pretty damn good br br one thing that must be said it deals with the life in turkey very realistically that's exactly how it goes the scenes that are meant to scare are somewhat cheap and most of them even if not all but that religion lesson scene made me laugh in tears and performs the best acting of this flick as a religion teacher br br it's not a waste of your time go and watch it you'll find it rather amusing especially if you know turkey enough to relate to turkish school lives\n", + "\n", + "Incorrectly classified Test Review [10]\n", + "Test Review #115: Predicted [Positive] Actual [Negative]\n", + "Test Review Text: while the design and locations and photography are strong in this film it is a turgid and melodramatic affair which demonstrates the limits of cinema to convey truth br br the case is the use of the soundtrack music a mix of and andrew lloyd that plays constantly and and would have made max at its over use as it the audience how difficult how how tortured it is to be an artist and then it really counts the story the details at the end br br this and exploitation of emotions was once well by peter about a book this is not writing this is barbara precisely the same critique can be made of this film a vanity project\n", + "\n", + "Incorrectly classified Test Review [11]\n", + "Test Review #121: Predicted [Positive] Actual [Negative]\n", + "Test Review Text: i actually enjoyed if not for much more than mocking the production values dennis hopper was just fine although i wonder if he would have signed on the project had he seen the special effects they used and furthermore what was with the scene with the ninja that was just completely out of pace perhaps someone came up with the bright idea mid shooting oh well this movie is great if you're drunk and need a good laugh cheers\n", + "\n", + "Incorrectly classified Test Review [12]\n", + "Test Review #126: Predicted [Negative] Actual [Positive]\n", + "Test Review Text: this was answer to fatal attraction and this is a classic film in its own right was good and so was sunny but it was shah rukh khan who shot to fame as the stalker since then he has become a favourite of the le to and de india shah rukh at first appears to be a villain but then towards the end you start to sympathize with him the scripting was superb and the songs were my favourites are too mere and br br after the dismal failure of the underrated fought back with the dialogues were memorable the k k dialogue is often repeated since has slipped bit to was bad but he redeemed himself slightly with which was far far better this was last masterpiece\n", + "\n", + "Incorrectly classified Test Review [13]\n", + "Test Review #134: Predicted [Negative] Actual [Positive]\n", + "Test Review Text: the is a very worthwhile addition to recent re releases from the soviet union director 1977 film the moral of and honor in german occupied russia during the second world war on foot and in a two members of a soviet group leave to locate supplies and are captured by nazi soldiers the focus of the movie is on how each man handles or his moral one chooses dignity and integrity while the other for collaboration with the enemy however in the end he cannot by his selfish decision the film makes much use of slow wide angle pans which shift to extreme closeups and highlight the spiritual within the souls of each man this is not a great film but it does effectively portray an intense moral dilemma against the backdrop of a harsh and soviet wilderness\n", + "\n", + "Incorrectly classified Test Review [14]\n", + "Test Review #146: Predicted [Negative] Actual [Positive]\n", + "Test Review Text: i was shocked to learn that jimmy has left this show does anyone know why i regard james as one of the all time and wasn't surprised he ended up on tv which can be better than the crap you see on the big screen the stories are slick and the camera faster than a bullet forget the rest of the cast james vanessa molly josh mitch also can anyone tell me why on earth there's a crap theme tune on the dvd sets but of a little less conversation is used on the initial nbc does it not make sense to use a tune that you would associate with the gambling of america for dvd releases\n", + "\n", + "Incorrectly classified Test Review [15]\n", + "Test Review #147: Predicted [Positive] Actual [Negative]\n", + "Test Review Text: having enjoyed neil writing especially his collaboration with in the dream hunters in the past i figured to be a sure thing and was very disappointed the beginning live action section of the movie was intriguing enough the relationships between the characters was believable and easy to empathize with and i loved the sets the and artwork the subsequent computer generated scenes however were excruciating the dialogue was awkward and pretentious the interaction between the live actors and the cgi horrifying events occurred for the reasons and most events seemed superfluous to whatever plot may have existed i only watched the first twenty or thirty minutes of the movie so i'm not exactly an authority but i strongly recommend that you don't watch any of it at all and stick with strong written work\n", + "\n", + "Incorrectly classified Test Review [16]\n", + "Test Review #152: Predicted [Positive] Actual [Negative]\n", + "Test Review Text: were i not familiar with dozens of islands and cities in and if i had never enjoyed the friendship of these life people i might have believed that this had something to do with modern as a professor at a new jersey state college let me assure you that i am familiar with the history of the period covered in the film indeed my wife's uncle was murdered by the during the communist grab for power my mother in law lived through the italian invasion and german barely these characters on the screen speak greek they listen to greek music but who are they no they are not even vaguely greek of course they are not people at all but simply they are that which the artist when life does not entirely fit or is to his perception of how it was or should have been all represent some aspect of post wwi that greater outside forces to a fate they didn't deserve as we in the late 70's in america the revolution didn't happen for an artist this is no joke it's in fact grounds to put us through two and a half hours of torment and it's all because the various powers of guards in different colored uniforms didn't allow the generation after the of to follow the call of peace and freedom the music of and his fellow musicians i e the movement the cause this dark surreal the true and heroic efforts of the greek people to sustain their lust for life through the of the 20th century to achieve more than any of their neighbors to have become so politically evolved and integrated\n", + "\n", + "Incorrectly classified Test Review [17]\n", + "Test Review #154: Predicted [Positive] Actual [Negative]\n", + "Test Review Text: i saw this movie many years ago and just for kicks decided to rent it and watch it again the plot is a copy from fright night i did like the hairy vampire and the bug eating driver otherwise it was not good at all\n", + "\n", + "Incorrectly classified Test Review [18]\n", + "Test Review #156: Predicted [Positive] Actual [Negative]\n", + "Test Review Text: i rented this when it came out on video in 1995 after it again my idea about it hasn't changed much br br i was an adult then and i'm still an adult now lol br br the illogical elements mentioned by other reviewers didn't bother me this isn't a documentary it's a fantasy story where animals can talk br br while i didn't care for much of the songs i liked the one at the end of the picture where it's sang by barry and another person br br some people seem to make an excuse for it's primitive animation by saying that cgi wasn't used often in animated features but let's not forget that the lion king was released about a year earlier and that packed possibly more excellence than any animated feature that came before it br br but i think it's pretty fair to say that the and the was made on the cheap while the lion king wasn't br br the high points for me in 1995 as well as today is the suspense generated by the few dangerous mostly underwater chase scenes br br i also liked the opening scene which takes place on a music notes page and a little bit of the love story but most of the time the story dragged on and was boring br br worth a look if you like animation but if you're an adult and not a risk taker go get another walt disney production instead of this\n", + "\n", + "Incorrectly classified Test Review [19]\n", + "Test Review #174: Predicted [Negative] Actual [Positive]\n", + "Test Review Text: i'm not a fan of scratching but i really this movie it gave me a real insight into a world i never had a clue existed and what else is a documentary for funny clever hip just like previous film hype about the music scene\n", + "\n", + "Incorrectly classified Test Review [20]\n", + "Test Review #176: Predicted [Negative] Actual [Positive]\n", + "Test Review Text: primarily saved from being eaten by demonic flying creatures one of his student the monkey god managed to get him out from the battle in the nick of time but were in turn captured by the demons and cast into the deep throat of a dragon locked up in that particular br br the monk in a small village where he found the so called ugly daughter who fell in love over him at first sight though ugly she did not let her appearance be casted aside from getting to him however a quest for his three students soon turn out to be filled with obstacles and each of which turned out to get worse with following the monk problems deeper and this is where conflicts between the relationship gets worse br br the rest of the tale would be left at your own but suffice to say this film does not depict the typical storyline of the book it is more for those who wants to seek out for a funny and light picture of what journey to the west and the love obstacles really mean br br towards the very end the whole summary could be described with only one word and that is love the monk went to show the heavenly gates the palace and himself how love can overcome even the worst fear of all and deemed fit as the most powerful weapon that can be used against any enemy of superior powers br br a wonderfully created and funny acts those who buys this ticket there would be of course no regrets at least from my side and those who were with me at the cinema that day watching the same film\n", + "\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "OlAfxIoTrtYa" + }, + "source": [ + "## Run your own text against the trained model\n", + "\n", + "This is a fun way to test out the limits of the trained model. To avoid getting errors - type in lower case only and do not use punctuation!\n", + "\n", + "You'll see the raw prediction from the model - basically a value between 0 and 1.\n", + "\n" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "UEKEB0DpD_8P", + "outputId": "762b25df-51ea-4b15-9883-5b68dfefda56", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "source": [ + "# Write your own review\n", + "# review = \"this was a terrible film with too much sex and violence i walked out halfway through\"\n", + "review = \"i hate this movie the plot is awful and i do not want to see the movie by this director ever again\"\n", + "\n", + "# Encode review (replace word with integers)\n", + "tmp = []\n", + "for word in review.split(\" \"):\n", + " tmp.append(word_index[word])\n", + "\n", + "# Ensure review is 500 words long (by padding or truncating)\n", + "tmp_padded = sequence.pad_sequences([tmp], maxlen=review_length)\n", + "\n", + "# Run your processed review against the trained model\n", + "rawprediction = model.predict(array([tmp_padded][0]))[0][0]\n", + "prediction = int(round(rawprediction))\n", + "\n", + "# Test the model and print the result\n", + "print(\"Review: \" + review)\n", + "print(\"Raw Prediction: \" + str(rawprediction))\n", + "print(\"Predicted Class: \" + class_names[prediction])" + ], + "execution_count": 28, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "1/1 [==============================] - 0s 20ms/step\n", + "Review: i hate this movie the plot is awful and i do not want to see the movie by this director ever again\n", + "Raw Prediction: 0.053640094\n", + "Predicted Class: Negative\n" + ] + } + ] + } + ] +} \ No newline at end of file