diff --git a/fourth-model/project.ipynb b/fourth-model/project.ipynb new file mode 100644 index 0000000..92dd566 --- /dev/null +++ b/fourth-model/project.ipynb @@ -0,0 +1,299 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 113, + "metadata": {}, + "outputs": [], + "source": [ + "\n", + " # load libraries\n", + " from keras.datasets import imdb\n", + " from keras.models import Sequential\n", + " from keras.layers import Dense, Flatten\n", + " from keras.layers.convolutional import Conv1D, MaxPooling1D\n", + " from keras.layers.embeddings import Embedding\n", + " from keras.preprocessing import sequence\n", + " import tensorflow as tf\n", + " from tensorflow import keras\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 114, + "metadata": {}, + "outputs": [], + "source": [ + "\n", + " # load data and Set the number of words we want\n", + " top_words = 5000 # number of feature\n", + " input_length = 500#size for each feature is 500\n" + ] + }, + { + "cell_type": "code", + "execution_count": 116, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(25000,)\n", + "-------------------------------------\n", + "[list([1, 14, 22, 16, 43, 530, 973, 1622, 1385, 65, 458, 4468, 66, 3941, 4, 173, 36, 256, 5, 25, 100, 43, 838, 112, 50, 670, 2, 9, 35, 480, 284, 5, 150, 4, 172, 112, 167, 2, 336, 385, 39, 4, 172, 4536, 1111, 17, 546, 38, 13, 447, 4, 192, 50, 16, 6, 147, 2025, 19, 14, 22, 4, 1920, 4613, 469, 4, 22, 71, 87, 12, 16, 43, 530, 38, 76, 15, 13, 1247, 4, 22, 17, 515, 17, 12, 16, 626, 18, 2, 5, 62, 386, 12, 8, 316, 8, 106, 5, 4, 2223, 2, 16, 480, 66, 3785, 33, 4, 130, 12, 16, 38, 619, 5, 25, 124, 51, 36, 135, 48, 25, 1415, 33, 6, 22, 12, 215, 28, 77, 52, 5, 14, 407, 16, 82, 2, 8, 4, 107, 117, 2, 15, 256, 4, 2, 7, 3766, 5, 723, 36, 71, 43, 530, 476, 26, 400, 317, 46, 7, 4, 2, 1029, 13, 104, 88, 4, 381, 15, 297, 98, 32, 2071, 56, 26, 141, 6, 194, 2, 18, 4, 226, 22, 21, 134, 476, 26, 480, 5, 144, 30, 2, 18, 51, 36, 28, 224, 92, 25, 104, 4, 226, 65, 16, 38, 1334, 88, 12, 16, 283, 5, 16, 4472, 113, 103, 32, 15, 16, 2, 19, 178, 32])\n", + " list([1, 194, 1153, 194, 2, 78, 228, 5, 6, 1463, 4369, 2, 134, 26, 4, 715, 8, 118, 1634, 14, 394, 20, 13, 119, 954, 189, 102, 5, 207, 110, 3103, 21, 14, 69, 188, 8, 30, 23, 7, 4, 249, 126, 93, 4, 114, 9, 2300, 1523, 5, 647, 4, 116, 9, 35, 2, 4, 229, 9, 340, 1322, 4, 118, 9, 4, 130, 4901, 19, 4, 1002, 5, 89, 29, 952, 46, 37, 4, 455, 9, 45, 43, 38, 1543, 1905, 398, 4, 1649, 26, 2, 5, 163, 11, 3215, 2, 4, 1153, 9, 194, 775, 7, 2, 2, 349, 2637, 148, 605, 2, 2, 15, 123, 125, 68, 2, 2, 15, 349, 165, 4362, 98, 5, 4, 228, 9, 43, 2, 1157, 15, 299, 120, 5, 120, 174, 11, 220, 175, 136, 50, 9, 4373, 228, 2, 5, 2, 656, 245, 2350, 5, 4, 2, 131, 152, 491, 18, 2, 32, 2, 1212, 14, 9, 6, 371, 78, 22, 625, 64, 1382, 9, 8, 168, 145, 23, 4, 1690, 15, 16, 4, 1355, 5, 28, 6, 52, 154, 462, 33, 89, 78, 285, 16, 145, 95])\n", + " list([1, 14, 47, 8, 30, 31, 7, 4, 249, 108, 7, 4, 2, 54, 61, 369, 13, 71, 149, 14, 22, 112, 4, 2401, 311, 12, 16, 3711, 33, 75, 43, 1829, 296, 4, 86, 320, 35, 534, 19, 263, 4821, 1301, 4, 1873, 33, 89, 78, 12, 66, 16, 4, 360, 7, 4, 58, 316, 334, 11, 4, 1716, 43, 645, 662, 8, 257, 85, 1200, 42, 1228, 2578, 83, 68, 3912, 15, 36, 165, 1539, 278, 36, 69, 2, 780, 8, 106, 14, 2, 1338, 18, 6, 22, 12, 215, 28, 610, 40, 6, 87, 326, 23, 2300, 21, 23, 22, 12, 272, 40, 57, 31, 11, 4, 22, 47, 6, 2307, 51, 9, 170, 23, 595, 116, 595, 1352, 13, 191, 79, 638, 89, 2, 14, 9, 8, 106, 607, 624, 35, 534, 6, 227, 7, 129, 113])\n", + " ...\n", + " list([1, 11, 6, 230, 245, 2, 9, 6, 1225, 446, 2, 45, 2174, 84, 2, 4007, 21, 4, 912, 84, 2, 325, 725, 134, 2, 1715, 84, 5, 36, 28, 57, 1099, 21, 8, 140, 8, 703, 5, 2, 84, 56, 18, 1644, 14, 9, 31, 7, 4, 2, 1209, 2295, 2, 1008, 18, 6, 20, 207, 110, 563, 12, 8, 2901, 2, 8, 97, 6, 20, 53, 4767, 74, 4, 460, 364, 1273, 29, 270, 11, 960, 108, 45, 40, 29, 2961, 395, 11, 6, 4065, 500, 7, 2, 89, 364, 70, 29, 140, 4, 64, 4780, 11, 4, 2678, 26, 178, 4, 529, 443, 2, 5, 27, 710, 117, 2, 2, 165, 47, 84, 37, 131, 818, 14, 595, 10, 10, 61, 1242, 1209, 10, 10, 288, 2260, 1702, 34, 2901, 2, 4, 65, 496, 4, 231, 7, 790, 5, 6, 320, 234, 2766, 234, 1119, 1574, 7, 496, 4, 139, 929, 2901, 2, 2, 5, 4241, 18, 4, 2, 2, 250, 11, 1818, 2, 4, 4217, 2, 747, 1115, 372, 1890, 1006, 541, 2, 7, 4, 59, 2, 4, 3586, 2])\n", + " list([1, 1446, 2, 69, 72, 3305, 13, 610, 930, 8, 12, 582, 23, 5, 16, 484, 685, 54, 349, 11, 4120, 2959, 45, 58, 1466, 13, 197, 12, 16, 43, 23, 2, 5, 62, 30, 145, 402, 11, 4131, 51, 575, 32, 61, 369, 71, 66, 770, 12, 1054, 75, 100, 2198, 8, 4, 105, 37, 69, 147, 712, 75, 3543, 44, 257, 390, 5, 69, 263, 514, 105, 50, 286, 1814, 23, 4, 123, 13, 161, 40, 5, 421, 4, 116, 16, 897, 13, 2, 40, 319, 2, 112, 2, 11, 4803, 121, 25, 70, 3468, 4, 719, 3798, 13, 18, 31, 62, 40, 8, 2, 4, 2, 7, 14, 123, 5, 942, 25, 8, 721, 12, 145, 5, 202, 12, 160, 580, 202, 12, 6, 52, 58, 2, 92, 401, 728, 12, 39, 14, 251, 8, 15, 251, 5, 2, 12, 38, 84, 80, 124, 12, 9, 23])\n", + " list([1, 17, 6, 194, 337, 7, 4, 204, 22, 45, 254, 8, 106, 14, 123, 4, 2, 270, 2, 5, 2, 2, 732, 2098, 101, 405, 39, 14, 1034, 4, 1310, 9, 115, 50, 305, 12, 47, 4, 168, 5, 235, 7, 38, 111, 699, 102, 7, 4, 4039, 2, 9, 24, 6, 78, 1099, 17, 2345, 2, 21, 27, 2, 2, 5, 2, 1603, 92, 1183, 4, 1310, 7, 4, 204, 42, 97, 90, 35, 221, 109, 29, 127, 27, 118, 8, 97, 12, 157, 21, 2, 2, 9, 6, 66, 78, 1099, 4, 631, 1191, 5, 2642, 272, 191, 1070, 6, 2, 8, 2197, 2, 2, 544, 5, 383, 1271, 848, 1468, 2, 497, 2, 8, 1597, 2, 2, 21, 60, 27, 239, 9, 43, 2, 209, 405, 10, 10, 12, 764, 40, 4, 248, 20, 12, 16, 5, 174, 1791, 72, 7, 51, 6, 1739, 22, 4, 204, 131, 9])]\n" + ] + } + ], + "source": [ + "\n", + " # Load data and target vector from movie review data\n", + " \n", + " (X_train, y_train), (X_test, y_test) = tf.keras.datasets.imdb.load_data(num_words=top_words)\n", + " \n", + " print(X_train.shape); \n", + " print(\"-------------------------------------\")\n", + " print(X_train)\n", + " \n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 119, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(25000, 500)\n", + "[[ 0 0 0 ... 19 178 32]\n", + " [ 0 0 0 ... 16 145 95]\n", + " [ 0 0 0 ... 7 129 113]\n", + " ...\n", + " [ 0 0 0 ... 4 3586 2]\n", + " [ 0 0 0 ... 12 9 23]\n", + " [ 0 0 0 ... 204 131 9]]\n", + "(25000, 500)\n", + "[[ 0 0 0 ... 14 6 717]\n", + " [ 0 0 0 ... 125 4 3077]\n", + " [ 33 6 58 ... 9 57 975]\n", + " ...\n", + " [ 0 0 0 ... 21 846 2]\n", + " [ 0 0 0 ... 2302 7 470]\n", + " [ 0 0 0 ... 34 2005 2643]]\n" + ] + } + ], + "source": [ + "\n", + " # Convert movie review data to feature matrix\n", + " X_train = sequence.pad_sequences(X_train, maxlen=input_length) # for Embedding want the fixed size 500 for each feature\n", + " # for example if x_train[0] = [1,2] 1,2 the is the index of the words\n", + " #after feature matrix x_train[0] = [1,2 ,0,0,0,....] becase have the fixd length for all feature to enter to Embedding\n", + " print(X_train.shape); print(X_train)\n", + "\n", + " X_test = sequence.pad_sequences(X_test, maxlen=input_length)\n", + " print(X_test.shape); print(X_test)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 118, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[ 0 0 0 ... 19 178 32]\n", + " [ 0 0 0 ... 16 145 95]\n", + " [ 0 0 0 ... 7 129 113]\n", + " ...\n", + " [ 0 0 0 ... 4 3586 2]\n", + " [ 0 0 0 ... 12 9 23]\n", + " [ 0 0 0 ... 204 131 9]]\n" + ] + } + ], + "source": [ + "print(X_train)" + ] + }, + { + "cell_type": "code", + "execution_count": 108, + "metadata": {}, + "outputs": [], + "source": [ + "\n", + " # setup a CNN network\n", + " model = Sequential()# input_length = 500 number of colunm\n", + " model.add(Embedding(5000 , 32, input_length=500))\n", + " model.add(Conv1D(filters=32, kernel_size=3, padding='same', activation='relu'))\n", + " model.add(MaxPooling1D(pool_size=2))\n", + " model.add(Flatten())\n", + " model.add(Dense(250, activation='relu'))\n", + " model.add(Dense(1, activation='sigmoid'))\n", + " model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 109, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Model: \"sequential_5\"\n", + "_________________________________________________________________\n", + " Layer (type) Output Shape Param # \n", + "=================================================================\n", + " embedding_5 (Embedding) (None, 500, 32) 160000 \n", + " \n", + " conv1d_5 (Conv1D) (None, 500, 32) 3104 \n", + " \n", + " max_pooling1d_5 (MaxPooling (None, 250, 32) 0 \n", + " 1D) \n", + " \n", + " flatten_5 (Flatten) (None, 8000) 0 \n", + " \n", + " dense_10 (Dense) (None, 250) 2000250 \n", + " \n", + " dense_11 (Dense) (None, 1) 251 \n", + " \n", + "=================================================================\n", + "Total params: 2,163,605\n", + "Trainable params: 2,163,605\n", + "Non-trainable params: 0\n", + "_________________________________________________________________\n" + ] + } + ], + "source": [ + " model.summary()" + ] + }, + { + "cell_type": "code", + "execution_count": 112, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 1/3\n", + "148/196 [=====================>........] - ETA: 8s - loss: 0.2480 - accuracy: 0.9003" + ] + }, + { + "ename": "KeyboardInterrupt", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)", + "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[1;31m# Fit the model\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 2\u001b[0m model.fit(X_train, y_train, validation_data=(X_test, y_test), \n\u001b[1;32m----> 3\u001b[1;33m epochs=3, batch_size=128, verbose=1)\n\u001b[0m", + "\u001b[1;32m~\\Anaconda3\\lib\\site-packages\\keras\\utils\\traceback_utils.py\u001b[0m in \u001b[0;36merror_handler\u001b[1;34m(*args, **kwargs)\u001b[0m\n\u001b[0;32m 62\u001b[0m \u001b[0mfiltered_tb\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;32mNone\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 63\u001b[0m \u001b[1;32mtry\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 64\u001b[1;33m \u001b[1;32mreturn\u001b[0m \u001b[0mfn\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m*\u001b[0m\u001b[0margs\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 65\u001b[0m \u001b[1;32mexcept\u001b[0m \u001b[0mException\u001b[0m \u001b[1;32mas\u001b[0m \u001b[0me\u001b[0m\u001b[1;33m:\u001b[0m \u001b[1;31m# pylint: disable=broad-except\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 66\u001b[0m \u001b[0mfiltered_tb\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0m_process_traceback_frames\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0me\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m__traceback__\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;32m~\\Anaconda3\\lib\\site-packages\\keras\\engine\\training.py\u001b[0m in \u001b[0;36mfit\u001b[1;34m(self, x, y, batch_size, epochs, verbose, callbacks, validation_split, validation_data, shuffle, class_weight, sample_weight, initial_epoch, steps_per_epoch, validation_steps, validation_batch_size, validation_freq, max_queue_size, workers, use_multiprocessing)\u001b[0m\n\u001b[0;32m 1382\u001b[0m _r=1):\n\u001b[0;32m 1383\u001b[0m \u001b[0mcallbacks\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mon_train_batch_begin\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mstep\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 1384\u001b[1;33m \u001b[0mtmp_logs\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mtrain_function\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0miterator\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 1385\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mdata_handler\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mshould_sync\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1386\u001b[0m \u001b[0mcontext\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0masync_wait\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;32m~\\Anaconda3\\lib\\site-packages\\tensorflow\\python\\util\\traceback_utils.py\u001b[0m in \u001b[0;36merror_handler\u001b[1;34m(*args, **kwargs)\u001b[0m\n\u001b[0;32m 148\u001b[0m \u001b[0mfiltered_tb\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;32mNone\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 149\u001b[0m \u001b[1;32mtry\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 150\u001b[1;33m \u001b[1;32mreturn\u001b[0m \u001b[0mfn\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m*\u001b[0m\u001b[0margs\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 151\u001b[0m \u001b[1;32mexcept\u001b[0m \u001b[0mException\u001b[0m \u001b[1;32mas\u001b[0m \u001b[0me\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 152\u001b[0m \u001b[0mfiltered_tb\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0m_process_traceback_frames\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0me\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m__traceback__\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;32m~\\Anaconda3\\lib\\site-packages\\tensorflow\\python\\eager\\def_function.py\u001b[0m in \u001b[0;36m__call__\u001b[1;34m(self, *args, **kwds)\u001b[0m\n\u001b[0;32m 913\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 914\u001b[0m \u001b[1;32mwith\u001b[0m \u001b[0mOptionalXlaContext\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_jit_compile\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 915\u001b[1;33m \u001b[0mresult\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_call\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m*\u001b[0m\u001b[0margs\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m**\u001b[0m\u001b[0mkwds\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 916\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 917\u001b[0m \u001b[0mnew_tracing_count\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mexperimental_get_tracing_count\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;32m~\\Anaconda3\\lib\\site-packages\\tensorflow\\python\\eager\\def_function.py\u001b[0m in \u001b[0;36m_call\u001b[1;34m(self, *args, **kwds)\u001b[0m\n\u001b[0;32m 945\u001b[0m \u001b[1;31m# In this case we have created variables on the first call, so we run the\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 946\u001b[0m \u001b[1;31m# defunned version which is guaranteed to never create variables.\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 947\u001b[1;33m \u001b[1;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_stateless_fn\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m*\u001b[0m\u001b[0margs\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m**\u001b[0m\u001b[0mkwds\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;31m# pylint: disable=not-callable\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 948\u001b[0m \u001b[1;32melif\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_stateful_fn\u001b[0m \u001b[1;32mis\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[1;32mNone\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 949\u001b[0m \u001b[1;31m# Release the lock early so that multiple threads can perform the call\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;32m~\\Anaconda3\\lib\\site-packages\\tensorflow\\python\\eager\\function.py\u001b[0m in \u001b[0;36m__call__\u001b[1;34m(self, *args, **kwargs)\u001b[0m\n\u001b[0;32m 2955\u001b[0m filtered_flat_args) = self._maybe_define_function(args, kwargs)\n\u001b[0;32m 2956\u001b[0m return graph_function._call_flat(\n\u001b[1;32m-> 2957\u001b[1;33m filtered_flat_args, captured_inputs=graph_function.captured_inputs) # pylint: disable=protected-access\n\u001b[0m\u001b[0;32m 2958\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 2959\u001b[0m \u001b[1;33m@\u001b[0m\u001b[0mproperty\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;32m~\\Anaconda3\\lib\\site-packages\\tensorflow\\python\\eager\\function.py\u001b[0m in \u001b[0;36m_call_flat\u001b[1;34m(self, args, captured_inputs, cancellation_manager)\u001b[0m\n\u001b[0;32m 1852\u001b[0m \u001b[1;31m# No tape is watching; skip to running the function.\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1853\u001b[0m return self._build_call_outputs(self._inference_function.call(\n\u001b[1;32m-> 1854\u001b[1;33m ctx, args, cancellation_manager=cancellation_manager))\n\u001b[0m\u001b[0;32m 1855\u001b[0m forward_backward = self._select_forward_and_backward_functions(\n\u001b[0;32m 1856\u001b[0m \u001b[0margs\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;32m~\\Anaconda3\\lib\\site-packages\\tensorflow\\python\\eager\\function.py\u001b[0m in \u001b[0;36mcall\u001b[1;34m(self, ctx, args, cancellation_manager)\u001b[0m\n\u001b[0;32m 502\u001b[0m \u001b[0minputs\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0margs\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 503\u001b[0m \u001b[0mattrs\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mattrs\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 504\u001b[1;33m ctx=ctx)\n\u001b[0m\u001b[0;32m 505\u001b[0m \u001b[1;32melse\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 506\u001b[0m outputs = execute.execute_with_cancellation(\n", + "\u001b[1;32m~\\Anaconda3\\lib\\site-packages\\tensorflow\\python\\eager\\execute.py\u001b[0m in \u001b[0;36mquick_execute\u001b[1;34m(op_name, num_outputs, inputs, attrs, ctx, name)\u001b[0m\n\u001b[0;32m 53\u001b[0m \u001b[0mctx\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mensure_initialized\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 54\u001b[0m tensors = pywrap_tfe.TFE_Py_Execute(ctx._handle, device_name, op_name,\n\u001b[1;32m---> 55\u001b[1;33m inputs, attrs, num_outputs)\n\u001b[0m\u001b[0;32m 56\u001b[0m \u001b[1;32mexcept\u001b[0m \u001b[0mcore\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_NotOkStatusException\u001b[0m \u001b[1;32mas\u001b[0m \u001b[0me\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 57\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mname\u001b[0m \u001b[1;32mis\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[1;32mNone\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;31mKeyboardInterrupt\u001b[0m: " + ] + } + ], + "source": [ + "\n", + " # Fit the model\n", + " model.fit(X_train, y_train, validation_data=(X_test, y_test), \n", + " epochs=3, batch_size=128, verbose=1)\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "\n", + " # Final evaluation of the model\n", + " scores = model.evaluate(X_test, y_test, verbose=1)\n", + "\n", + " print(\"Accuracy: %.2f%%\" % (scores[1]*100))\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 81, + "metadata": {}, + "outputs": [ + { + "ename": "NameError", + "evalue": "name 'history' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mNameError\u001b[0m Traceback (most recent call last)", + "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mmatplotlib\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mpyplot\u001b[0m \u001b[1;32mas\u001b[0m \u001b[0mplt\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 2\u001b[1;33m \u001b[0mplt\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mplot\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mhistory\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mhistory\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;34m'loss'\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 3\u001b[0m \u001b[0mplt\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mtitle\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'model loss'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 4\u001b[0m \u001b[0mplt\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mylabel\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'loss'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 5\u001b[0m \u001b[0mplt\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mxlabel\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'epoch'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;31mNameError\u001b[0m: name 'history' is not defined" + ] + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "plt.plot(history.history['loss'])\n", + "plt.title('model loss')\n", + "plt.ylabel('loss')\n", + "plt.xlabel('epoch')\n", + "plt.legend(['train'] , loc='upper left')\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.3" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/fourth-model/test.ipynb b/fourth-model/test.ipynb new file mode 100644 index 0000000..bba1fd9 --- /dev/null +++ b/fourth-model/test.ipynb @@ -0,0 +1,677 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "name": "Untitled1.ipynb", + "provenance": [], + "collapsed_sections": [] + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3" + }, + "language_info": { + "name": "python" + } + }, + "cells": [ + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "id": "kQDe0DNF9fLf" + }, + "outputs": [], + "source": [ + "import tensorflow as tf\n", + "from tensorflow import keras\n", + "from keras.models import Sequential\n", + "from keras.layers import Dense, Flatten\n", + "from keras.layers.convolutional import Conv1D, MaxPooling1D\n", + "from keras.layers.embeddings import Embedding\n", + "from keras.preprocessing import sequence\n", + "\n" + ] + }, + { + "cell_type": "code", + "source": [ + "top_words = 5000\n", + "input_length = 500 #legnth of index \n", + "\n", + "(X_train, y_train) , (X_test, y_test)=tf.keras.datasets.imdb.load_data(num_words=top_words)" + ], + "metadata": { + "id": "WG9-0Nx29-Au" + }, + "execution_count": 27, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "X_train.shape #every feature is sample \n", + "print(len(X_train))\n", + "print(len(X_test))\n", + "y_train[:5]\n", + "len(X_train[0])\n", + "X_train[0]" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "TCa1FWzl_UUK", + "outputId": "ec74af6d-ead8-4fb8-f6db-a3da207974e4" + }, + "execution_count": 28, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "25000\n", + "25000\n" + ] + }, + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "[1,\n", + " 14,\n", + " 22,\n", + " 16,\n", + " 43,\n", + " 530,\n", + " 973,\n", + " 1622,\n", + " 1385,\n", + " 65,\n", + " 458,\n", + " 4468,\n", + " 66,\n", + " 3941,\n", + " 4,\n", + " 173,\n", + " 36,\n", + " 256,\n", + " 5,\n", + " 25,\n", + " 100,\n", + " 43,\n", + " 838,\n", + " 112,\n", + " 50,\n", + " 670,\n", + " 2,\n", + " 9,\n", + " 35,\n", + " 480,\n", + " 284,\n", + " 5,\n", + " 150,\n", + " 4,\n", + " 172,\n", + " 112,\n", + " 167,\n", + " 2,\n", + " 336,\n", + " 385,\n", + " 39,\n", + " 4,\n", + " 172,\n", + " 4536,\n", + " 1111,\n", + " 17,\n", + " 546,\n", + " 38,\n", + " 13,\n", + " 447,\n", + " 4,\n", + " 192,\n", + " 50,\n", + " 16,\n", + " 6,\n", + " 147,\n", + " 2025,\n", + " 19,\n", + " 14,\n", + " 22,\n", + " 4,\n", + " 1920,\n", + " 4613,\n", + " 469,\n", + " 4,\n", + " 22,\n", + " 71,\n", + " 87,\n", + " 12,\n", + " 16,\n", + " 43,\n", + " 530,\n", + " 38,\n", + " 76,\n", + " 15,\n", + " 13,\n", + " 1247,\n", + " 4,\n", + " 22,\n", + " 17,\n", + " 515,\n", + " 17,\n", + " 12,\n", + " 16,\n", + " 626,\n", + " 18,\n", + " 2,\n", + " 5,\n", + " 62,\n", + " 386,\n", + " 12,\n", + " 8,\n", + " 316,\n", + " 8,\n", + " 106,\n", + " 5,\n", + " 4,\n", + " 2223,\n", + " 2,\n", + " 16,\n", + " 480,\n", + " 66,\n", + " 3785,\n", + " 33,\n", + " 4,\n", + " 130,\n", + " 12,\n", + " 16,\n", + " 38,\n", + " 619,\n", + " 5,\n", + " 25,\n", + " 124,\n", + " 51,\n", + " 36,\n", + " 135,\n", + " 48,\n", + " 25,\n", + " 1415,\n", + " 33,\n", + " 6,\n", + " 22,\n", + " 12,\n", + " 215,\n", + " 28,\n", + " 77,\n", + " 52,\n", + " 5,\n", + " 14,\n", + " 407,\n", + " 16,\n", + " 82,\n", + " 2,\n", + " 8,\n", + " 4,\n", + " 107,\n", + " 117,\n", + " 2,\n", + " 15,\n", + " 256,\n", + " 4,\n", + " 2,\n", + " 7,\n", + " 3766,\n", + " 5,\n", + " 723,\n", + " 36,\n", + " 71,\n", + " 43,\n", + " 530,\n", + " 476,\n", + " 26,\n", + " 400,\n", + " 317,\n", + " 46,\n", + " 7,\n", + " 4,\n", + " 2,\n", + " 1029,\n", + " 13,\n", + " 104,\n", + " 88,\n", + " 4,\n", + " 381,\n", + " 15,\n", + " 297,\n", + " 98,\n", + " 32,\n", + " 2071,\n", + " 56,\n", + " 26,\n", + " 141,\n", + " 6,\n", + " 194,\n", + " 2,\n", + " 18,\n", + " 4,\n", + " 226,\n", + " 22,\n", + " 21,\n", + " 134,\n", + " 476,\n", + " 26,\n", + " 480,\n", + " 5,\n", + " 144,\n", + " 30,\n", + " 2,\n", + " 18,\n", + " 51,\n", + " 36,\n", + " 28,\n", + " 224,\n", + " 92,\n", + " 25,\n", + " 104,\n", + " 4,\n", + " 226,\n", + " 65,\n", + " 16,\n", + " 38,\n", + " 1334,\n", + " 88,\n", + " 12,\n", + " 16,\n", + " 283,\n", + " 5,\n", + " 16,\n", + " 4472,\n", + " 113,\n", + " 103,\n", + " 32,\n", + " 15,\n", + " 16,\n", + " 2,\n", + " 19,\n", + " 178,\n", + " 32]" + ] + }, + "metadata": {}, + "execution_count": 28 + } + ] + }, + { + "cell_type": "code", + "source": [ + "wordIndex=tf.keras.datasets.imdb.get_word_index()\n", + "print(wordIndex[\"good\"])\n", + " " + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "NVsgV7tX_ZOh", + "outputId": "078c098c-4d25-43d8-d20d-2c9b5a1b64af" + }, + "execution_count": 29, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "49\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "X_train = sequence.pad_sequences(X_train, maxlen=input_length)\n", + "X_test = sequence.pad_sequences(X_test, maxlen=input_length) #this for embedding layer want fixed size 500\n", + "print(); print(X_train.shape); print(X_train[0]) #Turns positive integers (indexes) into dense vectors of fixed size" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "4c62jt0zA_C5", + "outputId": "56a26d23-d1a6-4186-e86a-52c3bc62fc5b" + }, + "execution_count": 30, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "\n", + "(25000, 500)\n", + "[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", + " 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", + " 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", + " 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", + " 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", + " 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", + " 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", + " 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", + " 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", + " 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", + " 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", + " 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", + " 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", + " 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", + " 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", + " 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", + " 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", + " 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", + " 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", + " 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", + " 0 0 1 14 22 16 43 530 973 1622 1385 65 458 4468\n", + " 66 3941 4 173 36 256 5 25 100 43 838 112 50 670\n", + " 2 9 35 480 284 5 150 4 172 112 167 2 336 385\n", + " 39 4 172 4536 1111 17 546 38 13 447 4 192 50 16\n", + " 6 147 2025 19 14 22 4 1920 4613 469 4 22 71 87\n", + " 12 16 43 530 38 76 15 13 1247 4 22 17 515 17\n", + " 12 16 626 18 2 5 62 386 12 8 316 8 106 5\n", + " 4 2223 2 16 480 66 3785 33 4 130 12 16 38 619\n", + " 5 25 124 51 36 135 48 25 1415 33 6 22 12 215\n", + " 28 77 52 5 14 407 16 82 2 8 4 107 117 2\n", + " 15 256 4 2 7 3766 5 723 36 71 43 530 476 26\n", + " 400 317 46 7 4 2 1029 13 104 88 4 381 15 297\n", + " 98 32 2071 56 26 141 6 194 2 18 4 226 22 21\n", + " 134 476 26 480 5 144 30 2 18 51 36 28 224 92\n", + " 25 104 4 226 65 16 38 1334 88 12 16 283 5 16\n", + " 4472 113 103 32 15 16 2 19 178 32]\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "from keras.regularizers import l1\n", + "model = Sequential()\n", + "model.add(Embedding(top_words, 32, input_length=input_length))\n", + "model.add(Conv1D(filters=32, kernel_size=3, padding='same', activation='relu'))\n", + "model.add(MaxPooling1D(pool_size=2))\n", + "model.add(Flatten()) \n", + "#model.add(Dense(250, activation='relu',activity_regularizer=l1(0.004)))\n", + "model.add(Dense(1, activation='sigmoid'))\n", + "model.compile(loss='binary_crossentropy', optimizer='rmsprop', metrics=['accuracy'])\n", + "model.summary()\n" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "3BzlNVwD0zQh", + "outputId": "e7814f3e-9384-4279-833e-6fdedb53b541" + }, + "execution_count": 31, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Model: \"sequential_4\"\n", + "_________________________________________________________________\n", + " Layer (type) Output Shape Param # \n", + "=================================================================\n", + " embedding_4 (Embedding) (None, 500, 32) 160000 \n", + " \n", + " conv1d_4 (Conv1D) (None, 500, 32) 3104 \n", + " \n", + " max_pooling1d_4 (MaxPooling (None, 250, 32) 0 \n", + " 1D) \n", + " \n", + " flatten_4 (Flatten) (None, 8000) 0 \n", + " \n", + " dense_4 (Dense) (None, 1) 8001 \n", + " \n", + "=================================================================\n", + "Total params: 171,105\n", + "Trainable params: 171,105\n", + "Non-trainable params: 0\n", + "_________________________________________________________________\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "history=model.fit(X_train, y_train, validation_data=(X_test, y_test), batch_size=128,\n", + " epochs=10)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "q4S1Ys6k257M", + "outputId": "a2308488-da56-415a-815f-4637d64c3df9" + }, + "execution_count": 32, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Epoch 1/10\n", + "196/196 [==============================] - 21s 101ms/step - loss: 0.4914 - accuracy: 0.7479 - val_loss: 0.3025 - val_accuracy: 0.8735\n", + "Epoch 2/10\n", + "196/196 [==============================] - 20s 101ms/step - loss: 0.2565 - accuracy: 0.8988 - val_loss: 0.2854 - val_accuracy: 0.8796\n", + "Epoch 3/10\n", + "196/196 [==============================] - 19s 95ms/step - loss: 0.2133 - accuracy: 0.9168 - val_loss: 0.3102 - val_accuracy: 0.8723\n", + "Epoch 4/10\n", + "196/196 [==============================] - 19s 98ms/step - loss: 0.1895 - accuracy: 0.9267 - val_loss: 0.3722 - val_accuracy: 0.8552\n", + "Epoch 5/10\n", + "196/196 [==============================] - 19s 98ms/step - loss: 0.1732 - accuracy: 0.9346 - val_loss: 0.2972 - val_accuracy: 0.8828\n", + "Epoch 6/10\n", + "196/196 [==============================] - 19s 98ms/step - loss: 0.1577 - accuracy: 0.9405 - val_loss: 0.3029 - val_accuracy: 0.8818\n", + "Epoch 7/10\n", + "196/196 [==============================] - 19s 96ms/step - loss: 0.1431 - accuracy: 0.9478 - val_loss: 0.3194 - val_accuracy: 0.8792\n", + "Epoch 8/10\n", + "196/196 [==============================] - 19s 99ms/step - loss: 0.1307 - accuracy: 0.9536 - val_loss: 0.3354 - val_accuracy: 0.8778\n", + "Epoch 9/10\n", + "196/196 [==============================] - 19s 97ms/step - loss: 0.1183 - accuracy: 0.9594 - val_loss: 0.3860 - val_accuracy: 0.8675\n", + "Epoch 10/10\n", + "196/196 [==============================] - 19s 98ms/step - loss: 0.1067 - accuracy: 0.9629 - val_loss: 0.3741 - val_accuracy: 0.8734\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "import matplotlib.pyplot as plt\n", + "\n", + "plt.plot(history.history['loss'])\n", + "plt.plot(history.history['val_loss'])\n", + "plt.title('model loss')\n", + "plt.ylabel('loss')\n", + "plt.xlabel('epoch')\n", + "plt.legend(['train'] , loc='upper left')\n", + "plt.show()\n" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 295 + }, + "id": "lP-5faAd5AoT", + "outputId": "5d0d43e4-4e83-403c-d31a-1951215c093a" + }, + "execution_count": 33, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + } + } + ] + }, + { + "cell_type": "code", + "source": [ + "plt.plot(history.history['accuracy'])\n", + "plt.plot(history.history['val_accuracy'])\n", + "plt.title('model loss')\n", + "plt.ylabel('accuracy')\n", + "plt.xlabel('epoch')\n", + "plt.legend(['train'] , loc='upper left')\n", + "plt.show()" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 295 + }, + "id": "5W4pGZri7E21", + "outputId": "a5a15e80-5537-4902-9587-6de574dd96de" + }, + "execution_count": 34, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + } + } + ] + }, + { + "cell_type": "code", + "source": [ + "import numpy\n", + "from numpy import array\n", + "bad = \"this movie was terrible and bad\"\n", + "good = \"i really liked the movie and had fun\"\n", + "for review in [good,bad]:\n", + " tmp = []\n", + " for word in review.split(\" \"):\n", + " print(wordIndex[word])\n", + " tmp.append(wordIndex[word])\n", + " tmp_padded = sequence.pad_sequences([tmp], maxlen=input_length) \n", + " print(tmp_padded)\n", + " print(\"%s. Sentiment: %s\" % (review,model.predict(array([tmp_padded][0]))[0][0]))\n" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "TDeDvO7QJuse", + "outputId": "c3803998-c95d-4361-bcc1-6dfbe9176231" + }, + "execution_count": 35, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "10\n", + "63\n", + "420\n", + "1\n", + "17\n", + "2\n", + "66\n", + "250\n", + "[[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", + " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", + " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", + " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", + " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", + " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", + " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", + " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", + " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", + " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", + " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", + " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", + " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", + " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", + " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", + " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", + " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", + " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", + " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", + " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", + " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", + " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", + " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", + " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", + " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", + " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", + " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", + " 0 0 0 0 0 0 10 63 420 1 17 2 66 250]]\n", + "i really liked the movie and had fun. Sentiment: 0.4959373\n", + "11\n", + "17\n", + "13\n", + "391\n", + "2\n", + "75\n", + "[[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", + " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", + " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", + " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", + " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", + " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", + " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", + " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", + " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", + " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", + " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", + " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", + " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", + " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", + " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", + " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", + " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", + " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", + " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", + " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", + " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", + " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", + " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", + " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", + " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", + " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", + " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", + " 0 0 0 0 0 0 0 0 11 17 13 391 2 75]]\n", + "this movie was terrible and bad. Sentiment: 0.5357793\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "" + ], + "metadata": { + "id": "aZzNQYpfMMYe" + }, + "execution_count": null, + "outputs": [] + } + ] +} \ No newline at end of file