{ "nbformat": 4, "nbformat_minor": 0, "metadata": { "colab": { "name": "LSTM_Tutorial.ipynb", "provenance": [], "collapsed_sections": [] }, "kernelspec": { "name": "python3", "display_name": "Python...

1 answer below ยป

Must use google colab. Please design a LSTM-based recurrent neural network using python to complete the classification task for IMDB movie review sentiment classification dataset. Please submit your codes together with analysis about integrating convolutional neural network to the LSTM-based recurrent neural network in this task. You may use the LSTM tutorial attachment as a guide to creating your solution. Please run the code and then create a pdf for submission.




{ "nbformat": 4, "nbformat_minor": 0, "metadata": { "colab": { "name": "LSTM_Tutorial.ipynb", "provenance": [], "collapsed_sections": [] }, "kernelspec": { "name": "python3", "display_name": "Python 3" }, "accelerator": "GPU" }, "cells": [ { "cell_type": "code", "metadata": { "id": "rcTzbmQBYQB6" }, "source": [ "import tensorflow as tf\n", "from tensorflow.keras import datasets, layers, models, optimizers\n", "from tensorflow.keras.datasets import imdb\n", "from tensorflow.keras.models import Sequential\n", "from tensorflow.keras.optimizers import SGD, Adam\n", "from tensorflow.keras.layers import Input, LSTM, Dense, Embedding, Conv1D, MaxPooling1D\n", "from tensorflow.keras.preprocessing import sequence\n", "\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "import pandas as pd\n" ], "execution_count": 1, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "1sIigNQMi8WL", "colab": { "base_uri": "https://localhost:8080/" }, "outputId": "86c2aa2b-6030-463d-8f6a-58ec0b71671a" }, "source": [ "# load the dataset but only keep the top n words, zero the rest\n", "# The IMDB dataset is a set of 50,000 highly polarized reviews from the Internet Movie Database. Each set contains an equal number (50%) of positive and negative reviews. They are split into 25000 reviews each for training and testing\n", "top_words = 5000\n", "(x_train, y_train), (x_test, y_test) = imdb.load_data(num_words=top_words)" ], "execution_count": 2, "outputs": [ { "output_type": "stream", "text": [ ":6: VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray\n", "/usr/local/lib/python3.7/dist-packages/tensorflow/python/keras/datasets/imdb.py:159: VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray\n", " x_train, y_train = np.array(xs[:idx]), np.array(labels[:idx])\n", "/usr/local/lib/python3.7/dist-packages/tensorflow/python/keras/datasets/imdb.py:160: VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray\n", " x_test, y_test = np.array(xs[idx:]), np.array(labels[idx:])\n" ], "name": "stderr" } ] }, { "cell_type": "code", "metadata": { "id": "ozhJjRoQrPbl" }, "source": [ "# truncate and pad input sequences to ensure the vectors have the same length although the length of the individual content can be different\n", "max_review_length = 500\n", "x_train = sequence.pad_sequences(x_train, maxlen=max_review_length)\n", "x_test = sequence.pad_sequences(x_test, maxlen=max_review_length)" ], "execution_count": 3, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "esSqg8N2sPSo", "colab": { "base_uri": "https://localhost:8080/" }, "outputId": "603ee06b-6ca3-4328-e67b-378e4e35ef7b" }, "source": [ "# Build LSTM\n", "# The first layer is the Embedded layer that uses the vectors with length of 32 to present each word\n", "# The second layer is the LSTM layer with 100 units\n", "# The output layer is Dense layer since this is a classification problem. Because this is a binary classification, we can use sigmoid instead of softmax\n", "model = Sequential()\n", "embedding_vecor_length = 32\n", "model.add(Embedding(top_words, embedding_vecor_length, input_length=max_review_length))\n", "model.add(LSTM(100))\n", "model.add(Dense(1, activation='sigmoid'))\n", "print(model.summary())" ], "execution_count": 4, "outputs": [ { "output_type": "stream", "text": [ "Model: \"sequential\"\n", "_________________________________________________________________\n", "Layer (type) Output Shape Param # \n", "=================================================================\n", "embedding (Embedding) (None, 500, 32) 160000 \n", "_________________________________________________________________\n", "lstm (LSTM) (None, 100) 53200 \n", "_________________________________________________________________\n", "dense (Dense) (None, 1) 101 \n", "=================================================================\n", "Total params: 213,301\n", "Trainable params: 213,301\n", "Non-trainable params: 0\n", "_________________________________________________________________\n", "None\n" ], "name": "stdout" } ] }, { "cell_type": "code", "metadata": { "id": "GHIW82-pwXu4", "colab": { "base_uri": "https://localhost:8080/" }, "outputId": "5a494da4-54b2-4ca9-ea93-b4f77f894604" }, "source": [ "# Compile and train the learning model\n", "adam = optimizers.Adam(lr=0.001)\n", "\n", "model.compile(adam, loss='binary_crossentropy', metrics=['accuracy'])\n", "\n", "history = model.fit(x_train, y_train, validation_data=(x_test, y_test), epochs=3, batch_size=64)" ], "execution_count": 5, "outputs": [ { "output_type": "stream", "text": [ "Epoch 1/3\n",
Answered Same DayApr 15, 2021

Answer To: { "nbformat": 4, "nbformat_minor": 0, "metadata": { "colab": { "name": "LSTM_Tutorial.ipynb",...

Sandeep Kumar answered on Apr 16 2021
146 Votes
{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"kernelspec": {
"name": "python394jvsc74a57bd081118431cc388d258ed977b65143603a98f8ad6ed776c173758a3af876bc6de9",
"display_name": "Python 3.9.4 64-bit"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.4-final"
},
"colab": {
"name": "IMDB movie review Modeling DNN CNN LSTM Keras.ipynb",
"provenance": []
}
},
"cells": [
{
"cell_type": "code",
"metadata": {
"id": "yJDfTCHvULWg"
},
"source": [
"from keras.datasets import imdb\n",
"%matplotlib inline\n",
"import numpy as np\n",
"import pandas as pd\n",
"from matplotlib import cm\n",
"import matplotlib.pyplot as plt\n",
"import seaborn as sns\n",
"import os\n",
"import time"
],
"execution_count": 28,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "0Lf43x1oULW7"
},
"source": [
"from keras.preprocessing import sequence\n",
"from keras.models import Sequential\n",
"from keras.layers import Dense, Dropout, Activation\n",
"from keras.layers import Embedding\n",
"from keras.layers import Conv1D, GlobalMaxPooling1D\n",
"from keras.callbacks import EarlyStopping\n",
"from keras import models"
],
"execution_count": 29,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 0
},
"id": "9Z2RhfpPULW-",
"outputId": "dffec856-2810-49de-b253-5c0d3bb524e6"
},
"source": [
"\n",
"(X_train, y_train), (X_test, y_test) = imdb.load_data()\n",
"X = np.concatenate((X_train, X_test), axis=0)\n",
"y = np.concatenate((y_train, y_test), axis=0)"
],
"execution_count": 30,
"outputs": [
{
"output_type": "stream",
"text": [
":6: VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray\n",
"/usr/local/lib/python3.7/dist-packages/tensorflow/python/keras/datasets/imdb.py:159: VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray\n",
" x_train, y_train = np.array(xs[:idx]), np.array(labels[:idx])\n",
"/usr/local/lib/python3.7/dist-packages/tensorflow/python/keras/datasets/imdb.py:160: VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray\n",
" x_test, y_test = np.array(xs[idx:]), np.array(labels[idx:])\n"
],
"name": "stderr"
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 0
},
"id": "JJXh9NkDULW_",
"outputId": "27ee5cf9-43e0-4501-acdb-532c3e635253"
},
"source": [
"##training data shape review\n",
"print(\"Training data: \")\n",
"print(X.shape)\n",
"print(y.shape)\n",
"print(\"Classes: \")\n",
"print(np.unique(y))"
],
"execution_count": 31,
"outputs": [
{
"output_type": "stream",
"text": [
"Training data: \n",
"(50000,)\n",
"(50000,)\n",
"Classes: \n",
"[0 1]\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 0
},
"id": "GnKYq1bVULXB",
"outputId": "0adaa77d-9b67-4e58-ad7d-1f62da898acb"
},
"source": [
"print(\"Number of words: \")\n",
"print(len(np.unique(np.hstack(X))))"
],
"execution_count": 32,
"outputs": [
{
"output_type": "stream",
"text": [
"Number of words: \n",
"88585\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 299
},
"id": "ffaOSrvEULXC",
"outputId": "10a0455a-d45f-4a7b-8c0c-dc1456211e71"
},
"source": [
"print(\"Review length: \")\n",
"result = [len(x) for x in X]\n",
"print(\"Mean %.2f words (%f)\" % (np.mean(result), np.std(result)))\n",
"# plot review length\n",
"plt.boxplot(result)\n",
"plt.show()"
],
"execution_count": 33,
"outputs": [
{
"output_type": "stream",
"text": [
"Review length: \n",
"Mean 234.76 words (172.911495)\n"
],
"name": "stdout"
},
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"
"
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "lRyNiW0sULXE"
},
"source": [
"#####Analysis#####"
],
"execution_count": 34,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 0
},
"id": "6gnnvsvvULXF",
"outputId": "ff1c4c17-c31d-44c1-c2e5-524a636ff310"
},
"source": [
"(train_data, train_labels), (test_data, test_labels) = imdb.load_data(num_words=5000)"
],
"execution_count": 35,
"outputs": [
{
"output_type": "stream",
"text": [
":6: VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray\n",
"/usr/local/lib/python3.7/dist-packages/tensorflow/python/keras/datasets/imdb.py:159: VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray\n",
" x_train, y_train = np.array(xs[:idx]), np.array(labels[:idx])\n",
"/usr/local/lib/python3.7/dist-packages/tensorflow/python/keras/datasets/imdb.py:160: VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray\n",
" x_test, y_test = np.array(xs[idx:]), np.array(labels[idx:])\n"
],
"name": "stderr"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "JBanO5PMULXG"
},
"source": [
"def vectorize_sequences(sequences, dimension=5000):\n",
" # Create an all-zero matrix of shape (len(sequences), dimension)\n",
" results = np.zeros((len(sequences), dimension))\n",
" for i, sequence in enumerate(sequences):\n",
" results[i, sequence] = 1. # set specific indices of results[i] to 1s\n",
" return results\n",
"\n",
"# Our vectorized training data\n",
"x_train = vectorize_sequences(train_data)\n",
"# Our vectorized test data\n",
"x_test = vectorize_sequences(test_data)"
],
"execution_count": 36,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "m2UgUmlGULXI"
},
"source": [
"# Our vectorized labels one-hot encoder\n",
"y_train = np.asarray(train_labels).astype('float32')\n",
"y_test = np.asarray(test_labels).astype('float32')"
],
"execution_count": 37,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "995zJLPtULXJ"
},
"source": [
"from keras import layers\n",
"from keras import models\n",
"\n",
"model = models.Sequential()\n",
"model.add(layers.Dense(32, activation='relu', input_shape=(5000,)))\n",
"model.add(layers.Dense(32, activation='relu',))\n",
"model.add(layers.Dense(1, activation='sigmoid'))"
],
"execution_count": 38,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "u6V3sbfeULXK"
},
"source": [
"#Set validation set aside\n",
"\n",
"x_val = x_train[:10000]\n",
"partial_x_train = x_train[10000:]\n",
"\n",
"y_val = y_train[:10000]\n",
"partial_y_train = y_train[10000:]"
],
"execution_count": 39,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "gUl463vOULXL"
},
"source": [
"model.compile(optimizer='adam',\n",
" loss='binary_crossentropy',\n",
" metrics=['acc'])"
],
"execution_count": 40,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 0
},
"id": "Q41E98NWULXM",
"outputId": "f5a27d70-0896-4f4a-cfe3-54d3642afb56"
},
"source": [
"start_time_m1 = time.time()\n",
"history = model.fit(partial_x_train,\n",
" partial_y_train,\n",
" epochs=20,\n",
" batch_size=512,\n",
" validation_data=(x_val, y_val))\n",
"total_time_m1 = time.time() - start_time_m1\n",
"\n",
"print(\"The Dense Convolutional Neural Network 1 layer took %.4f seconds to train.\" % (total_time_m1))"
],
"execution_count": 41,
"outputs": [
{
"output_type": "stream",
"text": [
"Epoch 1/20\n",
"30/30 [==============================] - 1s 34ms/step - loss: 0.6197 - acc: 0.6813 - val_loss: 0.3706 - val_acc: 0.8568\n",
"Epoch 2/20\n",
"30/30 [==============================] - 1s 25ms/step - loss: 0.3011 - acc: 0.8871 - val_loss: 0.2959 - val_acc: 0.8813\n",
"Epoch 3/20\n",
"30/30 [==============================] - 1s 25ms/step - loss: 0.2059 - acc: 0.9258 - val_loss: 0.3023 - val_acc: 0.8825\n",
"Epoch 4/20\n",
"30/30 [==============================] - 1s 44ms/step - loss: 0.1605 - acc: 0.9426 - val_loss: 0.3152 - val_acc: 0.8759\n",
"Epoch 5/20\n",
"30/30 [==============================] - 1s 25ms/step - loss: 0.1310 - acc: 0.9543 - val_loss: 0.3386 - val_acc: 0.8757\n",
"Epoch 6/20\n",
"30/30 [==============================] - 1s 24ms/step - loss: 0.1130 - acc: 0.9656 - val_loss: 0.3741 - val_acc: 0.8709\n",
"Epoch 7/20\n",
"30/30 [==============================] - 1s 24ms/step - loss: 0.0872 - acc: 0.9734 - val_loss: 0.3975 - val_acc: 0.8658\n",
"Epoch 8/20\n",
"30/30 [==============================] - 1s 25ms/step - loss: 0.0708 - acc: 0.9801 - val_loss: 0.4328 - val_acc: 0.8649\n",
"Epoch 9/20\n",
"30/30 [==============================] - 1s 25ms/step - loss: 0.0507 - acc: 0.9895 - val_loss: 0.4745 - val_acc: 0.8625\n",
"Epoch 10/20\n",
"30/30 [==============================] - 1s 24ms/step - loss: 0.0345 - acc: 0.9959 - val_loss: 0.5124 - val_acc: 0.8636\n",
"Epoch 11/20\n",
"30/30 [==============================] - 1s 24ms/step - loss: 0.0260 - acc: 0.9973 - val_loss: 0.5605 - val_acc: 0.8575\n",
"Epoch 12/20\n",
"30/30 [==============================] - 1s 24ms/step - loss: 0.0199 - acc: 0.9990 - val_loss: 0.5915 - val_acc: 0.8603\n",
"Epoch 13/20\n",
"30/30 [==============================] - 1s 25ms/step - loss: 0.0136 - acc: 0.9994 - val_loss: 0.6290 - val_acc: 0.8579\n",
"Epoch 14/20\n",
"30/30 [==============================] - 1s 24ms/step - loss: 0.0100 - acc: 0.9994 - val_loss: 0.6548 - val_acc: 0.8587\n",
"Epoch 15/20\n",
"30/30 [==============================] - 1s 24ms/step - loss: 0.0074 - acc: 0.9999 - val_loss: 0.6876 - val_acc: 0.8575\n",
"Epoch 16/20\n",
"30/30 [==============================] - 1s 24ms/step - loss: 0.0058 - acc: 1.0000 - val_loss: 0.7081 - val_acc: 0.8595\n",
"Epoch 17/20\n",
"30/30 [==============================] - 1s 24ms/step - loss: 0.0044 - acc: 0.9999 - val_loss: 0.7309 - val_acc: 0.8581\n",
"Epoch 18/20\n",
"30/30 [==============================] - 1s 24ms/step - loss: 0.0037 - acc: 1.0000 - val_loss: 0.7539 - val_acc: 0.8577\n",
"Epoch 19/20\n",
"30/30 [==============================] - 1s 24ms/step - loss: 0.0030 - acc: 1.0000 - val_loss: 0.7717 - val_acc: 0.8574\n",
"Epoch 20/20\n",
"30/30 [==============================] - 1s 25ms/step - loss: 0.0026 - acc: 1.0000 - val_loss: 0.7911 - val_acc: 0.8573\n",
"The Dense Convolutional Neural Network 1 layer took 16.1613 seconds to train.\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 0
},
"id": "t5teUXrBULXN",
"outputId": "7d47241e-9c94-410d-e275-e13c643ef5a4"
},
"source": [
"history_dict = history.history\n",
"history_dict.keys()"
],
"execution_count": 42,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"dict_keys(['loss', 'acc', 'val_loss', 'val_acc'])"
]
},
"metadata": {
"tags": []
},
"execution_count": 42
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 295
},
"id": "DU2YhCTQULXO",
"outputId": "c6029e3d-6e18-4dd3-cac5-c41a97376f9c"
},
"source": [
"import matplotlib.pyplot as plt\n",
"%matplotlib inline\n",
"\n",
"acc = history.history['acc']\n",
"val_acc = history.history['val_acc']\n",
"loss = history.history['loss']\n",
"val_loss = history.history['val_loss']\n",
"\n",
"epochs = range(1, len(acc) + 1)\n",
"\n",
"# \"bo\" is for \"blue dot\"\n",
"plt.plot(epochs, loss, 'bo', label='Training loss')\n",
"# b is for \"solid blue line\"\n",
"plt.plot(epochs, val_loss, 'b', label='Validation loss')\n",
"plt.title('Training and validation loss')\n",
"plt.xlabel('Epochs')\n",
"plt.ylabel('Loss')\n",
"plt.legend()\n",
"\n",
"plt.show()"
],
"execution_count": 43,
"outputs": [
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"
"
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 295
},
"id": "ANUlU5ttULXQ",
"outputId": "33509dc2-ab45-4916-e33f-c2fa4904bccd"
},
"source": [
"plt.clf() # clear figure\n",
"acc_values = history_dict['acc']\n",
"val_acc_values = history_dict['val_acc']\n",
"\n",
"plt.plot(epochs, acc, 'bo', label='Training acc')\n",
"plt.plot(epochs, val_acc, 'b', label='Validation acc')\n",
"plt.title('Training and validation accuracy')\n",
"plt.xlabel('Epochs')\n",
"plt.ylabel('Loss')\n",
"plt.legend()\n",
"\n",
"plt.show()"
],
"execution_count": 44,
"outputs": [
{
"output_type": "display_data",
"data": {
"image/png":...
SOLUTION.PDF

Answer To This Question Is Available To Download

Related Questions & Answers

More Questions ยป

Submit New Assignment

Copy and Paste Your Assignment Here