Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save anadiedrichs/ec29d4d5c415baa6e6927cbd198940b2 to your computer and use it in GitHub Desktop.
Save anadiedrichs/ec29d4d5c415baa6e6927cbd198940b2 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# LSTM pre-processing time series\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"El objetivo de este notebook es predecir T periodos futuros dada la informacion de look_back periodos pasados\n",
"TODO TASK \n",
"* Verificar funcionamiento para más de un feature (multiple inputs or multiple features)\n",
"* Chequear como graficar trainPredict vs testPredict, subindices y funciones plot\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## load libraries"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [],
"source": [
"\n",
"# -*- coding: utf-8 -*-\n",
"# LSTM for international airline passengers problem with regression framing\n",
"import numpy\n",
"import matplotlib.pyplot as plt\n",
"import pandas\n",
"import math\n",
"from keras.models import Sequential\n",
"from keras.layers.core import Dense, Dropout, Activation\n",
"from keras.layers import Dense, Input\n",
"from keras.layers import LSTM\n",
"from keras.layers.wrappers import TimeDistributed\n",
"from sklearn.preprocessing import MinMaxScaler\n",
"from sklearn.metrics import mean_squared_error,mean_absolute_error\n",
"from keras.layers.core import Flatten"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## function to create datasets input and output"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def create_dataset(dataset, look_back=1, time_step = 1):\n",
" dataX, dataY = [], []\n",
" for i in range(len(dataset)-look_back-time_step):\n",
" a = dataset[i:(i+look_back),0] # processing only one sensor\n",
" dataX.append(a)\n",
" b = dataset[i + look_back:(i + look_back + time_step),0]\n",
" dataY.append(b) # processing only one sensor\n",
" return numpy.array(dataX), numpy.array(dataY)\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## load data and plotting"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(975, 1)\n"
]
}
],
"source": [
"# fix random seed for reproducibility\n",
"numpy.random.seed(7)\n",
"dataframe = pandas.read_csv('peach_four_sensors.csv', usecols=[1], engine='python', skiprows=2) #,skipfooter=3\n",
"print(dataframe.shape)\n"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAXYAAAD8CAYAAABjAo9vAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJztvXmYHFd57/89VV29THfPplk02iVL1uJFsi28YGOMbcAY\ngiGEH5ALYbFj8oRwgfCDmCUh3CQEQggJkEB8gWDALAFMMGBjbGO84FXCtqzVsiRrnX3rfT/3j6pT\nXTPqnu6uOlWnenQ+z6NH3TXdPad6qt56612+L6GUQiKRSCSLB0X0AiQSiUTCF2nYJRKJZJEhDbtE\nIpEsMqRhl0gkkkWGNOwSiUSyyJCGXSKRSBYZ0rBLJBLJIkMadolEIllkSMMukUgki4yAl7+sr6+P\nrlmzxstfKZFIJG3Pzp07Jyil/c2+3lPDvmbNGuzYscPLXymRSCRtDyHkaCuvl6EYiUQiWWRIwy6R\nSCSLDGnYJRKJZJEhDbtEIpEsMqRhl0gkkkWGNOwSiUSyyJCGXSKRSBYZ0rBzIpUv4QdPHkO2UIYc\nNyiRSEQiDTsnPvzfz+CWO57D5r/5Fb7xyBHRy5FIJGcw0rBzYseL0+bj/3nmpMCVSCSSMx1p2Dkw\nmykikSuaz8MBVeBqJBLJmY407Bx44sgkiuVqXD0a8lSCRyKRSOYgDTsHbv7OTgDA2y5eCQCQqVOJ\nRCIS6Vo65PhUxnz8mTeeh1yxgocPToBSCkKIwJVJJJIzFemxO+SF8RQA4JpNAyCE4MJV3ZhI5XFi\nOit4ZQtzcDSJf7vvIL58/0HRS5FIJJyRHrtDTs3oBvzv33guAOCCVT0AgF0nZrGyt0PYuhaiUqF4\n7ZceQaFcAQC8/5oNglckkUh4Ij12hwzP5KAQYCAeBgAMden/jydzIpe1IEenMqZRB4CHnh8XuBqJ\nRMIbadgdMpUpoKcjCFXR4+ldEQ0AMJ0pLvQ2obC8wMbBOADgT775JP7qx7twcsbf4SOJRNIc0rA7\nZDZTRHeHZj4PqAq6IhqmMwWBq1qYIxNpAMAbLlhubvvhjuP4qx/vErUkiUTCkbYw7I++MIHvPPai\n6GXUZCZbQHdHcM623mgQkyl/GvZErohP3bkHAPAnl63G5950nvmziVRe1LIkEglHGhp2QkiYEPIk\nIeRZQsgeQsinje29hJB7CSEHjf973Frkr/eO4p/uOeDWxztiOl1Ed0Sbs+2s/igOjCYFrWhhjk1W\nyzOjoQD+v+0rzeeJrH/DRxKJpHma8djzAK6mlG4FsA3AdYSQSwHcAuB+SukGAPcbz11hSTSIZK6E\nQqnS+MUeQinF8akMlnVH5mzfuDSOw+MplMr+Wi8AU/rg+396KQDMqbUvVmRrlUSyGGho2KlOyniq\nGf8ogBsA3GZsvw3AG1xZIYDemB7qmEr7K7zxi13DSOZL2DAYm7N9aVcEFQpM+my9AJDMlQAA8XC1\n0lVTdeNeloZdIlkUNBVjJ4SohJBnAIwBuJdS+gSAQUrpsPGSEQCDLq0RS6K6YfdbDHj3yVkAwPXn\nDc3ZvrRTL3kcTfiv5JGFW7os4aN3vXQNAPjyDkMiscPjhyfxj3fvE70MYTRl2CmlZUrpNgArAFxM\nCDl33s8p6kikEEJuJoTsIITsGB+3Vy/daRghq4KiHxiezWFVbwf6YqE521f06KGZg6OpWm8Tyqxh\n2K0e+8desxl/ctlqZItySIhkcfDWWx/Hfz54+Ix1VlqqiqGUzgB4AMB1AEYJIUMAYPw/Vuc9t1JK\nt1NKt/f399taZEdQN0K5YtnW+91iJJHDUqMhycrGwTi6OzQ89eKUgFUtzHMnZ9EXC87x2BWFYEVP\nBMUyRSpfErg6icQ5Vudk5gwtCGimKqafENJtPI4AeCWA/QDuBPBO42XvBPAztxYZ0XR980zBZ4Z9\nNmd2mlpRFILl3RGMJf0VOgKAF8ZSOG9512kCZaxkc8bHjVUSSTOMWEKgMz7uJ3GTZjz2IQAPEEJ2\nAXgKeoz9FwA+C+CVhJCDAK41nrtCR1A37FkfGXZKKUZma3vsANAfD2Hch4Z9NltEz7y6ewDoNbb5\nubFKImkGq3NypjoqDUXAKKW7AFxQY/skgGvcWNR8Isyw+ygUM57Ko1CuYKiztmHvi4VwYMR/teyz\nmSK6OrTTtvcYCWq/NlZJJM1iDdn6WdrDTdqi89SPoRiWGN1g6K3MpzuimYlKv1AqV5DMl+bE1xkr\njYTv8enMaT+TSNqJvKXf5Uy9A20rw+6nUMwhQ4d9w0Cs5s9j4QAyhbKvasOnjIN8fqcsoIeOIpqK\nFyekYZe0N1bDLmPsPkZRCMKa4qtQzPBsDppKTit1ZMSMuad+qjJ59rhed3/O8q7TfkYIwdKuMMZ8\nLDcskSzEmlt+ic/ctQ95i504NXNmHs9tYdgBIKgqvpIUGJnNYbAzDEWpPf6uM6x7xX4y7DtenEJQ\nVXBeDcMOAD0d/lallEjmU6lQ/PdTx5E2zrNbHzqMnMVO/Gr3iKilCaVtJigFA+qcWyzRHJ5IY2VP\n/QlJMaMBKJXzj2HffWoWm4fiCBuhrfn0RkNSk13SVnz9kcP4zF3759xpMo/9Dy9YjjuePolkroh4\n+PTw42KmbTz2UEBBvuSPUEy5QrF/OIHNQ511X8NCMUkfdcuenM4uOK6vN6phKu2/Ek2JpBZjiRw+\nc9d+AICqVE0ZcwAvWK0Lzh6dPPPyRm1l2P0SihlN5JAvVXDWQLTua5jHnvRJKIZSilOzOSyfp0Rp\nJR7WfHWHIZEsBBsYA2CO08fKHZcZPSZnYi172xj2oI8MOwtXLGQkO30WikkYssf98drJXkDXZ88U\ny6j4qJJHIqnH8elq2NBaWsw89iVGYYOf8lxe0V6G3SeCPsOzejxvvg67lVjIX8lTVvZVq+uUEQ2q\noNRfjWC1+OnTJ3D7E0dFL0MiGGtn93zDTki1m9ov56CXtI9h91FVzCyrB6/RwcnwW/KU3Y4utOYO\nIy+QLvhjzbX453sO4EM/fBaf+Olu0UtpmnypjF/vOTOrM9xkJlNAKKCgu0ObM/0rXywjFFDMczAt\nDbt/8VMohhnJWh2cjA5NBSH+ibEzlbsFL0Yho8M370+PPZ0v4SsPvCB6GS3zxXsP4ubv7MSjhyZE\nL2VR8dDBCYQ1FR2aOieOni9VEAqoiBrHs/TYfYxeFeMPwz6bLSKiqQgFapcNAnpTVYem+sZbGDby\nAvUaqoCqPLJfPfZXffGhOc//8ofPtEU+4IQh0+BHUbh2JZ0vYd9wQj8Xg+qcWQ35ku6xhwIqgqpi\nTg07k2gbw+4nj302W1zQW2eENdU3a951chZdEQ2rFih3jDLD7kOPnVJqJq3X9unVSHc8fRLjPpuq\nVQtN1U+zYtn/F6HjUxlc9Hf34vC4/4bEWDllHAuvO38I0VBgTow9V6yYvRqRoOq7OQ5e0EaGXfVN\n8nQsmUdfvH4SkhEKKL45qCaSeQx1hU/TYbfSYdy6+tFjt867fd351VGEI7P+bxkPGN3JfjkWFuKH\nTx3HZLqAO589JXopC8Iu8u966RpENHVe8lT32AFdZ6odvnfetI1h1xSCok8M+6mZ7IKljoyQ5p9u\n2WyxbMof14M1Vfkxxn7zd3YCAD7/R+fjNedWDfve4YSoJTWNZhgZv6l91uLUrG4waw2Q8RNMXrov\nFkJHUEWuWD3P8sUKQpph2IOq76u83KBtDHtAJSj54FaWhQQWKnVk+KlbNlMomwNL6sF+7pe8AGM6\nXcDOo9MAgFefu3TORfVjdzyHe3xecVI0Lu7tkMSbNu6MWLmuX2HfZTwcMHNDDJY8BfRwqJ9UYb2i\njQy7glJFvPc7my0iUyg37bFbPQmRpPOl006A+UR9mjx97qSuSvnZPzwPnWENXR0a9v/ddebPnzzi\nv9myVtiwh6/+9pCvZJxrUTLW54dzbSGYYY+GAqfdieaKZYSZx+4zVVivaBvDrodixJ8UJ6Ybd50y\n/OSxZ4tNeOwh/w00AaqG/dXnLDW3WYXMggH/HsZf/e0h3Ldv1Hz+zPFpgatpTMUYBM0uQLtPzuJv\n79wzZ0C0aB44MIbP33MAmkoQCiiIzjuu04Wy6bHL5KnPCaiKL2LsLBu/vKdZwy5+zUBzoZhQQIWm\nEt+FDB4+OI5NS+Pm+D5G3MgJBOpIJ/uBz/1q/5znX7z3IB7YPyZoNY1h4U7mub/uy4/gW4++6KtS\nzXf/11MA9PJcQggi8+5E9w0nwI6IiCZj7L7GLzH2U03oxDBCAX+EYiilyORLiGiNVZrDAX/FJFP5\nEna8OI2Xb+w/7Wf3ffjlAODLOuVjkxl885Ejp21/5IUJvPtbT/nKA7bCPPZSmWI0Ua04GvOJYf/s\n3dULJUtG13JYjk3pvQOhMzTG3jZ67JqioOiDuN+p2RxCAQW90cbljmHNH6GYA6NJpAtlnD1Ye4yf\nFb2SR/yaGY8dmkSpQnHV2QOn/WywM4xVvR2+HA7yntuewgtj9WvBx1N5DMT9VXnyqZ/txlMv6qGi\ncqVieu2Armh6bp0BLV5xfCqDrz14yHy+xDgHaxl21biL80sI12saeuyEkJWEkAcIIXsJIXsIIR8w\ntv8tIeQkIeQZ49/1bi40oBJQCuHJp4lUHv3x0IL14IxQQEXeBx77LmMk3qXrljR8bVhTfHGXwWCz\nZc9fUX/qkx9lWZnHyHj2U69CPFz1oxYy+qK47bGqsFqpQlGyhD5HEuL7BU5ZhsBcsKobT3z8GgAw\na9atBFRi/K8ItxkiaMZjLwH4MKX094SQOICdhJB7jZ99kVL6z+4tr0q1e68CVVk4Vuwms5nignor\nVkKaP2Lsz48mEdaUBbtOGWGfNXSMJnKIhQKIhmofqrliBQ8+P46ZTAHdCyhXeo214/jj129CV0Sb\ns82PFyMrpTKd4+mOJsSHYiYtTWp/d8O5CKhzDXpHUDUT/2zwhqb6p//FSxp67JTSYUrp743HSQD7\nACx3e2Hz0YwrcEnw1XcmW0R3pDkDEgoocwbrioLdZdSbz2pF99jFr5kxlshjoLO+vs2B0SQA4LcH\nxr1aUkPmh7KWd+sX1Gs2V8NJfpqsVYtShc4peRyZFT8yccIiH7HBElZkJmFppyW0ZeQKAooi3GaI\noKXkKSFkDYALADxhbHo/IWQXIeSbhJAezmubQ8C4ApcEX31nMgV0Nemxh33SeTrbwsUo7JOEL2M0\nkcPgArHoP7xQ9zHYrbcfmEjNjfm/YpOe+P3Cm7fhezddAsB/Cd/5ydxypTKnWOE3+8eFC66x7/Xu\nD7xsjgAfS/jGLKEuttSA9NgXhhASA/ATAB+klCYAfBXAOgDbAAwD+EKd991MCNlBCNkxPm7fq2Ie\nu+hEyESqYAr4NyJkDAcRfUI0K1oGGKEYHyVPR5O5BT32W67bBKDaBOQH5nfussawSFDFJUaew2+G\nPT2vcqRYpqZBfP3WZZhI5bFvRKx8w2Qqj95o8LRZw2yovDUPQ6Gfc5qq+KKazmuaMuyEEA26Ub+d\nUnoHAFBKRymlZUppBcD/BXBxrfdSSm+llG6nlG7v7z+9ZK1ZWDxNZEfcbLaI2WwRK5qoYQdgehWi\nvfaZlgy7f5KnlFKMJfIY7KzvsbO7p1kfVcYs1AegKgTRoOq7XgEWGmKVU+UKNUMYV2zoA6BXKInk\n9ieOQalRtHDtlkH86M8uw01XrDO3nTOkG3lVIWdk8rSZqhgC4BsA9lFK/8WyfcjysjcCcHWkDWtC\nEXn1fcwYlLB6SeMkJACzrVl0+eBspth0+Cikqb7ICwC6gcyXKmZZWy1CARVhTfGVwBbz2C9btwSf\ne9N5p/08Fg74LsbO7iDef/UGBAN6aTHz2Ff2dGAgHsKBkaSw9Y0l9aqciToyzS9Z0zsnwf7pG84B\nYJQ7+qBM2muaqYq5HMA7ADxHCHnG2PZxAG8jhGwDQAG8COC9rqzQwFoVI4rbHj2Klb0RvLxGTXUt\n/OCxF8sVTKYLGFhgiLUVPcbuD8OeMIxNoyqksI80eYDqOMS/+YMtp4UNACAe1nznse89pYdZYuEA\nAgpBuUxNJ0pTCXo6gnOGWXgNu/C85/K1dV9jrWdnkhMBVTHLpFUfdyjzpqFhp5Q+AqDWN3IX/+XU\nJyC4KoZSiudOzuJNFy5vKH/LYPW1Ig0lawVvthkmrCnI+SDhC8CcY9kZbmDYfXQxAoAdhhJlrE6J\nZiwU8F2M/YM/1H22TsOwW6tiAqqCzkhA6F0Ruwt66Vn1ezFqNSoFzNycuDLpY5MZfP7XB/DeK9d5\n1uTVPpICxtVWVLxsPJlHKl/Cuv7G3ZuMkBmKEWcomYBWs/rafqpjZ4akUX7ATxcjANh5dBoBhdRN\n+sbD/jPsjHhYM5VUWaFCQCHoDGtIZMWtmU31qtfPAKBm06DGqukExtlPTGfw82dPefo3bxvDzpIm\nogz7ofE0AGBdf7Tp9/ghfPT44UmEAgouX9/X1OtZHbsftEyeO6FflDobGnb/XIx+sesUnjk+g/UD\nsbozcePhgO9CMYyIpgvBFUoVSyhGQWdEExqKyRSYTG9rXrd5py/wHJwwGqv6m5i6xou20YphfyBR\nhv3whN4CzuZtNoMfSjSn0gUMdoablrYNB1RUqL7mYEBcTJJSin+4ax8AYFWDZLWfDPvdz+lDP5i8\ncy3iIc13ydOz+qM4MpHGyt4ORIMBZAplSyiGoDMcMENjImAXwkYzBZ791KvmOCVm0YVAj33SSPgu\niTaX5+JB2xh25rGL+gP9xwOHEAsFsKyruVJHwB9NVZOpQlOCZQyWdMqVykJ1zq0ebcMYu6b4QpMH\nqOZVrt5UP8EeCwfMBKtfCCgKXrllEIAe7sgUyqZDoikKuiIakvkSKhXaVAczb5hUQL28BWN+2M4s\nkxboXI0l8wgopOmSYx60TSiGGcmKgBDB8akMTs5ksaIn0tJBzUIxIodwT6YL6Iu1YtjFJ3yB6kzL\nL7x5a8PX+qmpaiZbRFBV8Lk3nV/3NfFwAOlC2Vf11YVyBUEjdNRh1NkzhySgEnRGNFAKpARN12LJ\n045WQzFKNXkqin3DCawfiHl6QWwbw64KrGNnA5P/4Y3ntvQ+U99GaCgm35LHHjI8dtEe8GTauH1t\n4qLkp6qYE9MZXLWxf8HKKeZ1+inOXihVzONV99hLpjHUQzG6tykqHMOSpx1aa4ZdU8UnTw+OprBp\nadzT39l2hl2El3NsUpdgXT/Q2h9HE9wtSynFVLqAJbHmY3tmKEawoRye1RtSFuo6ZfhFRRMATk43\nHnTO5Hv9EmcvlitI5opmGKkjqCKTnxuK6YzoaxZV8pgplBDWlNMUHRshOnlarlCMJHJNTVzjSfsZ\ndgGhmJFEDhFNRWe4tZQEO6gKJTHeQiJXQrFMF+zcnA87uUUbyqPGxbQZqWFNVVD0gWEvlStIF8oN\nG6rihvfrF4/9hq/8DolcyXREYqEA0oWS6ZBoAcXisQsKxRRK5rD1VmAhXFEFDGPJHMoViqEWcnM8\naD/DLsD7HUnkMNjZ3HANK6I9djMb30KMnRl2kXkBADg6mUZfLLRg3TIjGFBQ8IHQU6bYXIKP/dwv\ntews1BhUmcceQNrisQcUYpaciip5TOfLLcfXAfH9L2ygSivVdDxoG8Ne/QN5/7sPjiaxxsYfRnQd\n+5RRP9vbQpkVq4QRHWM/OpnBmiY1eYI+GXTOEnyNLkYsFOO3yhjN+NtHQyrSlhi7pipmRYe4GLtN\nj52VHAtyrpi+zpYa0hJu0jaGvdqg5O0fKJEr4uBYCheual1uvpqRF+MtMP3q1kIxTN9GXIz92GQG\nO49OY/WS5i6mfpmSY1ZuNJCcYIZdZMNPLaweO6X6hYcQ/W7ZDMUIuhhlCuWm7t7mowkudxxP5hEM\nKE1PXeNF29Sxi9KKefb4DCiFLcPOvF/RHrutUIzAmPWVn38AAPC2i1c29XrNJx57Kt9cKMZvMXZG\n0OKxA3qilLXksyEWojz2VL40Z2Zss1RVYcUcH9MZfX5Dq2Fcp7SNxy6qKoZ1ELYiJcAQLTXMYuwt\nlTsKTp6yapygquCi1c1dTHXDToUPNGk2FGOWO/ogFGP9ztjfnoU8ZrNF06FSFYKIppqt/V6TKZQa\nXjBrwapoioKOjal08zOSedI+hl2QVowd48jQBHvsk+kC4qFAXc2SWrDXivLYD43ryaYvvmVb016O\neWckWHf72JReydNIcK0jqEIh/kiejlv0zVntvdVjD1iaavSQlxgDmc6XG8oJ1EITXO44k2mt85sX\n7WPYBXnsEyndOIZbbIwAqspyok6GqXQBvS2EYQBL8lSQYX/eGE69cWnzKpp+0OQB9ERZNKiao9rq\nQQhBLOQPIbAT0xnzcURjnadVj12z1I0HA6qwaql0odSyABhgaWwU5bFnCuhpcpQmT9omxi7KsE+m\nCy3FqK1oZh27KI8931LiFLDG2MUkTw+MpBBUlaYTp0A16VcsVQDvdJZO4+RMFsublJ2Ih8WqJTKm\n0tU1LDXuNJgB3T9vYlJQJcL6BTL59kyezmSK6InKUExdAoIalCZT+ZY6N60EVAWaSoTpmOgCYK2t\nXbTHvnc4gXX90TmeYiNEh7wYo4lcU52ygCHd64NQDIuZf/z6TXjpWbq0cz0DqhnD2b2mUKqgUK4g\n2uSAGytVdUfv112pUMwI8tjbxrAL89hThZa9XithTUW2IMiwtygABohNns5kCnjk4HjT2vEMP4it\nAa0bdl/E2I0JW6/futzcVq9eXFT10UxWr+6yo45Y7SXx3mNP5IqoUEjDvhCiRMAm03n0NTkvtBYR\nTRVSE16pUEynW0/cBFQFChETPvrGI0dQocDl6+uPP6tFUODJy6CUYjpdbDps54cY+13PDePvf6lr\n3lu7OuvV4QdVRYg8xkxGDxd12zCQIrViWLmxDMUsADPsXsr2liu6iFZfG3rsiVwRpQq1FUYKBcRc\njL78mxcANKcPY8X02AXW3mcKZRTKlaa9s2goYJZHiuK2R180H1tVExcKxYjw2KeZgbRj2BVx5Y7T\nGfvrdkrbGXYvs9vTmQIqFLZj7IDusWcFKCVOplvvOmUEA4oQI8k8xbNamCsLWKtixBn26kncnHcW\nVMXEq62wNQOYo5oYqjNgJWiMzPOaadNjb93zNXNzQi5I+rqlYV8AETF2NuzBblUMAISDKrICdFfs\ndJ0yQgExMriqQvCul65pXWzNB8JlrYYLAioRqtMP1K+jt37/73vFWeZjUTF2FrKyE2MX1bEO6KWO\ngL0eGKc0NOyEkJWEkAcIIXsJIXsIIR8wtvcSQu4lhBw0/m+9574FqjXh3h1YTpqTGBFjOLTXOFl7\nSPPeY5/NFJHMlZpOPlqZU+4oiFZvu/0gg9CMk/SRV28yHwcFhWJY5U4jDZ5aiEyeDs/kQAjQ7yBH\nZ5dmPPYSgA9TSrcAuBTA+wghWwDcAuB+SukGAPcbz11DUQgCire3gmyogJNbqYigQcssFNNnI4wU\nVL332H+1ZxgAmpYRsFLV5BHnAbNwQbOhGD8Y9lZj/JqA4wKoTk+yU8cuUivm6GQay7oitpobndLw\nm6KUDgMYNh4nCSH7ACwHcAOAq4yX3QbgtwD+ypVVGnh9MrAGkk4HQ2hFJU9ZGMnORUlE8vS3B8ax\ntDNsy7CLlkcG9FJNoIVQjEKEjmurVCjShTIuW7cE//RHp89nffAjV5nhJYaovECmUIJC6sf+F4KF\ncEUkTw+MJm1pTPGgpW+KELIGwAUAngAwaBh9ABgBMFjnPTcTQnYQQnaMj487WKr3ST02LabVyUlW\nRCVPp9IFxMMB05tthaCAGHsqX8LSrrB5IraC2eErMnmabi3BpwUUoTF2NhTk6k0DWFmjCmn1kii2\nruyesy2gEiEDK9L5MqLBgC2FREIINJV47rEXShUcGEnivOVdnv5eRtNnPSEkBuAnAD5IKU1Yf0Yp\npQBq/sUppbdSSrdTSrf39/c7WmzQ4863RK4IhdRv2GiGcFBFTkDydCKVtxWGAcQkT1N5e+p9QDXG\nLrLccXg2i95osOmOWU0hKJQroAJGPQLNK1FaCShiLkaZQsnW9CSGqnh/QRpL5lCqUKxuclgMb5o6\nCgkhGnSjfjul9A5j8yghZMj4+RCAMXeWWMXrBolEtoh4WGtK+6MeomLs48l8y12njJCmem7Y0w4M\nux9CMYcn0ljXwpQtVl4oamQb01WPtXA3KmqgSbpgT9mRoSmK5/mX0YRevDBgoxiAB81UxRAA3wCw\nj1L6L5Yf3QngncbjdwL4Gf/lzcV7j71kq8TKSlhTkC2WPffMTs5ksbzb3gDdWEj1vHkmlSvZSo4B\n/tCKOTKRbimeWp2HK8awM4nhFT3NHyMBVUxeIJkrOgqH6uv29tgYmc0BAAYEVMQAzXnslwN4B4Cr\nCSHPGP+uB/BZAK8khBwEcK3x3FV0j9077zeRLaIz4kwAM6KpKFeopx5DuUIxMpvDMpuGPR7SkPRY\nedDuhBzAGmMXYyT3nkpgPJnH2r7WpYZF5AUSuSJuvG0HAGB1C12+AUVMJQ+7c7ZLQPXeY2dzBbwe\nYs1opirmEQD1YhHX8F3Owuh1tB6GYnJFc9ajXVipU65UtpXItMNoQo/vLW/BG7PitUBVuUKRypds\ne2UhVf+ORdSxp/MlXP+lhwEAl6zrbfp9IqdrHZusarC30lUdEBCrBvRGqqUNhpcshKZ4nzw9NJ7C\nip6IoxCSE9qm8xTQvRyv69idGnY2lSbnYcnjqRl9nJ/dUEw8rCFTKHt2Mkym86hQ+40cWkCcpMDw\nbNZ83Mpc3ICpE+79mkcTephge4ulpQFVTPI0kSsiHrJ/HqoCQkhT6YLt4gUetJVhF1HuaDc8wAgb\no+a8LHk86diwGzM5PYqzM+lY24ZdYPKUNSbd+o6LWnpfUKDUMEvsffmPL2jpfZpKhIwfTGRLjkKi\nmqJ4bthns0XH+TkntJlh93Y0VzpfaqlqoBamx+5hySMbwG03FMMM7LCRAHKbCaOZyq5hZ2ENETF2\npsnTaj6jKifr/ZrtdlQHFAWUelvJUyxXkC2WHcbYvQ/FzGbFDLFmtJdh9zAUQylF2uZkdCtsjqSX\nHvupmSy/52ZtAAAgAElEQVR6OjTb8T2W8Dkykea5rLowj93urSshxEisi+kXAIAeG7r3gJjJPolc\nEZpKWu7kDAhQ0WS5HkdVMQLKHaXH3gJeljvmihVUKBwnP1jy1EtZgZMzWdsVMUD7GXZAXI317pOz\n6AwHMNRivXLQnIcrpnwwHtZaV9EUoJTIqrOceOyax+WO+VIZs9miEFVHRnsZdg+9MhZfjjnoeAOs\noRgPDfu0/Rp2QO9GHOwM4fC4d4Y9GlRt17ED4oZA7B9J4pxlXS03sbEBEEI89qy9CiTVWHPZy8o0\nJuvhwPv1Oul7aiYHSoGVPWK6ToE2M+xeioBVpUKdeuz6V+ylYR92UMPOWNsXxZGJFKcVLcx4Ku9Y\n2jQoSC3x+FTGVtt4NawhJsZux1CaA008vBgxj91JKEZVvL2bOzHdevMXb9rKsHtZFZOyoaVRC69j\n7IVSBal8yfFtYEcwgN8fm8FzJ2Y5raw+E0nnhl0TMI9zMpXHRKqANTaaUIICK3mOT2VsGR3zLsPj\nXhLAeSjGy4QvK15Y0eKIR55Iw16HTIFpQDsMxRiG/Z49I56UD7KKB6eJm6s3DQAAvvv4UcdrasS4\nA8EyhoghEI+8MAEAuGxda8O3AWsdu7cXo3KF4thUBmuWtH4xEpE8TbDkqYNyx4CieCrbe3wqg4BC\nsFSQTgzQbobdQz1oXh47q5a4Z88oPn3nHsfragQz7E5Lrd5+6Wpcu3kAv3xu2PUTeZyLx+598vQ3\n+8fQ3aHhXBvSrAEBYQ1AP67tDjkXkTxlYmWOk6eehmL04gU7EtS8aC/DblTFeCGoZcqaOoyxW2Vc\nf39s2tFnNQMz7E6STYwbti1HKl/C/uGk48+qB6sg6HfosWselztWKhT37BnBa84dsnUCixrnVz2u\nW78TrYZivC13JASIO3CwvJYbPjFtL9TFk/Yy7KreIOGFx5DJ8wnFAMCbL1oBADg0njbFgdwiwSkU\nAwAbl8YBAIddTKI6bU5iaB5P95nKFJArVrDJ+I5aRdSQZbMowMmYOS899lwRsWDAkXR2wOOO2RPT\nWWnYW8FLedYUJ48dAD7/5q148CNXAQCePDLl+PMWgleMHQCGDOElNztQJxzKCTC8rophsqx2xakC\nAoazA5b5oXY8dgF5gWSu5PjuM6AQz9acK5YxlsxjhcBSR6DNDLuXk3LsTJhZiJU9HQiqCj52x3Oo\nuOjx8DTs8bCGeChglm+5AY/mJMB75U8mtDZk07BXq2K89djTDsp4ReQFdMleZ+dgQFU8q4phOk0r\ne6XH3jRM9tYLw54qlKCphJvUrqIQvPXilQDcjbXzNOwAsG1VNx4/7N5dxniKj8fudfJ0xFBIHOqy\ndwJXtWK89didhBg1QeWOThVWvTw2Ro07uUGBFTFAmxl2pm3hxdi2VK7kKBNfi/dfvQEA8PSxGa6f\na2U2W0RHUG169mYjLljZjcPjKddODOaxL7E5xo/hdfJ0eDYHTSVYYrNfoOr9tp/H7nXy1LHH7qG6\n44QhCue0GMApbWXYzaEVHjT78Dig5tMfD6E3GsSRSfda9aczhZZV+xZiRW8HKrQaeuDNTKaIWCiA\nUMBZktprSYGdR6exfiBuO6knqipmJmO/HFYTcDFK5Ox1yVoJeOixT6aYoyINe9N42cWpCyXxn34y\n2Bk2b9fcYCpd4Co+tMronmMzMnnD63v2sscBAPYNJ3DxmtYGVVgRpe44ndE9ym4bxtLUivFUUsC5\ng6V5qBUzmSpAIfa+X560lWGveuzeVMU4leytxdLOkBmfdQO3DPvxKXc8dl7fs6YSFD2SFCiWK0jm\nSo68MlY66HXydCZTRDwUMC8sreD1mimlelWMw5Co6uFIv8l0Ab3RkKPyTB60mWH3TlAr6UKMHdBv\n0aaNOJwbTKYKtuO+tRjsDCOoKnjRpfBRMud8mAngrUAc83pb1WC3Imrq02S6gO6oveNa87jcMVMo\no1yhzj12xbs69slUHn0O80U8aDPD3t4xdkAfO5dwcVD0ZDrvOBFpRVUItizrxNMuVfIwbXCneNmg\nxKYm9TrIZagKgUK814rZP5zAhgGnTVXefM9MAMx5jN27yU+T6QLX888uDQ07IeSbhJAxQshuy7a/\nJYScJIQ8Y/y73t1l6oQ9jrE7vQWsRTysIZUvuXKQZQol5IoV9Eb5Jm7OW96F/cNJV6QckvmSo3Zx\nRsjD5Klp2B3eGQVUxdOa8EqF4vBE2na3rKZ4W3vPpic5r2P3TrxsPJnHEs7nnx2a8di/BeC6Gtu/\nSCndZvy7i++yasNCMXmXY+yUUtdi7J0uDoqeNNrzeYZiAOCs/iiS+ZJZc84THgPDARaK8cbgTKd1\nT9KpYQ96PAAimdMdCru5Aa/LHXlMTwIs9fcue+yVCsXIbA5D3WJr2IEmDDul9CEA7vbBN4kZiim5\n67GnC2VUqHNPoRbsLoBpuvCElyc5n3X9MQDAoTH+cfYkh3I2QDfs5Qr15HZ7yoyxt08ZHlBdd6/N\ndXutFcM8dqcOllcXpIl0HoVyxdH0Ml44ibG/nxCyywjV2K/7aoGIR/NDU+YtIP9QTJdRPzzrgmGf\nTPNp9pnPWQOGYecsYFYoVZAvVbiEYrSAd7fbLPnttF/A6yHLUw7XXdWK8eZixHRtHBt2j6p5WLPd\ngMMuah7YNexfBbAOwDYAwwC+UO+FhJCbCSE7CCE7xsfHbf46Ha/KHdktII9qjfmw1nl2EPCkGorh\ne2ANdYYR0VTuM1Crt9p86tgBeJJATeaKiGjOu3uDHuuEjyf1Mlu7ujxeK1JW9ZqcNa+FPCq6mDWb\nv9ogeVoLSukopbRMKa0A+L8ALl7gtbdSSrdTSrf39/fbXScAvZJAU4nroZgEp6RNLVir8ViSfy27\nGYrh7LErCsG6/ih3jz3J8c5I87CTM1sso8OGOuJ8Ah4rUh6d1JvMVtmY0Qp4nzytDpR3dh6yv5Xb\nRRcznIbc8MCWYSeEDFmevhHA7nqv5U1YU12/8rIDyskA3Xr0x0MgxB0p3PFkHmFNsSXJ2oh1/THu\nhp1XORtQTax7UTGVK1bMu0cn6Drh3oViXpxMo6dDs13tpXk8Go/XFDNm2DMuh3DN6WWRNvDYCSHf\nB/AYgI2EkBOEkBsB/BMh5DlCyC4ArwDwIZfXaeKFYTdDMSH+V96wpmJlTwcOjvEfXnFyRh/JRQj/\nrrez+qM4OZPl+t3zKmcDqmqWbuQu5pMtls0LiRP0qhjvPPZdJ2ZxzrLWx/gxAqoChXijrgrooZhQ\nQHEc8opo+vHldm6O6fDwUlZ1QsMzilL6thqbv+HCWpoirCkexNjdC8UAwNaV3bh/3yj3ksqTM1nX\nMvJn9cdAKXBkIo3NQ51cPpNnjL3L8JK8MOy5QhkRLqEY4llYI1cs48BIEu99+TpHn8PGU3oBr/Oj\nGopxd5j8TLaAYEDhctF3ivgVtEg44J3H7pZhf+15S5EplHGYc2jjpIsjudb161PtX+B4p2FOoOcQ\nY2dxTZbAcpNssWxWaDlBr4rxxkjuOZVAqUJx/opuR5/jpTxyOl/iMujGs1BMpojuiObKHXOrtJ1h\njwRV1+OoKWOALo+xeLVY1asbySMT/KpMsoUyJtMFVz32jqCKJ45McvvMJEfDzm5/ZzwLxTg37Jrq\n3ci2XSf0GQBbHRr2kKcee5mLYWd/K7cN+0ym6IvEKdCGhr0vFjLnTbpFIldyPEB3Idb1R9HdoeF/\nnj7J7TOHZ3X1xWUuGfawpuKStb146gg/zRieZaXsM9LzOnrT+RJ3KYRsgY/H7qVw2fGpLKJB1faM\nVkbQQ489lS9y6XEwQzFuG/ZswReJU6ANDfvGpXEccnGiD+CeABgjrKm4/rwh7Dg6zW3+6bQRgnCi\nONiIc5Z14YXxFLdQWCJbQjSoQuVwAe2o4ZVNpPI451P34OsPH3H8+VZyRV4xdu8MeyJX5JLUCwa8\nDMWUHdewA9VpUV547F3SY7fHQDyEYpma3aFukMrzURxciG0ru5HMlfDQQWdNW4zZrP0BCs2yZVkn\nyhWKg6N84uy8lB0B3UgGA8qck/eoITX8s2f53RkB/GLs+nAQb0Ix+lDodjPsfGLsYU0BIUC24G7y\nNJHlc/HkQdsZdjMR4mKcnZdG+EJctFpXYXjXfz2FDIcDbsaDrrdzlunVMHuHZ7l8XjJXQmeE3/fc\nEVTnfJesV8Dp2L35ZAt8YuyhgIKCy812DH3EHIcO3zasiiGEIKKp7nvs2aLwyUmMtjPsEXZb5YI6\nIsPtUAygJyOvP28pAH1+plOqzRHuHVgrezoQCwWw51SCy+clOd8Zdcw7eVl4qsI5xp4rVriEYrxM\nRCayzicRAe1ZFQMYF30XncF8qYxMoSyTp3apFUvlTSrvzvSk+dxy3WYAwGjCuW4M89h5dHHWQ1EI\nNg/FsZeTYZ/NFrl293aEAnMSZExegGcJZLlCUShX+IRiAorrEtSMZJ6PiqZXs2UrFYp0ocytzyMS\nVF1NnjLHqssHOjFAOxr2kPuGPZkruqLFPh+m6TLJQeecGUkeiciF2DLUiX3DCS6VJtPpItdkb0dQ\nRdoSimGJSZ4lkCxxzKXz1HOPncNAE01F3gOPnf0deZ2HHVqAS8izHqYAmAzF2INluN3sIkvk+JwE\njYgGVYQCCiY5zECdyRQ8UZU7ayCGdKHMRZ1yJlNwLH1rZX4c1TTsmQK3kkfWQ8EteeqBkaxUKDfd\n+1hIRSrnfq8Ak+zlFYqJhlSzb8INmPMgk6c2YclT9ofnTb5URqFUcT3GDuhJnd5o0FRldMJM1pvm\niNVL9Oaqww6bq/KlMtKFMno4rjk6LxTDKk4qFNzmzLLP55E89arCJF0ocRscEw9prhpIRiqvG0oe\n5Y4AMNQdcUV4j1EtXpCG3RbsVmcm49wY1sLNIRu16AxrZqOOXQ6Np/DooUlPPPYthk7M08dmHH3O\njAt195E6oRiAn/49+/wODl3JwYCCUoVy62WoB0/phng44Ilh513ltaIngpPTWde+az8pOwJtaNh7\no0EQAoyn3DHsvMZxNUtnJIBE1tmJcs0XHkSh5M1Irv54CGcPxvDooQlHn+N0mk8tOjS1ZvIU4GfY\n2d+Kxy03K8N0O86e5CiPHA9ryBbLrjdWmRd+Th7w0s4wCuWKayJxzNGUDUo2CagKejuCmHBhsDLg\nvrLjfDrDGp4fTXLp5vTqNvCqjQN4+OAEPvHT52x/xnSGv2GPhgI1Y+wA8PxoksvvSHCMpQYDxnB2\nl8Mx7GLEy2MH4GqDIFA9Pnh5wGwOMI98Vi1ms0UoBFwkEHjQdoYd0PVi3BgtB+hlYYB3oZhCuYLJ\ndAGfvXu/7c9gBuLtl67mtawFefflawAAtz9xzPZnTKdZKIbf9xyZ16BUKFP0xUJY1x/FAwfGuPwO\n5vHxavYB9HyDmyQ4rpnN02Xzdd3C1Dbn5KwwB2LapRDuTEbvOnVLX6pV2tOwxxePx375+j4AwG/2\nj2HjJ+/GA/tbM0DJXBGFUgUfe80mz6ajD3VFcOEqXSXQbq6DnWC9PD32oIpimaJQquDgaBKJXBFB\nleDcZV3c5IbZ1CceHjurvEq4rEiZyPFzVpZ26iJibiYiAX10ZCigcKtOYx47j0KFWsz4SE4AaFPD\n3h8LLRrD/mcvPwsv29CHY1MZ5EsVvPtbT5knYjOMJvQTzKlqX6vcfKU+sOHEdNbW+6eNE4xnwpfl\nRXYcncIrv/gQfrlrGFpAwfqBGE5MZ7nUMTOPnYeRZEPHJ13KFzFMj53DMT3UpTsPbhv24dkchrrC\n3LTN3Tbss9KwO4eFYnjLsQIwa3S9CsUAVS+I8cMnjzf93pFZ/QI32OmtYe+P60bJ7gV2OqM3gbFw\nBA9YcvDz9xwwtwUUgvUDMQDA4XHn+veJbAnxEJ9GMLeNDSPBsdJroFP/u4+6bNhHEzmux7Tb33WO\nk0Y/L9rSsC/rjiBXrLjyR/K6KgY4veQv3YJnyWKdfbEQ1zU1gv2+CZve5nSmwD3ZyzwmaynmVLqA\nswfjAID9I84TqLNZPo0+gDVe7a5hT+aKiGgql4toWFPRGw1iOOHyTIRsievxEdZUdARV1wx7Xhp2\n56zs7QAAHLcZBliIpDFAl6cn2QhmkC5e04veaNAMrzSDOYWIo0piMzDDbjeJPZ0pmF4UL2oJc01n\niljbF0VYU7ho3CRyRW5hOlal4nZdeCLLV0VzaWfYdY89xVEAjNHTwacZsBb5UgUhD21GI/yzkhZY\nZRj2Hzx5DP941z6uNbW6sqO3sTLmmRACLG+xQy5lqFzGQ96uuSOoIqgqtuuCp9P8JRCClmn21tmv\nqkKwujeK49MZx7+Dp8ce1hSoCnHcoNaIRK7IpdSRMdQVdj3Gni6UuI+mHOgMteQ0tYIMxXCAnbQ/\neOo4/vOhw9g/zKdGGdBvW73QibHCkmi5UgVLu8IYmc2hVK40lUNI5UpQFeL5ZHRCCDojAfuGPVNE\nL+dQzEWre8x8BeuQZd71UHfYHB/ohHS+xK1WmRCCeDhgXpzdguddBgAMdoUx4nIohqdkL2NZl3uy\nAm3nsRNCvkkIGSOE7LZs6yWE3EsIOWj83+PuMucy/w/eShVJI7wYsjEfNsCiVK5gqCuMF8ZSWP+J\nu7H2Y3c1lJxlwwhETEbvjGhzvvv/3nG86bJCNzx2QghuetlaAHoy+T2Xr8X3broUgO5l8piVm+U0\nFo/hRYu+Horh6LF3hjGVLnAbkTifQqmCYpkixkknhjHUFcapmawrRRe5Yhkhj52rhWhmJd8CcN28\nbbcAuJ9SugHA/cZzT/nwK89Gn5F84lkHrGuxe2vYV/RE8NHrNuLf3noBLlrdg5JFz+KvfrJrQY8u\nmeMzZcYOXRHN/O6PT2Xw0R/vwp/fvrPh+4rlCpL5EvcYOwCzWoUQ4G/+YAvOW9EFQL8rms4UHWuF\nZAtlU4iOB7qolruhmCTnUAwrrR3jMEegFmwgOW+Pfag7gnypYg5g4Um+VEGY86QuJzQ07JTShwBM\nzdt8A4DbjMe3AXgD53U15P3XbMD/vO9yALw99qLn8WpCCP78qvVYPxDDa84dMrfHwwH8as8I3vud\nHXXfq89nFWPYuyOaWYP97Am9EqUZ77MqJ8D/e2ZNWmv7onO290aDKFeo42MlU+Az75QRCwe4KU/W\nI8F5BCEz7DxCW7VIuiTEt8zFdedLlbbz2GsxSCkdNh6PABis90JCyM2EkB2EkB3j43wGNzNYNQlP\nYR8RoRgrwYCC22+6BJ+4fjN+cLMeRvjdC5N1Ozx5zYW0w6reDhyfyoBSiuNT+skSUBuHhNycz/rK\nLYP4zo0X452XrZmznd0dvPZLj+BNX33U9udnC2VzPCMPOsMBV3VXKKVIZPknTwG4FmefdUnbfMi4\n6A/P8F13sVxBuULby2NvBNUDVnXvbymlt1JKt1NKt/f39zv9dXOIBgNQCByrI1pJeTDvtBGXr+/D\nn165Ducs68J3b7wEALDrRO0B0imBF6LVS6JI5ksYS+bNipNmxtCxkjM3QjGEELxsQ/9pmh2sV+Dk\nTNb2jNlSuYJCucI3FBPWTH0iN8gWyyhVKFfvlzUO8chZ1ILdVfEuYpjvsVcqFDd/ewe+8puD+OnT\nJ2yH6ZiIm588drvf3CghZIhSOkwIGQLAR2GpRRSFIB7WuIViKhWKVMH7cseF2LaqG9Ggirt3D+PK\ns0+/MCZzJbOu32tesqYXAHD740dxfEo37IlcSQ9nLfAdsrsPL4cSzNekoZS2nHDmOT2JEQu5mzw1\nlR05hmLiYQ2xUMB9j53z8dEXC0FTCU4ZF6RD4yn8eu8ofr13FACgEIIbti1v+XOr4xLb32O/E8A7\njcfvBPAzPstpHWsCzympQgmU+kd6E9BP/IvX9tYdbJEUkOxlnLu8E9edsxT//ttDeO5k9Y6iUUkZ\nS1654bHXg82XZSRtlBgyrXc3qmLcqNQALFrsvOPV3WEz/MabqrYN3zUrCsFgZxhf/e0hfOKnz53W\n8Ttts3nJ9NjbrNzx+wAeA7CREHKCEHIjgM8CeCUh5CCAa43nQnBSSz0frwXAmmXrym4cGE3ixRrj\n6FICq2IIIXj35WtQrlDMZIq4eK3uwZ+cWfiEd2PIRiPme+x2KjqYx847FFOuUOSK7miyJzgO2bBy\n9mAc+0ecd/LWwq0YOwCUjXDL7U8cO02j3+7Q87b02Cmlb6OUDlFKNUrpCkrpNyilk5TSayilGyil\n11JK51fNeEZnWOM2hd7rsXjN8ubtK0GpLu1rpVSuIFssI+ZxFY+VrSu7zceXGob9VAPDPpMpIKKp\nnp4I873ssWTrYQQ2xIOvYdcvym6VPFaHbPC9+G8e6sSJ6SzXijRGIleEqhCu3zOjWK7eGf3Nz/YA\nAL53k57Hspuryxfb0GP3O+v6o3h+JIkSB1mBpKns6C+PfXl3BENdYew6MTccwwZ6i6ziCWsq3rJ9\nJQIKwbVbBkFIY+W/qXTRlVLHRtx85TqsWaLnI+xo3GQ4DrJmsGPNrZJHnlrsVjYPGcJqHLu+GUwC\n142mu6+9/UJsNEThGBes6kFfLISczYEn7H2hdvLY/c75y7uRLpRxikMJk6ns6DPDDgDrB2I4NE92\n1pz2JDgn8Lk/Oh/P//1rcP6Kbn1sYYNY5UymwHWIdbN8/PrN+Omf670PdjTQs6bHzjMR6bbHzm96\nkpX1/bpxfHHSuRTyfBLZkmuyHtvX9OKW12yasy0SVBEJKsgV7Bl26bG7AJM+nT/y6uRMFsOzWfxq\n9wg+/fM9TSWnWELNa62YZjirP4bD46k5+8E6Uv1wIWLlhX2xECYaeMNTmYKn8XUrMdOQ2kieuhRj\nB+CaXgy7E+CdiBzqDkNVyGl3kTxI5PgJrdWCacpbiWiq+fdtFdNj91Edu3iL4JCeOgL67/rmkzho\n0S153fnLcNHqhSVtkgKGbDTLWf1RpAtljCbyZudfSoB2fCP64kGMNTDsM5kiVvSIKdHUVAURTbXl\nIbMJTLyrYgD3pHsTuSKCAYV7PkNTFZy3vAu/2DWMv7vhXK5hk7TLTXdsSIyVsAPDzjx2r4X4FsI/\nK7EJq3aYb9gPzhOjuvu5YTRCxJCNZlnXz6YAVfcr6SOPnbG+P4aDo8kFmz2m0gUhMXZGZ8Re7bhZ\n7si5jh1wN3nK21tnvGHbMsxkitwHy6fzZa7hrvn0x0J4rzHakRHWVNuiZnkfeuxtb9jZbdUXfn2g\n7mvCmoLHDk82/CwmgetGNt4pZxmG/ZDFsJtVPD66EJ2zvAvpQhmHa5RmAnolTyJXFBaKAWC7qc2d\nqhh3h23oYQ13jg/mbByp87e2S7pQQpSzsqMVQgg+dv1mfPfGS/DjP7sMAAvF2CvAkB67C7Ar+6nZ\nnCmiX57nLX7gmrOx51SiZh24lWSuKEwCtxGDnSHEwwHssUwB8lOMnXHecl1NcffJ2hIIs9kiKHVH\nAKxZejo0e8nTIv8GparH7pJhzy7cBewEJi3QKPTWKul8mbuyYy2u2NCH7Ub3dERTkbU57Fx67C5x\nxfo+AMCDB8aRyBVP60S9etMAAOD3xxbWCBEpgdsIQgguW7cEDx+cMBOofoyxbxiIIRRQ5nSiWmFd\npyKqYhjrB+J4fizZcrdntlCGQuZOanKKqhBXZQUSOfcqTAaMWDVvw54plBD1+K45GgqY5cOtkpMe\nuzt88S3bAAAf/ckuvOErvzMblm68Yi0e/MhVWD8QQ1hTcP/+hSVtRLbnN8OVZ/fj5EwW9+wZAVCN\nsfMeIeaEgKpgy7JOPHu8drVEVbJXnGHfMBDDTKbY8vzLTEGP/fK+o9MNuzsx9qSLFSbdHRqCqmKr\n2aselQo1v2cv6enQTqusaxbpsbtEXyxoxpkPT6QxldY9iCs29GH1kihUhWD9QAy/3DWMiVR974L3\nQALevOUlKwEAjx/WG32ZnMB8JUPRbF/dg10nZnFgJImP/OhZ3PrQITxjGPqjk7pYGJN+FcFyY7Ti\no4fqyyHXgvf0JEZXhF/39HzcTJ4SQtAfD2Gc48CNjBHu8voutLtDQ6ZQNo10K+SKFSgE0JqQrPaK\nRWHYCSFzbu3//YFDAPRBEIw/uXQNACw4qT7pA8nehdBUBRsH46YWSypf9FUYhvGSNb0olCt49b8+\nhB/tPIHP3LUff/nDZ1CpUDxxeBIdQdVMvImADeN4//efxmu/9EjT78sWSq4k1vvjIe6VJQw3k6eA\n3mx2x9Mnuek1ZYy70A4Xk6e16DLuIO3sR75URiig+io3tygMO6DfXjMeeWECwNzb/Vdu0WeBfOTH\nz9bVDE/lxQ7ZaIblPRHcu3cUI7M5IWP8moHJ+QJ6/qMzHMDhiTRu+vYO/GjnCfTHQ+YIOxFY5YIb\nCZZZ4T09iTHgkmHPl8oolCquVk2ljUqh+wzpW6ekBIUXWTJ/xsbYvFyx4qv4OrCIDPtHrtuID167\nAZuWxlEwZDStUq3Mox9N5PGe254yy932jyTMEkK/e+xANXH3D3ftEz7tqR490SAuXtuLswdj+Na7\nX4IHP/IKAFURs3dculrk8mzf5aRd8tgHOsMYS+a46B1ZyRjJQDcrTO790JUAgBfGmxti3gg3Skqb\noTui2wc7hp157H5i0Rj2TUs78cFrzzY7GiOaepqn8tev2wIA2Hl0Guf/7a/x97/Yi+v+9WFc84UH\n8fxokvsIMTf4K0PnolSuCB2L14jbb7oE93zwSgRURTf0hhf/hTdvxU0vW9fg3e5i19DNZt2pv98w\nEEOxTPHtx45y/dy0Ub7nppHcMBjH8u5IQ+G3ZmGDrEXE2IHTpUmaIVf017xTYBEZdsbSLr0Ea6Az\ndFrM6z2Xr8HuT7/afP71R46Yjz/4g2dQqlBPhz/YYW1fFJevX4Lh2ZwvxvjVQ1OVOd//l//4Anzt\n7RfijRe0PqGGN5rNcsWZTJH7VB8Apo79v91/kOvnVgeDuHuMLO0Kc5umZHrsggx7M6Md55MvlX01\n7yf7PA8AABLSSURBVBRYhIZ9qEtPjNXyrAjRa4bv+t8vm7P9krW92DucqPs+vzHUFcHwbNbXHvt8\nBjvDuO7cId9V8ABoupV8NlM0b9l5srK3A5987WbMZlsvwVwIZiTdrglf1dvRsPmvWaoxdm8NJTvv\nG03/qoX02D1gqdENt5D92LKsE9/700vM56yBCTh9hJofWdYVxlgyj+lMQeiQjcVCM81BxXIFyXzJ\ntTmta/uiAPjK4KZdEC2rxYbBGE7N5rgM3WBCa150nlqJhgLYuqILv32+9fHN0mP3gCvP7kdYU/D2\nBgm6DQNVsf0tyzrNx/NHqPmRJbEQKNU9BT8mT9uNZpqDWDezW4Z9SUwPIdqdu1kLN/Tja8HKR3lU\n9rDuTxFNd5uHOm3Ncc2XpMfuOv3xEPb9n+vwhxeuWPB1fbEgPnTt2fj5X1wxR0LW7zF2YO4sSD8J\ngLUT//zmrebjZmqXZ1ycwwlUy+3+63cvchts7VUopqeOwqod0oLq2AE9xDmRyrfcpJQrVmRVjBc0\n0yhACMEHrt2A81Z0zemCFKlh0izWBJ702O3xRxetwM//4goAzXmarAyu26U7Oha7f+SFCew6UVtn\np1Xc0I+vRW+dmQh2SBfKCAYU2wluJyzr1u3ASItx9nypLD12P2IdQuB10sYOVq+xXZKnfoQNLDkw\n0nhu52xWN1rdLnns1uqm49MZLp+Z8SgUw6aYHZt0vm4RAmAMFlJqdcxmvlhZXDF2QsiLhJDnCCHP\nEEJ28FqUCP76dVvwuvOHfNUWXI85hl167LZZYniazZQZsgSrW+WlikLwydduBgBbcd5aeNXss7Qz\njA0DMVuJx/mk8iXPBcAYQ6Zhb+37X6we+ysopdsopds5fJYwbrxiLb7yxxeKXkZTdMsYOxcUheCN\nFyxHqUIbKhR6kYi86WXrENFUU8TOKUxm2O0hy4ToInuthjBqkcmXhd2FspDs8Gxrhj232Dx2iRg6\npcfOjdeeNwSgcVyVDdlwWxOkNxrEVLp2Mnc0kcO1//Igfrmr8ZhHgEkgeDM4ZrAzzEWXPV0oCUmc\nAnpIdkk0iINjKVOWpBGUUmSL5UWnFUMB3EcI2UkIuZnHgiSNsSaWZIzdGSwR3agypmrYXa4wiWp1\nPfZdJ2bxwlgKH/7RM019VrbgjsxwLQY7w0jmSmaDkV3S+ZLQ+QLLuiP42TOncPYn78ZNtz2F//Pz\nvQu+PpkvoezDjnWnhv0KSuk2AK8B8D5CyJXzX0AIuZkQsoMQsmN8fNzhr5PMJy4blBzBtIE+96v9\nC1bH5AplEA/CGv2xUN3ux5NGUjVXrDSV8M0Uyp4lItf26SXDR8adNVhlCmVX5502wlohd9++MXzz\nd0dqNl7dt3cUb/j33+GEkQ9xq1rKLo6OUkrpSeP/MQA/BXBxjdfcSindTind3t/f7+TXSWog8iRY\nDLBE9O6TCfzsmZN1X5ct6pK9boc1Llrdg/0jSfxk54nTfjZs0WM5MNqMYS+5rhPDqDVs3Q7pgliP\nnTWKWTk0lsJdzw3PkZ74l3ufxzPHZ/DfO44DAHqj/nKwbBt2QkiUEBJnjwG8CsBuXguTLMyX3nYB\nrj9vKQIC6n0XE9ZO0oWU/Zhhd5u3vGQVBjtD+PCPnsX6j981p1lpJl00k+XHpxqXFuoj5ry58K9a\n0gGFAIedGvZ8WViMHajOcbXytQcP4c9v/z2+/diLSOdLuOrzD5jaUo8fngQALIme/j6ROLEKgwAe\nIYQ8C+BJAL+klP6Kz7IkjXj91mX4j/91kehltD1hTcW33v0SAKibtASAbKHienwd0Dun7/vLlwMA\nShWKE9PVCo3pTAHLuiOIhQILjnhkeGnYQwEVq3o7cMhhKEZ0jP29L1+Hd1++Bt+98RL86oO6WOA9\ne/QhIuPJPO589hRetNTr7zdCYusHxE0Eq4Xtb5BSehjA1oYvlEh8zlUbB3D2YGxBnZacS/NOaxEP\na7jjz1+KP/yPR7F3OIGVvXr8eiZTRHeHhkSuiFQTwmWZQgmDnd55kuv6Y45CMaVyBflSxXMBMCsd\nwQA+9QfnAADKFQqFABXjpunYVAbPj+r797+vXo8LVvXgS785iGXdEaFrroW/ViORCGKwM7xg/bJX\noRjG5qWdUAiw51QCrz5nKQBgJlvAmiVRxEKBphQpdY/du1P8rP4oHnlhAuUKtTX6kA2y9np6Uj1U\nhaA3GsRESr/gP/j8OHLFCt5/9Xr85as2AgBeYVGG9RMyQCuRQJfNPTKRrivAlXVp3mk9IkEVQ10R\nnLDIC6TzZcTCAcTDgabKCr0sdwR0j71QqrTcuclgAmB+8n6ZUe8MB5Ar6rXtr9qyVOSSmkIadokE\numFP5EqYrBOOyRbLCHvsSXZFNCSyRQzPZlEoVZAt6jHzWFhDsgnD7mW5IwCsMzTl7YZj0h7MaG2V\n//9VZ+PazYO48y+uwNmDMXzo2rNx3oou0ctqiH++QYlEIGzQxZGJNPpqlLzlimVP49WAbtiPT2Vx\n2T/+Bu+8bLVevmjM8j3RQCisUtE7Ir0qdwR0jx0ADo+ncdXG1t9vDtnwSSgGAP7i6g3m419/6OUC\nV9Ia0mOXSABsXKoPXnn80GTNn3sdYwf0UkxWr/7ooUnkihVEgkYopkGMPSsgXt0XC6IzHMDhCXse\nOwsviRIBW0xIwy6RQB+ysGlpHE8fn6n5c6/j1UC1KxYAlvfoyoMRTUUs1DjG7tWQDSuEEL0yZsxe\nyWPGCMVImQznSMMukRgMdobr1ofrQk/eGnZrrJmN5usIqoiHNWQKZZTK9YWqqkM2vDWS6/qjtj12\nNqNVZIPSYkEadonEoC8WwkQNvRhKqedVMQDwZ1etwx9sXYYtQ52mfkwkqJqKnizZWKlQU1aY4ZUW\n+3zO6o9hNJG3JeErct7pYkMadonEoC8WxESNqphCuYJShXperTEQD+PLb7sAa/o6TMPeEVRNWYFk\nXvfi//jrj+O6f3tozntFGXbWgfmebz3V8nvN5Kn02B0jDbtEYtAZ0VAoVU4bZpzJex+vttIVCVoe\na6YeP5vD+vjhKRydzODL9x806/CZkfQ6EXnVxn6sXtKBvcMJjCYW9tpPzWTnCGsxj10mT50jDbtE\nYsDG3s3v6jSrNQQl9XosQmVdEQ19xozRiVQeRUuc/Qv3Po/f7B/DT3aeMHMFXS7NaK1HKKDim+/S\ntXd+tXuk5muyhTLu3TuKl372N/i0Re88XSghrCm2ulYlc5GXRonEgFVjJHOlObXsLKwhqlqje55h\nZ82xE6nCaQNCPvk/uzE8m0O/oVIoYgDEWf0xdEU0PHxwAu+4dDWUeYb6X+97Hv/50GEAwPefPAZK\nKT77pvMxkcojJucLcEF67BKJQdwoL9x7KoH3fe/35oCFan21mFBM97xQTJ9htCdSeTMcc/15eps7\ni8WzoSFWb99LggEF9+0brTkofP4gkR88dRz5UhkPPT+By85a4tUSFzXSsEskBiwU87UHD+GXu4bx\njYePAKjGq/3gsXeGNUSDKsKagolkHrNZPdn7lpeswjLL9B/9tQFhev1M1/xWwzO3kjQumG/Ytszc\n9vNnhzGRyuPitb3eLHCRIw27RGLADDdL+t29exiUUuFJPevYNUUhIITopZkWj707ouHlGwfQ3aHh\no9fp/fzbVvUIWS8AfO3t+qyAbLGMqXmVRpPpAl5+dj8+/fpz8d4r1wEAvvrbFwAAW9tAh6UdkDF2\nicSAdXqOGWGM50dT+MFTxxE0vF5RZXi1wim6YS9UDXuHhs+88Vz8/RvOhUJ0Qa5zlokzkit7O/C1\nt1+EP/vuTpyayc6J9c9kiljXF0VXh4aPXb8Zjx2exK4TswiqCjYt7RS25sWE9NglEgMWigGArSu7\nsWlpHD/9/UlLfbUYP4glct99+Rpz21BXGKdmspjJMsMeBCEEquHRX3fukDmgQxTLu3UZBCbj+/xo\nErtPziKVL5n5DKCqCrl5KI6gy8PCzxSkxy6RGMQshr1DU7F1RRd+svMErtqkD2EX1RHZEw3i4Y++\nwjSUgK5Gee/eUUyk8lAIzKYlP7GsW4/53/rQYbzqnKV41Rf1Jqqgqsy5SK5eohv2qzb6c2hFO+K/\no0EiEYSmKghrCnLFCjqCKs5Z1olvP1bG3lMJKAQIa+K8yfne99q+KEoViqeOTGEgHj6tpNAPsPDL\njqPTc4ZcF8qVOXdH77hsNVb2duD1W5ed9hkSe8j7HonEAouzR4IqtgzpMeqdR6cRDQZAiH+M57p+\n3cvdcXTa9Iz9hvX7euzwXDlka4VRXyyEP7pohQzDcER+kxKJBRbP7giqplTu8GxujofpB9b2xczH\nK3rExtIXYucnr0VQVfDkkak52/00JWkx4siwE0KuI4QcIIS8QAi5hdeiJBJRsI7NjmAA3ZZ2fNYU\n5Bd6o0HTw2XCW35kSSyES9b14r69owD0XICmErxkjbhSzDMB25dNQogK4N8BvBLACQBPEULupJTu\nXfidEol/YSGCno7gnLh1o4lFImB67GcPxgWvZGG2rujGwwcnAAD//r8uxNYV3egS1BF7puDEY78Y\nwAuU0sOU0gKAHwC4gc+yJBIxnGXErtf06eGNm40GGj9WbFy9aRAAcNFqf3u/F6zqNh8v7QpLo+4B\nTgJdywEctzw/AeASZ8uRSMTyvqvXY3lPBK87X6/Q+Pj1m3HTFWvn1F37hX996zY8P5o0w0d+ZdvK\nqmFf3+/fsNFiwvUMBiHkZgA3A8CqVavc/nUSiSNCARVvecnc43Sg059VJ7FQABcKlA1oliWxEP76\ndVuweSjuy7LMxYgTw34SwErL8xXGtjlQSm8FcCsAbN++nTr4fRKJpE258Yq1opdwRuEkxv4UgA2E\nkLWEkCCAtwK4k8+yJBKJRGIX2x47pbRECPkLAPcAUAF8k1K6h9vKJBKJRGILRzF2SuldAO7itBaJ\nRCKRcEB2nkokEskiQxp2iUQiWWRIwy6RSCSLDGnYJRKJZJEhDbtEIpEsMgil3vUMEULGARy1+fY+\nABMcl9NOnKn7fqbuN3Dm7vuZut/Awvu+mlLa3+wHeWrYnUAI2UEp3S56HSI4U/f9TN1v4Mzd9zN1\nvwG++y5DMRKJRLLIkIZdIpFIFhntZNhvFb0AgZyp+36m7jdw5u77mbrfAMd9b5sYu0QikUiao508\ndolEIpE0QVsY9sU8NJsQspIQ8gAhZC8hZA8h5APG9l5CyL2EkIPG/z2W93zM+C4OEEJeLW71ziGE\nqISQpwkhvzCenyn73U0I+TEhZD8hZB8h5LIzYd8JIR8yjvPdhJDvE0LCi3W/CSHfJISMEUJ2W7a1\nvK+EkIsIIc8ZP/sSIaTxtBJKqa//QZcEPgRgHYAggGcBbBG9Lo77NwTgQuNxHMDzALYA+CcAtxjb\nbwHwOePxFuM7CAFYa3w3quj9cLD/fwngewB+YTw/U/b7NgA3GY+DALoX+75DH6d5BEDEeP7fAN61\nWPcbwJUALgSw27Kt5X0F8CSASwEQAHcDeE2j390OHvuiHppNKR2mlP7eeJwEsA/6CXAD9JMfxv9v\nMB7fAOAHlNI8pfQIgBegf0dtByFkBYDXAvi6ZfOZsN9d0E/6bwAApbRAKZ3BGbDv0KXCI4SQAIAO\nAKewSPebUvoQgKl5m1vaV0LIEIBOSunjVLfy37a8py7tYNhrDc1eLmgtrkIIWQPgAgBPABiklA4b\nPxoBMGg8Xkzfx78C+CiAimXbmbDfawGMA/gvIwz1dUJIFIt83ymlJwH8M4BjAIYBzFJKf41Fvt/z\naHVflxuP529fkHYw7GcEhJAYgJ8A+CClNGH9mXGlXlTlS4SQ1wEYo5TurPeaxbjfBgHot+hfpZRe\nACAN/bbcZDHuuxFPvgH6hW0ZgCgh5O3W1yzG/a6Hm/vaDoa9qaHZ7QwhRINu1G+nlN5hbB41bsNg\n/D9mbF8s38flAF5PCHkRenjtakLId7H49xvQva4TlNInjOc/hm7oF/u+XwvgCKV0nFJaBHAHgJdi\n8e+3lVb39aTxeP72BWkHw76oh2YbGe5vANhHKf0Xy4/uBPBO4/E7AfzMsv2thJAQIWQtgA3Qkytt\nBaX0Y5TSFZTSNdD/pr+hlL4di3y/AYBSOgLgOCFko7HpGgB7sfj3/RiASwkhHcZxfw30nNJi328r\nLe2rEbZJEEIuNb6zP7G8pz6iM8dNZpevh14tcgjAJ0Svh/O+XQH9dmwXgGeMf9cDWALgfgAHAdwH\noNfynk8Y38UBNJEh9/s/AFehWhVzRuw3gG0Adhh/9/8B0HMm7DuATwPYD2A3gO9ArwJZlPsN4PvQ\ncwlF6HdpN9rZVwDbje/rEICvwGgsXeif7DyVSCSSRUY7hGIkEolE0gLSsEskEskiQxp2iUQiWWRI\nwy6RSCSLDGnYJRKJZJEhDbtEIpEsMqRhl0gkkkWGNOwSiUSyyPh/PZdJgCq437gAAAAASUVORK5C\nYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f032a953208>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.plot(dataframe)\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"\n",
"look_back = 36 # 6 hs previous\n",
"T = 18 #T=18 means 3 hs later, T=36 means 6 hs later\n",
"features = 1 # how many sensors or columns in dataframe"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"dataset = dataframe.values\n",
"dataset = dataset.astype('float32')\n",
"# normalize the dataset\n",
"scaler = MinMaxScaler(feature_range=(0, 1))\n",
"dataset = scaler.fit_transform(dataset)\n",
"# split into train and test sets\n",
"train_size = int(len(dataset) * 0.67)\n",
"test_size = len(dataset) - train_size\n",
"train, test = dataset[0:train_size,:], dataset[train_size:len(dataset),:]\n",
"# reshape into X=t and Y=t+1\n",
"trainX, trainY = create_dataset(train, look_back, T)\n",
"testX, testY = create_dataset(test, look_back, T)"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(599, 36)\n",
"36\n",
"(599, 18)\n"
]
}
],
"source": [
"print(trainX.shape)\n",
"print(len(trainX[0,]))\n",
"#print(trainX.shape[1])\n",
"print(trainY.shape)\n",
"#print(len(trainY[0,]))\n",
"#print(trainX.shape[0])"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(599, 36, 1)\n",
"(599, 18)\n"
]
}
],
"source": [
"# reshape input to be [samples, time steps, features]\n",
"# is it ok this? how should be trainX & testX reshape?\n",
"trainX = numpy.reshape(trainX, (trainX.shape[0], trainX.shape[1],features))\n",
"#trainX = numpy.reshape(trainX, (trainX.shape[0], 1, trainX.shape[1]))\n",
"testX = numpy.reshape(testX, (testX.shape[0], testX.shape[1],features))\n",
"print(trainX.shape)\n",
"print(trainY.shape)"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/ana/anaconda3/lib/python3.6/site-packages/ipykernel_launcher.py:12: UserWarning: Update your `Dense` call to the Keras 2 API: `Dense(input_dim=36, units=18)`\n",
" if sys.path[0] == '':\n"
]
}
],
"source": [
"# create and fit the LSTM network\n",
"model = Sequential()\n",
"#shape (batch_size, timesteps, input_dim), how?\n",
"model.add(LSTM(64,return_sequences=True,input_shape=(None,features)))\n",
"model.add(LSTM(64, return_sequences=False))\n",
"\n",
"model.add(Dropout(.2)) \n",
"\n",
"#model.add(Flatten())\n",
"# Dense(16, input_shape=(5,3))\n",
"# would result in a Dense network with 3 inputs and 16 outputs which would be applied independently for each of 5 steps\n",
"model.add(Dense(input_dim=36, output_dim=T))\n",
"\n",
"model.add(Activation('linear'))\n",
"#model.compile(loss='mean_squared_error', optimizer='adam')\n",
"\n",
"model.compile(loss='mean_squared_error', optimizer='rmsprop') #'rmsprop'\n"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"image/svg+xml": [
"<svg height=\"476pt\" viewBox=\"0.00 0.00 324.00 476.00\" width=\"324pt\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
"<g class=\"graph\" id=\"graph0\" transform=\"scale(1 1) rotate(0) translate(4 472)\">\n",
"<title>G</title>\n",
"<polygon fill=\"white\" points=\"-4,4 -4,-472 320,-472 320,4 -4,4\" stroke=\"none\"/>\n",
"<!-- 139651507565792 -->\n",
"<g class=\"node\" id=\"node1\"><title>139651507565792</title>\n",
"<polygon fill=\"none\" points=\"-0.5,-421 -0.5,-467 316.5,-467 316.5,-421 -0.5,-421\" stroke=\"black\"/>\n",
"<text font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"77.5\" y=\"-440.3\">lstm_3_input: InputLayer</text>\n",
"<polyline fill=\"none\" points=\"155.5,-421 155.5,-467 \" stroke=\"black\"/>\n",
"<text font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"183\" y=\"-451.8\">input:</text>\n",
"<polyline fill=\"none\" points=\"155.5,-444 210.5,-444 \" stroke=\"black\"/>\n",
"<text font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"183\" y=\"-428.8\">output:</text>\n",
"<polyline fill=\"none\" points=\"210.5,-421 210.5,-467 \" stroke=\"black\"/>\n",
"<text font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"263.5\" y=\"-451.8\">(None, None, 1)</text>\n",
"<polyline fill=\"none\" points=\"210.5,-444 316.5,-444 \" stroke=\"black\"/>\n",
"<text font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"263.5\" y=\"-428.8\">(None, None, 1)</text>\n",
"</g>\n",
"<!-- 139651507756784 -->\n",
"<g class=\"node\" id=\"node2\"><title>139651507756784</title>\n",
"<polygon fill=\"none\" points=\"25,-337 25,-383 291,-383 291,-337 25,-337\" stroke=\"black\"/>\n",
"<text font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"74\" y=\"-356.3\">lstm_3: LSTM</text>\n",
"<polyline fill=\"none\" points=\"123,-337 123,-383 \" stroke=\"black\"/>\n",
"<text font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"150.5\" y=\"-367.8\">input:</text>\n",
"<polyline fill=\"none\" points=\"123,-360 178,-360 \" stroke=\"black\"/>\n",
"<text font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"150.5\" y=\"-344.8\">output:</text>\n",
"<polyline fill=\"none\" points=\"178,-337 178,-383 \" stroke=\"black\"/>\n",
"<text font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"234.5\" y=\"-367.8\">(None, None, 1)</text>\n",
"<polyline fill=\"none\" points=\"178,-360 291,-360 \" stroke=\"black\"/>\n",
"<text font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"234.5\" y=\"-344.8\">(None, None, 64)</text>\n",
"</g>\n",
"<!-- 139651507565792&#45;&gt;139651507756784 -->\n",
"<g class=\"edge\" id=\"edge1\"><title>139651507565792-&gt;139651507756784</title>\n",
"<path d=\"M158,-420.593C158,-412.118 158,-402.297 158,-393.104\" fill=\"none\" stroke=\"black\"/>\n",
"<polygon fill=\"black\" points=\"161.5,-393.096 158,-383.096 154.5,-393.096 161.5,-393.096\" stroke=\"black\"/>\n",
"</g>\n",
"<!-- 139651507753536 -->\n",
"<g class=\"node\" id=\"node3\"><title>139651507753536</title>\n",
"<polygon fill=\"none\" points=\"25,-253 25,-299 291,-299 291,-253 25,-253\" stroke=\"black\"/>\n",
"<text font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"74\" y=\"-272.3\">lstm_4: LSTM</text>\n",
"<polyline fill=\"none\" points=\"123,-253 123,-299 \" stroke=\"black\"/>\n",
"<text font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"150.5\" y=\"-283.8\">input:</text>\n",
"<polyline fill=\"none\" points=\"123,-276 178,-276 \" stroke=\"black\"/>\n",
"<text font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"150.5\" y=\"-260.8\">output:</text>\n",
"<polyline fill=\"none\" points=\"178,-253 178,-299 \" stroke=\"black\"/>\n",
"<text font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"234.5\" y=\"-283.8\">(None, None, 64)</text>\n",
"<polyline fill=\"none\" points=\"178,-276 291,-276 \" stroke=\"black\"/>\n",
"<text font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"234.5\" y=\"-260.8\">(None, 64)</text>\n",
"</g>\n",
"<!-- 139651507756784&#45;&gt;139651507753536 -->\n",
"<g class=\"edge\" id=\"edge2\"><title>139651507756784-&gt;139651507753536</title>\n",
"<path d=\"M158,-336.593C158,-328.118 158,-318.297 158,-309.104\" fill=\"none\" stroke=\"black\"/>\n",
"<polygon fill=\"black\" points=\"161.5,-309.096 158,-299.096 154.5,-309.096 161.5,-309.096\" stroke=\"black\"/>\n",
"</g>\n",
"<!-- 139651507566072 -->\n",
"<g class=\"node\" id=\"node4\"><title>139651507566072</title>\n",
"<polygon fill=\"none\" points=\"30,-169 30,-215 286,-215 286,-169 30,-169\" stroke=\"black\"/>\n",
"<text font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"92.5\" y=\"-188.3\">dropout_2: Dropout</text>\n",
"<polyline fill=\"none\" points=\"155,-169 155,-215 \" stroke=\"black\"/>\n",
"<text font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"182.5\" y=\"-199.8\">input:</text>\n",
"<polyline fill=\"none\" points=\"155,-192 210,-192 \" stroke=\"black\"/>\n",
"<text font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"182.5\" y=\"-176.8\">output:</text>\n",
"<polyline fill=\"none\" points=\"210,-169 210,-215 \" stroke=\"black\"/>\n",
"<text font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"248\" y=\"-199.8\">(None, 64)</text>\n",
"<polyline fill=\"none\" points=\"210,-192 286,-192 \" stroke=\"black\"/>\n",
"<text font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"248\" y=\"-176.8\">(None, 64)</text>\n",
"</g>\n",
"<!-- 139651507753536&#45;&gt;139651507566072 -->\n",
"<g class=\"edge\" id=\"edge3\"><title>139651507753536-&gt;139651507566072</title>\n",
"<path d=\"M158,-252.593C158,-244.118 158,-234.297 158,-225.104\" fill=\"none\" stroke=\"black\"/>\n",
"<polygon fill=\"black\" points=\"161.5,-225.096 158,-215.096 154.5,-225.096 161.5,-225.096\" stroke=\"black\"/>\n",
"</g>\n",
"<!-- 139651504669472 -->\n",
"<g class=\"node\" id=\"node5\"><title>139651504669472</title>\n",
"<polygon fill=\"none\" points=\"41.5,-85 41.5,-131 274.5,-131 274.5,-85 41.5,-85\" stroke=\"black\"/>\n",
"<text font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"92.5\" y=\"-104.3\">dense_2: Dense</text>\n",
"<polyline fill=\"none\" points=\"143.5,-85 143.5,-131 \" stroke=\"black\"/>\n",
"<text font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"171\" y=\"-115.8\">input:</text>\n",
"<polyline fill=\"none\" points=\"143.5,-108 198.5,-108 \" stroke=\"black\"/>\n",
"<text font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"171\" y=\"-92.8\">output:</text>\n",
"<polyline fill=\"none\" points=\"198.5,-85 198.5,-131 \" stroke=\"black\"/>\n",
"<text font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"236.5\" y=\"-115.8\">(None, 64)</text>\n",
"<polyline fill=\"none\" points=\"198.5,-108 274.5,-108 \" stroke=\"black\"/>\n",
"<text font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"236.5\" y=\"-92.8\">(None, 18)</text>\n",
"</g>\n",
"<!-- 139651507566072&#45;&gt;139651504669472 -->\n",
"<g class=\"edge\" id=\"edge4\"><title>139651507566072-&gt;139651504669472</title>\n",
"<path d=\"M158,-168.593C158,-160.118 158,-150.297 158,-141.104\" fill=\"none\" stroke=\"black\"/>\n",
"<polygon fill=\"black\" points=\"161.5,-141.096 158,-131.096 154.5,-141.096 161.5,-141.096\" stroke=\"black\"/>\n",
"</g>\n",
"<!-- 139651504669528 -->\n",
"<g class=\"node\" id=\"node6\"><title>139651504669528</title>\n",
"<polygon fill=\"none\" points=\"18.5,-1 18.5,-47 297.5,-47 297.5,-1 18.5,-1\" stroke=\"black\"/>\n",
"<text font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"92.5\" y=\"-20.3\">activation_2: Activation</text>\n",
"<polyline fill=\"none\" points=\"166.5,-1 166.5,-47 \" stroke=\"black\"/>\n",
"<text font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"194\" y=\"-31.8\">input:</text>\n",
"<polyline fill=\"none\" points=\"166.5,-24 221.5,-24 \" stroke=\"black\"/>\n",
"<text font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"194\" y=\"-8.8\">output:</text>\n",
"<polyline fill=\"none\" points=\"221.5,-1 221.5,-47 \" stroke=\"black\"/>\n",
"<text font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"259.5\" y=\"-31.8\">(None, 18)</text>\n",
"<polyline fill=\"none\" points=\"221.5,-24 297.5,-24 \" stroke=\"black\"/>\n",
"<text font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"259.5\" y=\"-8.8\">(None, 18)</text>\n",
"</g>\n",
"<!-- 139651504669472&#45;&gt;139651504669528 -->\n",
"<g class=\"edge\" id=\"edge5\"><title>139651504669472-&gt;139651504669528</title>\n",
"<path d=\"M158,-84.5931C158,-76.1177 158,-66.2974 158,-57.104\" fill=\"none\" stroke=\"black\"/>\n",
"<polygon fill=\"black\" points=\"161.5,-57.0958 158,-47.0959 154.5,-57.0959 161.5,-57.0958\" stroke=\"black\"/>\n",
"</g>\n",
"</g>\n",
"</svg>"
],
"text/plain": [
"<IPython.core.display.SVG object>"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from IPython.display import SVG\n",
"from keras.utils.vis_utils import model_to_dot\n",
"\n",
"SVG(model_to_dot(model, show_shapes=True).create(prog='dot', format='svg'))"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 1/10\n",
"36s - loss: 0.0460\n",
"Epoch 2/10\n",
"35s - loss: 0.0247\n",
"Epoch 3/10\n",
"31s - loss: 0.0211\n",
"Epoch 4/10\n",
"31s - loss: 0.0174\n",
"Epoch 5/10\n",
"33s - loss: 0.0155\n",
"Epoch 6/10\n",
"34s - loss: 0.0148\n",
"Epoch 7/10\n",
"32s - loss: 0.0135\n",
"Epoch 8/10\n",
"34s - loss: 0.0129\n",
"Epoch 9/10\n",
"34s - loss: 0.0123\n",
"Epoch 10/10\n",
"34s - loss: 0.0122\n"
]
}
],
"source": [
"# entreno con epochs 10, pero en cualquier experimento de otros ejemplos he visto que llegan a epochs 100\n",
"history = model.fit(trainX, trainY, epochs=10, batch_size=1, verbose=2)\n",
"#thrown error for input dimensions\n"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"dict_keys(['loss'])\n"
]
}
],
"source": [
"print(history.history.keys())"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f0324e64ac8>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.plot(history.history['loss'])\n",
"plt.title('model loss')\n",
"plt.ylabel('loss')\n",
"plt.xlabel('epoch')\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(599, 18)\n",
"(599, 18)\n"
]
}
],
"source": [
"#evaluate results on train and testing sets\n",
"\n",
"trainPredict = model.predict(trainX)\n",
"testPredict = model.predict(testX)\n",
"#inverse transform\n",
"\n",
"trainPredict = scaler.inverse_transform(trainPredict)\n",
"trainY_ = scaler.inverse_transform(trainY)\n",
"testY_ = scaler.inverse_transform(testY)\n",
"testPredict = scaler.inverse_transform(testPredict)\n",
"print(trainPredict.shape)\n",
"print(trainY_.shape)"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[ 7.26499557 6.95000505 6.65707636 ..., 5.64706326 5.7382369\n",
" 5.9057641 ]\n",
" [ 6.71565485 6.41870356 6.17298651 ..., 5.34775209 5.5332365\n",
" 5.63072157]\n",
" [ 6.29918957 6.03098726 5.85110664 ..., 5.30503464 5.55648947\n",
" 5.5966711 ]\n",
" ..., \n",
" [ 0.23273966 0.31974131 0.56797391 ..., 4.68249464 5.44085646\n",
" 5.39638186]\n",
" [ 0.09627296 0.14876488 0.38066843 ..., 4.43548775 5.16994572\n",
" 5.12240458]\n",
" [ 0.06269293 0.09950371 0.33201206 ..., 4.45123816 5.14180183\n",
" 5.11322784]]\n"
]
}
],
"source": [
"print(trainPredict)\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[ 6.28210545 6.20149994 6.55800009 ..., 8.08300018 7.95263147\n",
" 7.65649986]\n",
" [ 6.20149994 6.55800009 7.07473707 ..., 7.95263147 7.65649986\n",
" 7.46000004]\n",
" [ 6.55800009 7.07473707 7.79850006 ..., 7.65649986 7.46000004\n",
" 7.47052622]\n",
" ..., \n",
" [ 0.6785 0.42526317 0.229 ..., 1.76600003 1.83894742\n",
" 2.0094738 ]\n",
" [ 0.42526317 0.229 0.44578949 ..., 1.83894742 2.0094738\n",
" 2.25349998]\n",
" [ 0.229 0.44578949 0.75789475 ..., 2.0094738 2.25349998\n",
" 2.2452631 ]]\n"
]
}
],
"source": [
"print(trainY_)"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[ 21.70949936 22.11473656 22.92000008 ..., 22.83749962 21.33315849\n",
" 20.74263191]\n",
" [ 22.11473656 22.92000008 21.58947372 ..., 21.33315849 20.74263191\n",
" 20.27199936]\n",
" [ 22.92000008 21.58947372 22.25749969 ..., 20.74263191 20.27199936\n",
" 20.98600006]\n",
" ..., \n",
" [ 14.21000004 15.10894775 15.55049992 ..., 21.81421089 22.58473778\n",
" 22.85315704]\n",
" [ 15.10894775 15.55049992 16.17789459 ..., 22.58473778 22.85315704\n",
" 23.30500031]\n",
" [ 15.55049992 16.17789459 16.75399971 ..., 22.85315704 23.30500031\n",
" 23.55947304]]\n"
]
}
],
"source": [
"print(testY_)"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[ 19.43788338 19.91926384 21.56642342 ..., 26.47436142 26.89999771\n",
" 27.49394226]\n",
" [ 20.11920357 20.57465363 22.1638031 ..., 26.56900597 26.88505173\n",
" 27.49021912]\n",
" [ 21.02042007 21.44786835 22.9822197 ..., 26.94605827 27.13454056\n",
" 27.73114204]\n",
" ..., \n",
" [ 14.50486946 14.95016193 15.96099854 ..., 22.88847923 22.83836174\n",
" 23.51053047]\n",
" [ 14.78567123 15.22908401 16.28215981 ..., 23.13188362 23.19438362\n",
" 23.86996841]\n",
" [ 15.26630878 15.69888878 16.7875824 ..., 23.443367 23.59401703\n",
" 24.29552078]]\n"
]
}
],
"source": [
"print(testPredict)"
]
},
{
"cell_type": "code",
"execution_count": 39,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[ 2.34991951e+01 2.46284218e+01]\n",
" [ 2.32321301e+01 2.37631588e+01]\n",
" [ 2.27368965e+01 2.28775005e+01]\n",
" [ 2.20630589e+01 2.21889477e+01]\n",
" [ 2.14664078e+01 2.00889473e+01]\n",
" [ 2.01886730e+01 1.68444996e+01]\n",
" [ 1.77323456e+01 1.46470003e+01]\n",
" [ 1.52093353e+01 1.27235003e+01]\n",
" [ 1.32169857e+01 1.18515787e+01]\n",
" [ 1.22875462e+01 1.13694735e+01]\n",
" [ 1.21948738e+01 1.09429998e+01]\n",
" [ 1.23913031e+01 1.05015793e+01]\n",
" [ 1.24097652e+01 1.00852633e+01]\n",
" [ 1.20231352e+01 9.46949959e+00]\n",
" [ 1.12756577e+01 9.20947361e+00]\n",
" [ 1.05687809e+01 8.90842152e+00]\n",
" [ 1.00037737e+01 8.52263165e+00]\n",
" [ 9.55320358e+00 8.49149990e+00]\n",
" [ 9.36789131e+00 8.16736889e+00]\n",
" [ 9.26206112e+00 7.63500023e+00]\n",
" [ 9.01502991e+00 7.11749983e+00]\n",
" [ 8.59112263e+00 7.24849987e+00]\n",
" [ 8.42094898e+00 7.06649971e+00]\n",
" [ 8.31646347e+00 6.58368444e+00]\n",
" [ 7.99218750e+00 6.28368425e+00]\n",
" [ 7.51550865e+00 5.64052629e+00]\n",
" [ 6.81889772e+00 5.53149986e+00]\n",
" [ 6.25658035e+00 5.02052641e+00]\n",
" [ 5.69467592e+00 4.71850014e+00]\n",
" [ 5.24302578e+00 4.34473705e+00]\n",
" [ 4.84396982e+00 4.02157879e+00]\n",
" [ 4.45181656e+00 3.69799995e+00]\n",
" [ 4.06468821e+00 3.47300005e+00]\n",
" [ 3.70770693e+00 2.99368429e+00]\n",
" [ 3.24665260e+00 2.68263149e+00]\n",
" [ 2.76264358e+00 2.73149991e+00]\n",
" [ 2.50746965e+00 2.64277768e+00]\n",
" [ 2.43190837e+00 2.47849989e+00]\n",
" [ 2.38795137e+00 2.35263157e+00]\n",
" [ 2.32267499e+00 1.97049999e+00]\n",
" [ 2.08671308e+00 1.82842100e+00]\n",
" [ 1.81489110e+00 2.05315781e+00]\n",
" [ 1.78412783e+00 1.83850002e+00]\n",
" [ 1.76317048e+00 1.78473687e+00]\n",
" [ 1.72490466e+00 1.32900000e+00]\n",
" [ 1.44167268e+00 9.08421040e-01]\n",
" [ 9.50729072e-01 1.11600006e+00]\n",
" [ 7.22000062e-01 9.92999971e-01]\n",
" [ 6.55993938e-01 6.84210539e-01]\n",
" [ 5.30172884e-01 4.85000014e-01]\n",
" [ 3.32488537e-01 2.52105266e-01]\n",
" [ 7.39482492e-02 1.63157899e-02]\n",
" [ -2.15540811e-01 6.54999986e-02]\n",
" [ -3.48184586e-01 2.32631579e-01]\n",
" [ -2.44231135e-01 6.92631602e-01]\n",
" [ 1.76449001e-01 1.26900005e+00]\n",
" [ 8.51447940e-01 1.02450001e+00]\n",
" [ 1.13928640e+00 8.51000011e-01]\n",
" [ 9.84617591e-01 6.61052644e-01]\n",
" [ 5.71404159e-01 5.88000000e-01]\n",
" [ 1.82921141e-01 6.72631502e-01]\n",
" [ 3.93745825e-02 1.62399995e+00]\n",
" [ 6.25844121e-01 2.22399998e+00]\n",
" [ 1.61099219e+00 2.22473693e+00]\n",
" [ 2.27782059e+00 2.01049995e+00]\n",
" [ 2.32735682e+00 2.16000009e+00]\n",
" [ 2.14046597e+00 2.27842116e+00]\n",
" [ 1.97649002e+00 2.38700008e+00]\n",
" [ 1.93940663e+00 2.01999998e+00]\n",
" [ 1.75159228e+00 1.83700001e+00]\n",
" [ 1.48718798e+00 1.87105262e+00]\n",
" [ 1.34630370e+00 2.17000008e+00]\n",
" [ 1.51308382e+00 1.95949996e+00]\n",
" [ 1.62389481e+00 1.73105264e+00]\n",
" [ 1.53854871e+00 1.58222222e+00]\n",
" [ 1.33376849e+00 1.19799995e+00]\n",
" [ 9.61918056e-01 1.21894741e+00]\n",
" [ 7.21948743e-01 1.30900002e+00]\n",
" [ 7.25971222e-01 1.56105268e+00]\n",
" [ 9.98668790e-01 1.84749997e+00]\n",
" [ 1.43881440e+00 2.05263162e+00]\n",
" [ 1.85664678e+00 2.20263147e+00]\n",
" [ 2.13395071e+00 3.33049989e+00]\n",
" [ 2.85634947e+00 4.47149992e+00]\n",
" [ 4.05401754e+00 5.64200020e+00]\n",
" [ 5.51470757e+00 6.72263145e+00]\n",
" [ 6.94836187e+00 7.74894714e+00]\n",
" [ 8.20004559e+00 8.61349964e+00]\n",
" [ 9.18745232e+00 9.33631611e+00]\n",
" [ 9.91612816e+00 1.02104998e+01]\n",
" [ 1.06037817e+01 1.12310524e+01]\n",
" [ 1.14337149e+01 1.17010527e+01]\n",
" [ 1.20513067e+01 1.24094734e+01]\n",
" [ 1.25801134e+01 1.34821053e+01]\n",
" [ 1.33256474e+01 1.44863157e+01]\n",
" [ 1.42405653e+01 1.53990002e+01]\n",
" [ 1.51671085e+01 1.62000008e+01]\n",
" [ 1.59668474e+01 1.70494995e+01]\n",
" [ 1.66769905e+01 1.80226307e+01]\n",
" [ 1.74185905e+01 1.87715797e+01]\n",
" [ 1.80622196e+01 1.96320000e+01]\n",
" [ 1.86765995e+01 2.07315788e+01]\n",
" [ 1.94424648e+01 2.14189491e+01]\n",
" [ 2.00712395e+01 2.24099998e+01]\n",
" [ 2.07345467e+01 2.30894737e+01]\n",
" [ 2.12566643e+01 2.46173687e+01]\n",
" [ 2.22075806e+01 2.45354996e+01]\n",
" [ 2.24897251e+01 2.51584206e+01]\n",
" [ 2.25990047e+01 2.57236843e+01]\n",
" [ 2.27285748e+01 2.58199997e+01]\n",
" [ 2.26528912e+01 2.52221050e+01]\n",
" [ 2.20204315e+01 2.54839993e+01]\n",
" [ 2.16505737e+01 2.57552624e+01]\n",
" [ 2.17362633e+01 2.61421051e+01]\n",
" [ 2.22942352e+01 2.56875000e+01]\n",
" [ 2.26399384e+01 2.58700008e+01]\n",
" [ 2.32032509e+01 2.58105259e+01]\n",
" [ 2.38579006e+01 2.67854996e+01]\n",
" [ 2.52273617e+01 2.72222214e+01]\n",
" [ 2.67084045e+01 2.71515007e+01]\n",
" [ 2.76674309e+01 2.78226318e+01]\n",
" [ 2.86432076e+01 2.81863155e+01]\n",
" [ 2.93976154e+01 2.77814999e+01]\n",
" [ 2.93422661e+01 2.82389469e+01]\n",
" [ 2.92729111e+01 2.84029999e+01]\n",
" [ 2.90680485e+01 2.71689472e+01]\n",
" [ 2.78082008e+01 2.55210514e+01]\n",
" [ 2.56277103e+01 2.48899994e+01]\n",
" [ 2.37784557e+01 2.58942108e+01]\n",
" [ 2.35172119e+01 2.55752640e+01]\n",
" [ 2.36651669e+01 2.63773689e+01]\n",
" [ 2.44735279e+01 2.86564999e+01]\n",
" [ 2.65397758e+01 2.70300007e+01]\n",
" [ 2.68265190e+01 2.55215797e+01]\n",
" [ 2.55208263e+01 2.43630009e+01]\n",
" [ 2.37997284e+01 2.39221058e+01]\n",
" [ 2.27032146e+01 2.59936848e+01]\n",
" [ 2.37329636e+01 2.47231579e+01]\n",
" [ 2.41979084e+01 2.63500004e+01]\n",
" [ 2.52762680e+01 2.81326313e+01]\n",
" [ 2.69860191e+01 2.94729996e+01]\n",
" [ 2.86399097e+01 2.96984215e+01]\n",
" [ 2.93149776e+01 2.99226322e+01]\n",
" [ 2.93162460e+01 2.93104992e+01]\n",
" [ 2.86147308e+01 2.85354996e+01]\n",
" [ 2.75507507e+01 2.85144997e+01]\n",
" [ 2.69462528e+01 2.81690006e+01]\n",
" [ 2.66477699e+01 2.72034988e+01]\n",
" [ 2.61091366e+01 2.58829994e+01]\n",
" [ 2.51258602e+01 2.30447369e+01]\n",
" [ 2.30290051e+01 1.97031574e+01]\n",
" [ 2.00391827e+01 1.71404991e+01]\n",
" [ 1.72440376e+01 1.49910526e+01]\n",
" [ 1.52002459e+01 1.37216663e+01]\n",
" [ 1.42522564e+01 1.25810003e+01]\n",
" [ 1.39671373e+01 1.21726313e+01]\n",
" [ 1.40794153e+01 1.13938885e+01]\n",
" [ 1.39752855e+01 1.08778944e+01]\n",
" [ 1.35702610e+01 1.04545002e+01]\n",
" [ 1.29672709e+01 1.01272221e+01]\n",
" [ 1.23716326e+01 9.65842152e+00]\n",
" [ 1.17550192e+01 9.05894756e+00]\n",
" [ 1.10349417e+01 9.17578983e+00]\n",
" [ 1.06407814e+01 9.37749958e+00]\n",
" [ 1.06316509e+01 9.40052605e+00]\n",
" [ 1.07590475e+01 8.85526276e+00]\n",
" [ 1.05124712e+01 8.39000034e+00]\n",
" [ 9.98535728e+00 9.13315773e+00]\n",
" [ 1.00190496e+01 8.98315811e+00]\n",
" [ 1.00575809e+01 8.47200012e+00]\n",
" [ 9.72104645e+00 8.25315762e+00]\n",
" [ 9.21264267e+00 8.84850025e+00]\n",
" [ 9.14591312e+00 9.64789486e+00]\n",
" [ 9.69025612e+00 9.73157883e+00]\n",
" [ 1.02032261e+01 9.43799973e+00]\n",
" [ 1.02809086e+01 9.34789467e+00]\n",
" [ 1.01001263e+01 9.28421021e+00]\n",
" [ 9.89077377e+00 9.29599953e+00]\n",
" [ 9.80516815e+00 9.65684223e+00]\n",
" [ 1.00378933e+01 9.23449993e+00]\n",
" [ 1.00558443e+01 7.88894749e+00]\n",
" [ 9.18872547e+00 7.15700006e+00]\n",
" [ 7.90154791e+00 6.45650005e+00]\n",
" [ 6.60294676e+00 6.33631563e+00]\n",
" [ 5.83336639e+00 5.87650013e+00]\n",
" [ 5.44083548e+00 5.48105240e+00]\n",
" [ 5.23511362e+00 5.02150011e+00]\n",
" [ 5.00975037e+00 4.55450010e+00]\n",
" [ 4.68093157e+00 4.45210505e+00]\n",
" [ 4.46022701e+00 5.00199986e+00]\n",
" [ 4.74989367e+00 4.95578957e+00]\n",
" [ 5.11605358e+00 4.95200014e+00]\n",
" [ 5.35029078e+00 4.50631571e+00]\n",
" [ 5.15397406e+00 4.71799994e+00]\n",
" [ 4.99353456e+00 4.76900005e+00]\n",
" [ 4.94329453e+00 4.92526293e+00]\n",
" [ 5.04466486e+00 4.95149994e+00]\n",
" [ 5.16459990e+00 4.76368427e+00]\n",
" [ 5.11280727e+00 4.27947378e+00]\n",
" [ 4.72717667e+00 3.75900006e+00]\n",
" [ 4.08594275e+00 3.86105251e+00]\n",
" [ 3.70307589e+00 3.86050010e+00]\n",
" [ 3.61308861e+00 4.16105270e+00]\n",
" [ 3.87255907e+00 4.44099998e+00]\n",
" [ 4.32979822e+00 4.55550003e+00]\n",
" [ 4.70613432e+00 4.18263149e+00]\n",
" [ 4.62210226e+00 3.87050009e+00]\n",
" [ 4.17123079e+00 3.76473689e+00]]\n"
]
}
],
"source": [
"df = pandas.DataFrame({'testY_real':testY_[:,0], 'testPred':testPredict[:,0]})\n",
"print(df.values[30:238,:])\n"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"268"
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"testY_[:,0]\n",
"testPredict[:,0].size"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Train Score: 1.17 RMSE\n",
"Train score: MAE 0.90 \n"
]
}
],
"source": [
"# calculate root mean squared error\n",
"trainScore = math.sqrt(mean_squared_error(trainY_[:,0], trainPredict[:,0]))\n",
"trainMAE = mean_absolute_error(trainY_[:,0], trainPredict[:,0])\n",
"print('Train Score: %.2f RMSE' % (trainScore))\n",
"print('Train score: MAE %.2f ' %(trainMAE))"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Test Score: 1.48 RMSE\n",
"Test score: MAE 1.11 \n"
]
}
],
"source": [
"\n",
"testScore = math.sqrt(mean_squared_error(testY_[:,0], testPredict[:,0]))\n",
"testMAE = mean_absolute_error(testY_[:,0], testPredict[:,0])\n",
"print('Test Score: %.2f RMSE' % (testScore))\n",
"print('Test score: MAE %.2f ' %(testMAE))"
]
},
{
"cell_type": "code",
"execution_count": 45,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(599, 18)"
]
},
"execution_count": 45,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"dataset.shape\n",
"trainPredict.shape"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### FIX THE PLOT !! testPredict is not printing correctly"
]
},
{
"cell_type": "code",
"execution_count": 62,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f02f865bd30>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"#PLOT THE RESULTS\n",
"# shift train predictions for plotting\n",
"trainPredictPlot = numpy.empty_like(dataset)\n",
"trainPredictPlot[:, :] = numpy.nan\n",
"trainPredictPlot[look_back:len(trainPredict)+look_back, 0] = trainPredict[:,0]\n",
"# shift test predictions for plotting\n",
"testPredictPlot = numpy.empty_like(dataset)\n",
"testPredictPlot[:, :] = numpy.nan\n",
"testPredictPlot[len(trainPredict)+(look_back*2)+1:len(dataset)-look_back+1, 0] = testPredict[:,0]\n",
"# plot baseline and predictions\n",
"plt.plot(scaler.inverse_transform(dataset))\n",
"plt.plot(trainPredictPlot)\n",
"plt.plot(testPredictPlot)\n",
"plt.show()\n"
]
},
{
"cell_type": "code",
"execution_count": 53,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"35"
]
},
"execution_count": 53,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"303-268"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"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.6.1"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
@jpeg729
Copy link

jpeg729 commented Oct 2, 2017

I'll start by saying what I understand...
Your LSTM reads in 36 values of a single sensor in chronological order, and it produces a vector containing 18 values that will hopefully correspond to the next 18 values of the same sensor.
If you wanted to predict just the value 18 steps ahead, you would need to do b = dataset[i + look_back + time_step,0] in create_dataset and the output_dim of the Dense layer would need to be 1 rather than T.

The problem I see is that the green lines are out of alignment. The following line of code seems pretty bizarre to me.
testPredictPlot[len(trainPredict)+(look_back*2)+1:len(dataset)-look_back+1, 0] = testPredict[:,0]

Firstly, testPredict[:,0] takes the first value of each output vector, which corresponds to the 1 step ahead predictions, not the T step ahead predictions - for that you would need testPredict[:,T-1]
Secondly, I don't understand why you add (look_back*2) and I suspect that is why the the green line is shifted out of alignment.

You probably need something like the following testPredictPlot[train_size+look_back:len(dataset), 0] = testPredict[:,0]

@anadiedrichs
Copy link
Author

anadiedrichs commented Oct 4, 2017

I'll start by saying what I understand...
Your LSTM reads in 36 values of a single sensor in chronological order, and it produces a vector containing 18 values that will hopefully correspond to the next 18 values of the same sensor.

That's ok, it's the main issue in this notebook.

If you wanted to predict just the value 18 steps ahead, you would need to do b = dataset[i + look_back + time_step,0] in create_dataset and the output_dim of the Dense layer would need to be 1 rather than T.

Ok, thanks for the comment. That's what I need to understand :-)

The problem I see is that the green lines are out of alignment. The following line of code seems pretty bizarre to me.
testPredictPlot[len(trainPredict)+(look_back*2)+1:len(dataset)-look_back+1, 0] = testPredict[:,0]

Firstly, testPredict[:,0] takes the first value of each output vector, which corresponds to the 1 step ahead predictions, not the T step ahead predictions - for that you would need testPredict[:,T-1]
Secondly, I don't understand why you add (look_back*2) and I suspect that is why the the green line is shifted out of alignment.

You probably need something like the following testPredictPlot[train_size+look_back:len(dataset), 0] = testPredict[:,0]

Yes, I've also noticed. I was looking for a way to analyze the error.

I think I get it and I improve the example --> https://gist.github.com/anadiedrichs/f847659d5570938f5f300efb16f81ece

Thanks a lot for your comments!!!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment