{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Using TensorFlow backend.\n" ] }, { "data": { "text/plain": [ "'2.0.8'" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import keras\n", "keras.__version__" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Understanding recurrent neural networks\n", "\n", "This notebook contains the code samples found in Chapter 6, Section 2 of [Deep Learning with Python](https://www.manning.com/books/deep-learning-with-python?a_aid=keras&a_bid=76564dff). Note that the original text features far more content, in particular further explanations and figures: in this notebook, you will only find source code and related comments.\n", "\n", "---\n", "\n", "[...]\n", "\n", "## A first recurrent layer in Keras\n", "\n", "The process we just naively implemented in Numpy corresponds to an actual Keras layer: the `SimpleRNN` layer:\n" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": true }, "outputs": [], "source": [ "from keras.layers import SimpleRNN" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "There is just one minor difference: `SimpleRNN` processes batches of sequences, like all other Keras layers, not just a single sequence like \n", "in our Numpy example. This means that it takes inputs of shape `(batch_size, timesteps, input_features)`, rather than `(timesteps, \n", "input_features)`.\n", "\n", "Like all recurrent layers in Keras, `SimpleRNN` can be run in two different modes: it can return either the full sequences of successive \n", "outputs for each timestep (a 3D tensor of shape `(batch_size, timesteps, output_features)`), or it can return only the last output for each \n", "input sequence (a 2D tensor of shape `(batch_size, output_features)`). These two modes are controlled by the `return_sequences` constructor \n", "argument. Let's take a look at an example:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "_________________________________________________________________\n", "Layer (type) Output Shape Param # \n", "=================================================================\n", "embedding_1 (Embedding) (None, None, 32) 320000 \n", "_________________________________________________________________\n", "simple_rnn_1 (SimpleRNN) (None, 32) 2080 \n", "=================================================================\n", "Total params: 322,080\n", "Trainable params: 322,080\n", "Non-trainable params: 0\n", "_________________________________________________________________\n" ] } ], "source": [ "from keras.models import Sequential\n", "from keras.layers import Embedding, SimpleRNN\n", "\n", "model = Sequential()\n", "model.add(Embedding(10000, 32))\n", "model.add(SimpleRNN(32))\n", "model.summary()" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "_________________________________________________________________\n", "Layer (type) Output Shape Param # \n", "=================================================================\n", "embedding_2 (Embedding) (None, None, 32) 320000 \n", "_________________________________________________________________\n", "simple_rnn_2 (SimpleRNN) (None, None, 32) 2080 \n", "=================================================================\n", "Total params: 322,080\n", "Trainable params: 322,080\n", "Non-trainable params: 0\n", "_________________________________________________________________\n" ] } ], "source": [ "model = Sequential()\n", "model.add(Embedding(10000, 32))\n", "model.add(SimpleRNN(32, return_sequences=True))\n", "model.summary()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "It is sometimes useful to stack several recurrent layers one after the other in order to increase the representational power of a network. \n", "In such a setup, you have to get all intermediate layers to return full sequences:" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "_________________________________________________________________\n", "Layer (type) Output Shape Param # \n", "=================================================================\n", "embedding_3 (Embedding) (None, None, 32) 320000 \n", "_________________________________________________________________\n", "simple_rnn_3 (SimpleRNN) (None, None, 32) 2080 \n", "_________________________________________________________________\n", "simple_rnn_4 (SimpleRNN) (None, None, 32) 2080 \n", "_________________________________________________________________\n", "simple_rnn_5 (SimpleRNN) (None, None, 32) 2080 \n", "_________________________________________________________________\n", "simple_rnn_6 (SimpleRNN) (None, 32) 2080 \n", "=================================================================\n", "Total params: 328,320\n", "Trainable params: 328,320\n", "Non-trainable params: 0\n", "_________________________________________________________________\n" ] } ], "source": [ "model = Sequential()\n", "model.add(Embedding(10000, 32))\n", "model.add(SimpleRNN(32, return_sequences=True))\n", "model.add(SimpleRNN(32, return_sequences=True))\n", "model.add(SimpleRNN(32, return_sequences=True))\n", "model.add(SimpleRNN(32)) # This last layer only returns the last outputs.\n", "model.summary()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now let's try to use such a model on the IMDB movie review classification problem. First, let's preprocess the data:" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Loading data...\n", "25000 train sequences\n", "25000 test sequences\n", "Pad sequences (samples x time)\n", "input_train shape: (25000, 500)\n", "input_test shape: (25000, 500)\n" ] } ], "source": [ "from keras.datasets import imdb\n", "from keras.preprocessing import sequence\n", "\n", "max_features = 10000 # number of words to consider as features\n", "maxlen = 500 # cut texts after this number of words (among top max_features most common words)\n", "batch_size = 32\n", "\n", "print('Loading data...')\n", "(input_train, y_train), (input_test, y_test) = imdb.load_data(num_words=max_features)\n", "print(len(input_train), 'train sequences')\n", "print(len(input_test), 'test sequences')\n", "\n", "print('Pad sequences (samples x time)')\n", "input_train = sequence.pad_sequences(input_train, maxlen=maxlen)\n", "input_test = sequence.pad_sequences(input_test, maxlen=maxlen)\n", "print('input_train shape:', input_train.shape)\n", "print('input_test shape:', input_test.shape)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's train a simple recurrent network using an `Embedding` layer and a `SimpleRNN` layer:" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Train on 20000 samples, validate on 5000 samples\n", "Epoch 1/10\n", "20000/20000 [==============================] - 22s - loss: 0.6455 - acc: 0.6210 - val_loss: 0.5293 - val_acc: 0.7758\n", "Epoch 2/10\n", "20000/20000 [==============================] - 20s - loss: 0.4005 - acc: 0.8362 - val_loss: 0.4752 - val_acc: 0.7742\n", "Epoch 3/10\n", "20000/20000 [==============================] - 19s - loss: 0.2739 - acc: 0.8920 - val_loss: 0.4947 - val_acc: 0.8064\n", "Epoch 4/10\n", "20000/20000 [==============================] - 19s - loss: 0.1916 - acc: 0.9290 - val_loss: 0.3783 - val_acc: 0.8460\n", "Epoch 5/10\n", "20000/20000 [==============================] - 19s - loss: 0.1308 - acc: 0.9528 - val_loss: 0.5755 - val_acc: 0.7376\n", "Epoch 6/10\n", "20000/20000 [==============================] - 19s - loss: 0.0924 - acc: 0.9675 - val_loss: 0.5829 - val_acc: 0.7634\n", "Epoch 7/10\n", "20000/20000 [==============================] - 19s - loss: 0.0726 - acc: 0.9768 - val_loss: 0.5541 - val_acc: 0.7932\n", "Epoch 8/10\n", "20000/20000 [==============================] - 19s - loss: 0.0426 - acc: 0.9862 - val_loss: 0.5551 - val_acc: 0.8292\n", "Epoch 9/10\n", "20000/20000 [==============================] - 20s - loss: 0.0300 - acc: 0.9918 - val_loss: 0.5962 - val_acc: 0.8312\n", "Epoch 10/10\n", "20000/20000 [==============================] - 19s - loss: 0.0256 - acc: 0.9925 - val_loss: 0.6707 - val_acc: 0.8054\n" ] } ], "source": [ "from keras.layers import Dense\n", "\n", "model = Sequential()\n", "model.add(Embedding(max_features, 32))\n", "model.add(SimpleRNN(32))\n", "model.add(Dense(1, activation='sigmoid'))\n", "\n", "model.compile(optimizer='rmsprop', loss='binary_crossentropy', metrics=['acc'])\n", "history = model.fit(input_train, y_train,\n", " epochs=10,\n", " batch_size=128,\n", " validation_split=0.2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's display the training and validation loss and accuracy:" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "image/png": "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\nyN7butX93nvd99/fvV4998suc//007ijqhkrV7qPHevetm34PB1ySGikXr68ZuNINumreifDbN0a\nrh/o2hXefjv0uX/rrfi6pZmFGAoLwzDMUru4hy643buH4bN79YLZs8NAgwcdFHd0NaP4osOlS2Ha\nNOjZM3Rtzs4OQ5W8+GJozE4byXwz1ORNJf3qM2OGe6dOoTTyox+FEkq6uOyyUCUwf37ckUiyPvhg\n16/FI45wnzYt/HIT96VL3W+6yf2gg8L5yc52v/XW6v31g0r6UmztWrj00tAYtXlzKJlNnRpKKOli\n3LjQfe9nP9NkK+nu88/DVas9eoRxlyZMgA8+CENz1PUhDJKVnR3+p5cvD9OFHn546J7ctm0YhfbV\nV2P8P0/mm6Embyrpp86OHe5/+pN7q1ahsemGG9LvYphE99wTSkXPPht3JFKWr792/93v3PfdN/wq\nu+aa0HAryVm40P3nPw/tHsW/ju68033NmtQcHzXkZra5c91PPDG8w0cd5f7++3FHVLmtW927dHHP\nyambPT5qqx073P/61/C+gPsZZ7j/979xR1V7bdkSeq316xfOZ+PG7uefH66T2ZvqsWSTvqp36pj5\n8+Gcc0LD2qxZYSyRN98Mj9Ndw4bhCsilS8OQzRK//Hw47rhwFW2zZvDyy/D883DkkXFHVntlZYW5\nJd54Iww6eOml4dqYfv3ghBOqv9onqaRvZgPNbKGZLTazkWWsb2dm081stpnNNbPTE9b9KtpvoZlp\nMN1q8t//hotFunaFF16Am2+GJUvCRVf1atFX+0knhYlZbr0VVqyIO5rMtXIlXHghfOc7YciEBx4I\nvXJOPjnuyOqWbt3CNKOrVsGDD4b//WpvF6nspwBQH/gYOAxoBLwPdC61zSTgiuh+Z2BZwv33gcZA\nTnSc+hU9n6p3quajj9zPOy/0jd5nnzCgVWFh3FHtnWXL3LOy3M85J+5IMs+mTe5jxrg3bereqFEY\nKmPDhrijkmSQwuqdPsBid1/i7luBKcDg0t8dQPGAuy2AVdH9wcAUd//G3ZcCi6PjyV5asiQMAtWp\nEzz1VJiNaunSMAdtq1ZxR7d32rcPE6385S/w73/HHU1m2LED/vxnOOIIGDMGvve98Ovxttv2fiht\nSS/JJP02QOIP7YJoWaIxwHlmVgC8AFxdhX0xsxFmlm9m+YWFhUmGnpmWLQt1gEccAVOmhAtili6F\n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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXcAAAEICAYAAACktLTqAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3X2c1XP+//HHqytJKYpF6QKRSUlG7JIKa8tV2FAm14Qf\nG4tdSSyllb6ti3b7IoRl6BvWaimtVcTabZtSQyXaVEYtlUpMtqZevz/eZ+rMNBdn6sx8zjnzvN9u\n5zbn8znv8/m8zpmZ13mf9+d9Ye6OiIhkljpRByAiIsmn5C4ikoGU3EVEMpCSu4hIBlJyFxHJQEru\nIiIZSMldymRmdc3sOzNrncyyUTKzw8ws6X1/zew0M1sWt73YzLonUnYXzvWkmQ3d1edXcNz7zOyZ\nZB9XolMv6gAkOczsu7jNRsB/ga2x7WvdPbcqx3P3rUDjZJetDdz9iGQcx8yuBga6e8+4Y1+djGNL\n5lNyzxDuvj25xmqGV7v738orb2b13L2oJmITkZqnZplaIva1+//M7EUz2wgMNLMfm9k/zWy9ma0y\ns7FmVj9Wvp6ZuZm1jW0/H3t8qpltNLN/mFm7qpaNPd7HzD41sw1m9nsz+7uZXV5O3InEeK2ZLTGz\ndWY2Nu65dc3sITNba2ZLgd4VvD93mtnEUvvGmdmDsftXm9mi2Ov5d6xWXd6xCsysZ+x+IzN7Lhbb\nAuDYUmWHmdnS2HEXmNk5sf2dgD8A3WNNXmvi3tt74p5/Xey1rzWzP5vZgYm8N5Uxs/Ni8aw3s+lm\ndkTcY0PNbKWZfWtmn8S91hPMbG5s/1dm9j+Jnk+qgbvrlmE3YBlwWql99wGbgbMJH+p7AscBxxO+\nwR0CfArcGCtfD3CgbWz7eWANkA3UB/4PeH4Xyu4PbAT6xh67BdgCXF7Oa0kkxteApkBb4Jvi1w7c\nCCwAWgHNgZnhT77M8xwCfAfsFXfsr4Hs2PbZsTIGnAJsAjrHHjsNWBZ3rAKgZ+z+GOAdYB+gDbCw\nVNkLgQNjv5OLYzH8KPbY1cA7peJ8Hrgndv/0WIxdgIbA/wLTE3lvynj99wHPxO4fGYvjlNjvaCiw\nOHa/I7AcOCBWth1wSOz+bGBA7H4T4Pio/xdq800199rlfXf/i7tvc/dN7j7b3We5e5G7LwXGAz0q\neP7L7p7n7luAXEJSqWrZs4B57v5a7LGHCB8EZUowxvvdfYO7LyMk0uJzXQg85O4F7r4WGFXBeZYC\nHxM+dAB+Cqxz97zY439x96UeTAfeBsq8aFrKhcB97r7O3ZcTauPx553k7qtiv5MXCB/M2QkcFyAH\neNLd57n7D8AQoIeZtYorU957U5H+wGR3nx77HY0ifEAcDxQRPkg6xpr2Po+9dxA+pNubWXN33+ju\nsxJ8HVINlNxrly/iN8ysg5m9YWb/MbNvgeFAiwqe/5+4+4VUfBG1vLIHxcfh7k6o6ZYpwRgTOheh\nxlmRF4ABsfsXx7aL4zjLzGaZ2Tdmtp5Qa67ovSp2YEUxmNnlZjY/1vyxHuiQ4HEhvL7tx3P3b4F1\nQMu4MlX5nZV33G2E31FLd18M3Er4PXwda+Y7IFb0CiALWGxm/zKzMxJ8HVINlNxrl9LdAB8n1FYP\nc/e9gbsJzQ7VaRWhmQQAMzNKJqPSdifGVcDBcduVddWcBJxmZi0JNfgXYjHuCbwM3E9oMmkG/DXB\nOP5TXgxmdgjwKHA90Dx23E/ijltZt82VhKae4uM1ITT/fJlAXFU5bh3C7+xLAHd/3t1PJDTJ1CW8\nL7j7YnfvT2h6+x3wipk13M1YZBcpudduTYANwPdmdiRwbQ2c83Wgq5mdbWb1gJuA/aopxknAzWbW\n0syaA7dXVNjd/wO8DzwDLHb3z2IP7QE0AFYDW83sLODUKsQw1MyaWRgHcGPcY40JCXw14XPuGkLN\nvdhXQKviC8hleBG4ysw6m9kehCT7nruX+02oCjGfY2Y9Y+f+FeE6ySwzO9LMesXOtyl220Z4AZeY\nWYtYTX9D7LVt281YZBcpuddutwKXEf5xHydc+KxW7v4VcBHwILAWOBT4kNAvP9kxPkpoG/+IcLHv\n5QSe8wLhAun2Jhl3Xw/8EniVcFGyH+FDKhG/IXyDWAZMBf4Yd9x84PfAv2JljgDi26nfAj4DvjKz\n+OaV4ue/SWgeeTX2/NaEdvjd4u4LCO/5o4QPnt7AObH29z2A0YTrJP8hfFO4M/bUM4BFFnpjjQEu\ncvfNuxuP7BoLTZ4i0TCzuoRmgH7u/l7U8YhkCtXcpcaZWe9YM8UewF2EXhb/ijgskYyi5C5ROAlY\nSvjK/zPgPHcvr1lGRHZBQs0yZtYbeIRwZfxJdx9V6vGHgF6xzUbA/rEr/yIiEoFKk3usTfRTwqCO\nAnaMQltYTvlfAMe4+5VJjlVERBKUyMRh3YAlxaPQYvNv9CUMoy7LAEIPgQq1aNHC27Ztm2CYIiIC\nMGfOnDXuXlH3YSCx5N6SkiPsCgjDkHdiZm0IAxuml/P4IGAQQOvWrcnLy0vg9CIiUszMKhtpDST/\ngmp/wpwiW8t60N3Hu3u2u2fvt1+lHzwiIrKLEknuX1Jy+PT2Ychl6E8YNSciIhFKJLnPJsz01s7M\nGhCbMa50ITPrQBit9o/khigiIlVVaXL3sFrPjcA0YBEwyd0XmNnw4oUFYvoDE11DXkVEIpfQMnvu\nPgWYUmrf3aW270leWCIisjs0QlVEJAMpuYuIZCAldxGRGlJYCLffDitWVP+5lNxFRGrAP/4BxxwD\no0fDG29U//mU3EVEqtEPP4Ta+kknhft/+xtcf331nzeh3jIiIlJ1eXlw2WWwcCFcfTX87new9941\nc27V3EVEkmzzZrjrLjjhBNiwAaZOhSeeqLnEDqq5i4gk1fz5obY+fz5ceik88gg0i2B1i7Squefm\nQtu2UKdO+JmbG3VEIiLBli1w331w3HHwn//Aa6/Bs89Gk9ghjWruubkwaFDoSgSwfHnYBsjZ7fXe\nRUR23YIFobY+Zw707w9/+AM0bx5tTGlTc7/zzh2JvVhhYdgvIhKFrVtD18auXUOF86WX4MUXo0/s\nkEY19/I6/dfEYAARkdI+/RQuvzz0Xz/vPHjsMdh//6ij2iFtau6tW1dtv4hIddi2LVwk7dIFPvkk\nNBm/8kpqJXZIo+Q+ciQ0alRyX6NGYb+ISE1YuhR69YKbb4ZTToGPP4aLLwazqCPbWdok95wcGD8e\n2rQJb2SbNmFbF1NFpLq5w6OPQufOMG8eTJgAf/kLHHRQ1JGVL23a3CEkciVzEalJK1bAVVeFaQN+\n+lN46ik4+ODKnxe1tKm5i4jUJPeQyI86Klw0fewxmDYtPRI7pFnNXUSkJqxcCddcA1OmQM+eoRmm\nXbuoo6oa1dxFRGLc4fnnoWNHmDEDxo6Ft99Ov8QOqrmLiADw1Vdw7bVh2oCf/ASeeQbat486ql2n\nmruI1HqTJoXa+ptvwpgxMHNmeid2UHIXkVpszRq46KJwO+QQ+PBDuPVWqFs36sh2X0LJ3cx6m9li\nM1tiZkPKKXOhmS00swVm9kJywxQRSa4//znU1l99NQyG/OADOPLIqKNKnkrb3M2sLjAO+ClQAMw2\ns8nuvjCuTHvgDuBEd19nZik2EFdEJFi3DgYPDhdOu3SBt94Kg5MyTSI1927AEndf6u6bgYlA31Jl\nrgHGufs6AHf/OrlhiojsvqlTQ7/1iRPhN7+Bf/0rMxM7JJbcWwJfxG0XxPbFOxw43Mz+bmb/NLPe\nZR3IzAaZWZ6Z5a1evXrXIhYRqQJ3eP/9MAfMGWfAPvvArFlwzz1Qv37U0VWfZHWFrAe0B3oCrYCZ\nZtbJ3dfHF3L38cB4gOzsbE/SuUVEdrJsGfzxj+H273/DXnvBHXeEGvsee0QdXfVLJLl/CcQPuG0V\n2xevAJjl7luAz83sU0Kyn52UKEVEEvDdd/Dyy2F5u3feCft69YK774bzz4fGjSMNr0YlktxnA+3N\nrB0hqfcHLi5V5s/AAOBpM2tBaKZZmsxARUTKsm1bSOTPPBPmVS8shMMOgxEj4JJLwgyytVGlyd3d\ni8zsRmAaUBeY4O4LzGw4kOfuk2OPnW5mC4GtwK/cfW11Bi4SlW3bYMMG+Oab0POi9O2bb8Lyaz/+\ncag1psKSa5nos89CDf2558LMjXvvHWaNveyyMMI0FedYr0nmHk3Td3Z2tufl5UVybpFt2+Dbb8tO\nzOUl7OL7GzaEi3Tl2WOPkFh++CH8PPpoOPXUcOvevXY1DSTb+vVhNOmzz4Z+6XXqhGl4L78c+vaF\nPfeMOsLqZ2Zz3D270nJK7pJJ3nkHliypPGGvXx8SfHnq14d99w09K0rfytofv2/PPWHLFsjLC5NO\nvf12SESbN0O9enDCCWEVn1NPDfcbNKixtyctbd0a+qI/80wYePTf/0JWVqihDxyY2gtmVAcld6l1\nJk0Kw8iL1auXWGIua3+jRsn9Wl9YGBJ8cbKfMyd8uDRqFGrzxcm+S5fMGPqeDAsWhBr688/DqlXh\ndzRgQEjq2dm1t9lFyV1qlR9+CEPH9947LH+2zz6h+SNVE8D69fDuuzuS/cLYeO999gnt9MXJ/ogj\nUvc1VIe1a+HFF0NSz8sLH3RnnBGaXc48s3Z0YaxMosldU/5KRhg7NvRrfustaN066mgq16xZaCPu\nGxvrvWpVmD+8ONn/6U9h/0EHhSRfnOzTZRWgqtiyJYwcffbZ8MG8ZUu4TvHQQ2Hg0f6azGSXqOYu\naW/16tD17aST4I03oo5m97nD0qUhyU+fHm7FA7rbt9+R7Hv1ghYtoo11d8ybFxJ6bm54ffvvv6O3\ny9FHRx1d6lKzjNQaN94Y1rfMzw8X2jLNtm3w8cc7kv2778LGjeGxLl12JPuTT079njhffRWS+bPP\nht9XgwZw9tkhoffundnTASSLkrvUCp98EiaCGjQI/vd/o46mZsT3xJk+Hf7+9x09cY4/fkeyP+GE\n6m+j3rYt3LZuLfmz9L733w8JferUsH3ccSGh9++vcQBVpeQutcLZZ4ea7JIltbdtdtOmkOBL98TZ\nc8/wwQcVJ95EknN5j1XFQQeFEaOXXpqZ37Bqii6oSsabPh1efx3uv7/2JnYISfy008INSvbEWbw4\nDPSpW7fsn1V9bFePdeih4RuFunnWHNXcJS1t3Rr6On/zTUhgDRtGHZFIzVDNXTLac8+F3hYvvKDE\nLlIWLZAtaef772HoUOjWLVyQE5GdqeYuaWfMmDDo56WXatfoTZGqUM1d0srKlTB6NPTrByeeGHU0\nIqkr7ZL7unU75uGQ2ueuu0I/71Gjoo5EJLWlXXIfOzb03b3wwjDCTWqPefPg6afhF78IXetEpHxp\nl9xvuCEscvvmm2H+iXPPDYM2JLO5w223hVkThw2LOhqR1Jd2yb1FCxg5EpYvD6uYv/tu6O985pnw\nz39GHZ1UlylTwqCc3/wmJHgRqVjaJfdi++wD99wTpnkdORJmzQprVp5+Orz3XtTRSTJt2RJq7e3b\nw3XXRR2NSHpI2+RerGnT0Od52bLQi2L+/DA7Xs+eYXh6RANwJYmeeCJMEDZ6tJakE0lU2if3Yo0b\nw69+BZ9/Dg8/DJ9+GuayOOmk0D6vJJ+eNmwITTEnn7xjYQsRqVxCyd3MepvZYjNbYmZDynj8cjNb\nbWbzYrerkx9qYho1gptuCosdjBsHX3wBffqEqVD/8hcl+XRz//2wZg08+KAGLIlURaXJ3czqAuOA\nPkAWMMDMypqw8//cvUvs9mSS46yyhg3h//2/MBXs+PEhQZxzDnTtCq+8UvXpSqXmLVsWllq75BI4\n9tiooxFJL4nU3LsBS9x9qbtvBiYCafMFuUEDuOaaMHPgM8+EeUn69YPOnWHixDC7oKSmO+4I08WO\nHBl1JCLpJ5Hk3hL4Im67ILavtJ+bWb6ZvWxmKbeMb/36YeWXRYvCMl/btsGAAdCxY5hhsKgo6ggl\n3qxZ4cP3ttsyc1FokeqWrAuqfwHauntn4C3g2bIKmdkgM8szs7zVxSv+1rC6dcOK6h9/DJMmhWXI\nLr0UOnSAp54Ky5WluqKi0HvkpZfg3nvhnXeijii53OGWW+BHP4Jf/zrqaETSU6WLdZjZj4F73P1n\nse07ANz9/nLK1wW+cfemFR03VRbr2LYtXGgdMSKMdG3TBoYMgSuuqP71JyvjHmY//OijkreFC+G/\n/91Rrl49eO01OOOM6GJNppdeCtNLjB8fmtREZIekraFqZvWAT4FTgS+B2cDF7r4grsyB7r4qdv88\n4HZ3P6Gi46ZKci/mHrpMDh8eRrq2bBlqjddcE5Yxq27ffRe+TRQn8Pz88PObb3aUOfBA6NQpXC/o\n1CncDjoojM5dsCAsPtyzZ/XHWp3++1848kjYa68wl4yWZRMpKWkrMbl7kZndCEwD6gIT3H2BmQ0H\n8tx9MjDYzM4BioBvgMt3K/oImIUuk717h2HuI0aELpW//W3oP3/ddSHh7K6iotAHv3Rt/PPPd5Rp\n3DhMjvbzn+9I4p06lb9K/JtvQo8eYbHov/0tdPtMV3/4Q3gvpk1TYhfZHVpDtQLvvhuS/Ntvhzlt\nbr01TFzWpEnlz3UPc4+XrokvWrSjXb9uXTj88B3Ju7hG3qZN6CVSFatWQffuoab/zjvhWOlmzRo4\n7LAwjcTUqVFHI5KaktYsU13SIbkX+8c/QpKfOjXMaXPzzTB4MDRrFh7/9tuSTSrFt3XrdhyjZcuS\ntfBOncJF3GSu/7lsWUjwmzeH+XUOPzx5x64JgweHgWf5+aEXk4jsTMm9GsyeDffdB5Mnw957w09+\nEmriy5fvKNOkSWhSia+NH3UU7LtvzcS4eHEYqr/HHiHBt2lTM+fdXZ9+GhL6lVfC449HHY1I6lJy\nr0bz5oW2+E8+CQkpvjbepk30w+Tnzw8XVps3Dwn+wAOjjScR554bmr+WLAldIEWkbEm7oCo769Il\n9JFPVUcfHZqQTjsNfvrTcO2gvIuxqeCdd0JXzpEjldhFkiVjZoWUkk44IfTf//e/Qw+gb7+NOqKy\nbdsWLlQffDD88pdRRyOSOZTcM1ivXvDyy6EZ6ayzoLAw6oh29vzzMHdumP2xJsYTiNQWSu4Z7swz\nw1w6f/87nHdeyZGtUSssDAutZGeHeX5EJHmU3GuBCy+EJ5+Ev/41JNFUmSTtwQfhyy/Dz6r26xeR\niulfqpa44gp45BF49dXQ3TDq+exXrYJRo8K3ie7do41FJBOpt0wtMngwbNwIw4aFKQ7GjYuu2+bd\nd4fBVg88EM35RTKdknstM3RoSPAPPBAGXI0aVfMJ/qOPYMKE8GHTvn3NnluktlByr2XMQs+UjRth\n9OiQ4IcNq7nzu4euj02bwl131dx5RWobJfdayAx+//swzfBdd4UEf9NNNXPuN9+Et94KF1FrakoG\nkdpIyb2WqlMnrDz1/fdhIrQmTcKF1upUVBSWzTvssDC7pohUHyX3WqxevdAH/vvv4eqrw3z1F11U\nfed76qmwitQrr4SFy0Wk+qgrZC23xx4h2XbvDgMHwuuvV895vv029JDp3j10fxSR6qXkLjRqFOah\nOeYY6NcPpk9P/jlGjYKvv4bf/S76WTNFagMldwHC/PRTp4auieecExYoSZYVK+ChhyAnB447LnnH\nFZHyKbnLds2bh54sBx4IZ5wRJhxLhqFDw8/f/jY5xxORyim5SwkHHBAW2W7SBE4/PSxIsjtmzw4X\nbX/5S2jdOjkxikjllNxlJ23ahFWR6tQJC358/vmuHccdbrkF9t8fhgxJbowiUjEldylT+/ahiaaw\nMCT4lSurfoxXX4X334fhw0ObvojUnISSu5n1NrPFZrbEzMqtg5nZz83MzazS9f3SWW4utG0barZt\n24btTNSpUxhR+vXXYbm+NWsSf+7mzfDrX0NWFlx1VfXFKCJlqzS5m1ldYBzQB8gCBphZVhnlmgA3\nAbOSHWQqyc2FQYNg+fLQ7LB8edjO1ATfrVvo+750KfzsZ7BhQ2LPGzcuLPE3ZkwYLCUiNSuRmns3\nYIm7L3X3zcBEoG8Z5UYADwA/JDG+lHPnnTsvV1dYGPZnqh494E9/CrM5nnlmGNFakW++gREjwgXZ\n3r1rJkYRKSmR5N4S+CJuuyC2bzsz6woc7O5vVHQgMxtkZnlmlrd69eoqB5sKVqyo2v5M0acPvPBC\n6P9+3nnwQwUf4SNGhBr+mDEasCQSld2+oGpmdYAHgVsrK+vu4909292z99tvv909dSTK685XG7r5\n9esX5mF/6y3o3x+2bNm5zGefhSaZK68MbfYiEo1EkvuXwMFx261i+4o1AY4C3jGzZcAJwORMvag6\ncmQYrh+vUaOwvza47DL4wx/gtdfg8st3Xq7v9tvDpGAjRkQSnojEJHKpazbQ3szaEZJ6f+Di4gfd\nfQPQonjbzN4BbnP3vOSGmhpycsLPO+8MTTGtW4fEXry/NrjhhrDYxx13hMFOjz4aml9mzgzdH0eM\nCIOhRCQ6lSZ3dy8ysxuBaUBdYIK7LzCz4UCeu0+u7iBTTU5O7UrmZRkyJMz0eP/9YT3W0aPDCkst\nW4aBSyISrYQ6qbn7FGBKqX13l1O25+6HJelg5MiwmtPvfgfz50NeHjz77M7NViJS89QDWXaZGTz8\ncGiieeYZ6No1zAkvItFTcpfdUqcOPPEEdOwY+sDX0YQWIilByV12W716YW1UEUkdqmeJiGQgJXcR\nkQyk5C4ikoGU3EVEMpCSu4hIBlJyFxHJQEruIiIZSMldRCQDKbmLiGQgJXcRkQyk5C4ikoGU3EVE\nMpCSu4hIBlJyFxHJQEruIiIZSMldRCQDKbmLiGQgJXcRkQyk5C4ikoESSu5m1tvMFpvZEjMbUsbj\n15nZR2Y2z8zeN7Os5IcqIiKJqjS5m1ldYBzQB8gCBpSRvF9w907u3gUYDTyY9EhFRCRhidTcuwFL\n3H2pu28GJgJ94wu4+7dxm3sBnrwQRUSkquolUKYl8EXcdgFwfOlCZnYDcAvQADilrAOZ2SBgEEDr\n1q2rGquIiCQoaRdU3X2cux8K3A4MK6fMeHfPdvfs/fbbL1mnFhGRUhJJ7l8CB8dtt4rtK89E4Nzd\nCUpERHZPIsl9NtDezNqZWQOgPzA5voCZtY/bPBP4LHkhiohIVVXa5u7uRWZ2IzANqAtMcPcFZjYc\nyHP3ycCNZnYasAVYB1xWnUGLiEjFEmpzd/cp7n64ux/q7iNj++6OJXbc/SZ37+juXdy9l7svqM6g\nJcjNhbZtoU6d8DM3N+qIRCRVJNJbRlJQbi4MGgSFhWF7+fKwDZCTE11cIpIaNP1Amrrzzh2JvVhh\nYdgvIqLknqZWrKjafhGpXZTc01R5Y8A0NkxEQMk9bY0cCY0aldzXqFHYLyKi5J6mcnJg/Hho0wbM\nws/x43UxVUQC9ZZJYzk5SuYiUjbV3EVEMpCSu4hIBlJyFxHJQEruIiIZSMldRCQDKbmLiGQgJXcR\nkQyk5C4ikoGU3EVEMpCSu4hIBlJyFxHJQEruIiIZSMldRCQDKbmLiGSghJK7mfU2s8VmtsTMhpTx\n+C1mttDM8s3sbTNrk/xQRUQkUZUmdzOrC4wD+gBZwAAzyypV7EMg2907Ay8Do5MdqIiIJC6Rmns3\nYIm7L3X3zcBEoG98AXef4e6Fsc1/Aq2SG6aIiFRFIsm9JfBF3HZBbF95rgKmlvWAmQ0yszwzy1u9\nenXiUUpKy82Ftm2hTp3wMzc36ohEJKnL7JnZQCAb6FHW4+4+HhgPkJ2d7ck8t0QjNxcGDYLC2Pe2\n5cvDNmgJQJEoJVJz/xI4OG67VWxfCWZ2GnAncI67/zc54Umqu/POHYm9WGFh2C8i0Ukkuc8G2ptZ\nOzNrAPQHJscXMLNjgMcJif3r5IcpqWrFiqrtF5GaUWlyd/ci4EZgGrAImOTuC8xsuJmdEyv2P0Bj\n4CUzm2dmk8s5nGSY1q2rtl9EakZCbe7uPgWYUmrf3XH3T0tyXJImRo4s2eYO0KhR2C8i0dEIVdkt\nOTkwfjy0aQNm4ef48bqYKhK1pPaWkdopJ0fJXCTVqOYuIpKBlNxFRDKQkruISAZSchcRyUBK7iIi\nGUjJXUQkAym5i4hkICV3EZEMpOQuIpKBlNxFRDKQkruISAZScpeMoeX+RHbQxGGSEbTcn0hJqrlL\nRtByfyIlKblLRtByfyIlKblLRtByfyIlKblLRhg5MizvF0/L/UltpuQuGUHL/YmUlFK9ZbZs2UJB\nQQE//PBD1KFIAho2bEirVq2oX79+1KEAWu5PJF5KJfeCggKaNGlC27ZtMbOow5EKuDtr166loKCA\ndu3aRR2OiJSSULOMmfU2s8VmtsTMhpTx+MlmNtfMisys364G88MPP9C8eXMl9jRgZjRv3lzfskRS\nVKXJ3czqAuOAPkAWMMDMskoVWwFcDrywuwEpsacP/a5EUlciNfduwBJ3X+rum4GJQN/4Au6+zN3z\ngW3VEKNI2tAUCJIqEknuLYEv4rYLYvuqzMwGmVmemeWtXr16Vw5RQrL/kdauXUuXLl3o0qULBxxw\nAC1btty+vXnz5oSOccUVV7B48eIKy4wbN47cJP3Xn3TSScybNy8px5LdUzwFwvLl4L5jCgQleIlC\njV5QdffxwHiA7Oxs351jVcdcIs2bN9+eKO+55x4aN27MbbfdVqKMu+Pu1KlT9ufi008/Xel5brjh\nhl0LUFJaRVMgqBeP1LREau5fAgfHbbeK7YtUTc4lsmTJErKyssjJyaFjx46sWrWKQYMGkZ2dTceO\nHRk+fPj2ssU16aKiIpo1a8aQIUM4+uij+fGPf8zXX38NwLBhw3j44Ye3lx8yZAjdunXjiCOO4IMP\nPgDg+++/5+c//zlZWVn069eP7OzsSmvozz//PJ06deKoo45i6NChABQVFXHJJZds3z927FgAHnro\nIbKysujcuTMDBw5M+ntWG2kKBEklidTcZwPtzawdIan3By6u1qgSUNP/SJ988gl//OMfyc7OBmDU\nqFHsu+++FBUV0atXL/r160dWVsnrzBs2bKBHjx6MGjWKW265hQkTJjBkyE6djXB3/vWvfzF58mSG\nDx/Om2+e/xbBAAAMbklEQVS+ye9//3sOOOAAXnnlFebPn0/Xrl0rjK+goIBhw4aRl5dH06ZNOe20\n03j99dfZb7/9WLNmDR999BEA69evB2D06NEsX76cBg0abN8nu6d16/ANsqz9IjWt0pq7uxcBNwLT\ngEXAJHdfYGbDzewcADM7zswKgAuAx81sQXUGDTU/l8ihhx66PbEDvPjii3Tt2pWuXbuyaNEiFi5c\nuNNz9txzT/r06QPAsccey7Jly8o89vnnn79Tmffff5/+/fsDcPTRR9OxY8cK45s1axannHIKLVq0\noH79+lx88cXMnDmTww47jMWLFzN48GCmTZtG06ZNAejYsSMDBw4kNzc3ZQYhpTtNgSCpJKF+7u4+\nxd0Pd/dD3X1kbN/d7j45dn+2u7dy973cvbm7V5yJkqCm/5H22muv7fc/++wzHnnkEaZPn05+fj69\ne/cus793gwYNtt+vW7cuRUVFZR57jz32qLTMrmrevDn5+fl0796dcePGce211wIwbdo0rrvuOmbP\nnk23bt3YunVrUs9bG2kKBEklaTu3TJT/SN9++y1NmjRh7733ZtWqVUybNi3p5zjxxBOZNGkSAB99\n9FGZ3wziHX/88cyYMYO1a9dSVFTExIkT6dGjB6tXr8bdueCCCxg+fDhz585l69atFBQUcMoppzB6\n9GjWrFlDYekLGLJLcnJg2TLYti38jCqxq0umpNT0A1UV1VwiXbt2JSsriw4dOtCmTRtOPPHEpJ/j\nF7/4BZdeeilZWVnbb8VNKmVp1aoVI0aMoGfPnrg7Z599NmeeeSZz587lqquuwt0xMx544AGKioq4\n+OKL2bhxI9u2beO2226jSZMmSX8NEg2tSiUA5r5bPRJ3WXZ2tufl5ZXYt2jRIo488shI4kk1RUVF\nFBUV0bBhQz777DNOP/10PvvsM+rVS63PY/3OUk/btmVf2G3TJnybkPRmZnPcPbuycqmVKWS77777\njlNPPZWioiLcnccffzzlErukJnXJFFByT1nNmjVjzpw5UYchaUhdMgXS+IKqiJRNXTIFlNxFMo66\nZAqoWUYkI2lVKlHNXUQkAym5x+nVq9dOA5Iefvhhrr/++gqf17hxYwBWrlxJv35lL0TVs2dPSnf9\n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\n9P8B6H4ZRCYlex8AAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\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(len(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.legend()\n", "\n", "plt.figure()\n", "\n", "plt.plot(epochs, loss, 'bo', label='Training loss')\n", "plt.plot(epochs, val_loss, 'b', label='Validation loss')\n", "plt.title('Training and validation loss')\n", "plt.legend()\n", "\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As a reminder, in chapter 3, our very first naive approach to this very dataset got us to 88% test accuracy. Unfortunately, our small \n", "recurrent network doesn't perform very well at all compared to this baseline (only up to 85% validation accuracy). Part of the problem is \n", "that our inputs only consider the first 500 words rather the full sequences -- \n", "hence our RNN has access to less information than our earlier baseline model. The remainder of the problem is simply that `SimpleRNN` isn't very good at processing long sequences, like text. Other types of recurrent layers perform much better. Let's take a look at some \n", "more advanced layers." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "[...]\n", "\n", "## A concrete LSTM example in Keras\n", "\n", "Now let's switch to more practical concerns: we will set up a model using a LSTM layer and train it on the IMDB data. Here's the network, \n", "similar to the one with `SimpleRNN` that we just presented. We only specify the output dimensionality of the LSTM layer, and leave every \n", "other argument (there are lots) to the Keras defaults. Keras has good defaults, and things will almost always \"just work\" without you \n", "having to spend time tuning parameters by hand." ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Train on 20000 samples, validate on 5000 samples\n", "Epoch 1/10\n", "20000/20000 [==============================] - 108s - loss: 0.5038 - acc: 0.7574 - val_loss: 0.3853 - val_acc: 0.8346\n", "Epoch 2/10\n", "20000/20000 [==============================] - 108s - loss: 0.2917 - acc: 0.8866 - val_loss: 0.3020 - val_acc: 0.8794\n", "Epoch 3/10\n", "20000/20000 [==============================] - 107s - loss: 0.2305 - acc: 0.9105 - val_loss: 0.3125 - val_acc: 0.8688\n", "Epoch 4/10\n", "20000/20000 [==============================] - 107s - loss: 0.2033 - acc: 0.9261 - val_loss: 0.4013 - val_acc: 0.8574\n", "Epoch 5/10\n", "20000/20000 [==============================] - 107s - loss: 0.1749 - acc: 0.9385 - val_loss: 0.3273 - val_acc: 0.8912\n", "Epoch 6/10\n", "20000/20000 [==============================] - 107s - loss: 0.1543 - acc: 0.9457 - val_loss: 0.3505 - val_acc: 0.8774\n", "Epoch 7/10\n", "20000/20000 [==============================] - 107s - loss: 0.1417 - acc: 0.9493 - val_loss: 0.4485 - val_acc: 0.8396\n", "Epoch 8/10\n", "20000/20000 [==============================] - 106s - loss: 0.1331 - acc: 0.9522 - val_loss: 0.3242 - val_acc: 0.8928\n", "Epoch 9/10\n", "20000/20000 [==============================] - 106s - loss: 0.1147 - acc: 0.9618 - val_loss: 0.4216 - val_acc: 0.8746\n", "Epoch 10/10\n", "20000/20000 [==============================] - 106s - loss: 0.1092 - acc: 0.9628 - val_loss: 0.3972 - val_acc: 0.8758\n" ] } ], "source": [ "from keras.layers import LSTM\n", "\n", "model = Sequential()\n", "model.add(Embedding(max_features, 32))\n", "model.add(LSTM(32))\n", "model.add(Dense(1, activation='sigmoid'))\n", "\n", "model.compile(optimizer='rmsprop',\n", " loss='binary_crossentropy',\n", " metrics=['acc'])\n", "history = model.fit(input_train, y_train,\n", " epochs=10,\n", " batch_size=128,\n", " validation_split=0.2)" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "image/png": "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\nucA6EfkKOAnI+RdqA6SLyArcBd6H8rX6qRCGDh3KrFmz8kybNWsWQ4cODWv5U045hTlz5pR6+/mT\n/htvvEG9evVKvT5T/mKhLh2sasVwfBz4WHl06dJF81uzZs3PppWnHTt2aGJioh46dEhVVTdt2qTN\nmjXTY8eO6b59+7RXr17aqVMnbdeunb7++uu5y9WsWTO3fNu2bVVVNSsrS6+44gpt3bq1XnLJJZqW\nlqZLlixRVdXrrrtOu3TposnJyXr33XerqurkyZO1atWq2q5dOz333HNVVbVFixaamZmpqqqPPfaY\ntm3bVtu2batPPPFE7vZat26to0aN0uTkZO3Tp49mZWX97H3NnTtX09LSNCUlRXv37q3ff/+9qqru\n27dPR4wYoe3atdP27dvrnDlzVFV1/vz52qlTJ+3QoYP26tWrwH3l92cVq0RU3TF+3oeI35GZeAGk\naxg5tsL16rnlFihg+PgySUkBbxj7AjVo0IC0tDTmz5/PwIEDmTVrFpdffjkiQkJCAq+99hp16tTh\nxx9/5Mwzz2TAgAGF3i/26aefpkaNGqxdu5aVK1fSuXPn3HkTJ06kQYMGHD16lN69e7Ny5Upuuukm\nHn/8cRYuXEijRo3yrGvp0qU8//zzfP7556gqXbt2pUePHtSvX5/169czc+ZM/va3v3H55Zfz6quv\nMnz48DzLn3322Xz22WeICNOmTePhhx/mscce4/7776du3bqsWuX61O3atYvMzEyuvfZaFi1aRMuW\nLW18nhIq74EAjSlM3I29Ey2hVTyhVTuqyh133EGHDh0477zz2Lp1K9u3by90PYsWLcpNvh06dKBD\nhw6582bPnk3nzp3p1KkTq1evLnAwtVAfffQRl156KTVr1qRWrVoMGjSIDz/8EICWLVuSkuL6xBU2\nfHNGRgYXXHAB7du355FHHmH16tUALFiwIM9dvOrXr89nn33GOeecQ8uWLQEbfrmkrC7dxIoKd6Rf\n1BF5NA0cOJCxY8fyxRdfkJWVRZcuXQA3gFlmZiZLly6latWqJCUllWoY402bNvHoo4+yZMkS6tev\nz4gRI8o0HHLOsMzghmbOGUEz1I033sjvf/97BgwYwPvvv8+ECRNKvT1TtJw6cz97whoDdqQftlq1\natGzZ09GjhyZ5wLunj17OPHEE6latSoLFy7km4LO4UOcc845vPLKKwD897//ZeXKlYAblrlmzZrU\n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\nSUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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\n++yz3Elk2rZty4EDB0p9bQti7fSNMbn+8AcI9YRQbdqAly8LVLduXdq3b8/HH39M7969mT59Otdd\ndx0iQpUqVZg1axY1a9Zk165dnH/++fTq1avQeWJfeOEFqlatyurVq1m+fDnJycm5r40bN466deuS\nlZVFt27dWL58OcOHD+fpp59m/vz51K9fP8+xFi9ezKuvvsrChQtRVTp06EDnzp2pU6cO69at4623\n3uKll17iuuuu49133y1yfPwbb7yRyZMn07lzZx599FEee+wxJk2axPjx49m4cSOVK1fOLVJ66qmn\nmDJlCh07duTgwYNUqVKlBFe7eHanb4zxXWART2DRjqoycuRIWrduzSWXXMK2bdvYuXNnocdZsGBB\nbvJt3bo1rVu3zn1txowZJCcn07ZtW1auXFnsYGpffPEFffr0oVq1alSvXp2rr76azz//HIBmzZrR\npk0boOjhm8GN77937146d+4MwODBg1mwYEFujAMHDuSNN97I7fnbsWNH7rvvPp577jn27t0b8h7B\ndqdvjMlV1B15OPXu3Zt7772XJUuWcPjwYdq1c1NypKamkpGRweLFi6lYsSKJiYkFDqdcnI0bN/LU\nU0+xaNEi6tSpw5AhQ0p1nBw5wzKDG5q5uOKdwnz44YcsWLCA999/n3HjxrFixQpGjBjBFVdcwUcf\nfUTHjh2ZM2cOzZs3L3Ws+dmdvjHGd9WrV6dr167cfPPNeSpw9+3bx0knnUTFihWZP38+mwuaDDvA\nRRddxJtvvgnAt99+y/LlywE3LHO1atWoVasWO3fu5OOPP87dp0aNGgWWm3fq1In33nuPw4cPc+jQ\nIWbNmkWnTp1K/N5q1apFnTp1cr8lTJs2jc6dO5Odnc3WrVvp2rUrEyZMYN++fRw8eJDvv/+eVq1a\n8eCDD3LeeeexZs2aEp+zKHanb4yJCv3796dPnz55WvIMHDiQnj170qpVK1JSUoq947399tu56aab\naNGiBS1atMj9xnDuuefStm1bmjdvTpMmTfIMyzx06FB69OhBw4YNmT9/fu765ORkhgwZQvv27QG4\n9dZbadu2bZFFOYV5/fXXGTZsGIcPH+a0007j1VdfJSsri0GDBrFv3z5UleHDh1O7dm0eeeQR5s+f\nT4UKFWjZsmXuLGChYkMrGxPnbGjl8qcsQysHVbwjIj1EZK2IrBeREUVsd42IqIikeMuJInJERJZ5\n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\nAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "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(len(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.legend()\n", "\n", "plt.figure()\n", "\n", "plt.plot(epochs, loss, 'bo', label='Training loss')\n", "plt.plot(epochs, val_loss, 'b', label='Validation loss')\n", "plt.title('Training and validation loss')\n", "plt.legend()\n", "\n", "plt.show()" ] } ], "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.5.2" } }, "nbformat": 4, "nbformat_minor": 2 }