diff --git a/paddle2.0_docs/Autoencoder/AutoEncoder.ipynb b/paddle2.0_docs/Autoencoder/AutoEncoder.ipynb new file mode 100644 index 00000000..1ec0eeab --- /dev/null +++ b/paddle2.0_docs/Autoencoder/AutoEncoder.ipynb @@ -0,0 +1,757 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "collapsed": false + }, + "source": [ + "# 通过AutoEncoder实现时序数据异常检测\n", + "\n", + "作者: [Reatris](https://github.com/Reatris)\n", + "\n", + "日期:2020.10.11\n", + "\n", + "本示例教程将会演示如何使用飞桨PaddlePaddle2.0来完成时序异常检测任务。这是一个较为简单的示例,将会搭建一个AutoEncoder网络完成任务。" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": false + }, + "source": [ + "## 环境配置\n", + "\n", + "本教程基于paddle-2.0-beta编写,如果您的环境不是本版本,请先安装paddle-2.0-beta版本。" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "#安装Paddle-2.0-beta版本\r\n", + "!pip install paddlepaddle-gpu==2.0.0b0" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "#导入模块\r\n", + "import numpy as np\r\n", + "import pandas as pd\r\n", + "from matplotlib import pyplot as plt" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2.0.0-beta0\n" + ] + } + ], + "source": [ + "import paddle\r\n", + "import paddle.nn.functional as F\r\n", + "print(paddle.__version__)\r\n", + "\r\n", + "# 启动动态图训练模式\r\n", + "paddle.disable_static()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": false + }, + "source": [ + "## 加载数据集\n", + "\n", + "* 我们将使用纽伦塔异常基准(NAB)数据集。它提供人工时间序列数据,包含标记的异常行为周期。\n", + "\n", + "* 该数据集已经挂载到[AI Studio](https://aistudio.baidu.com/aistudio/datasetdetail/55385),相应的项目也已经挂载数据集[基于AUTOENCODER实现异常时序检测](https://aistudio.baidu.com/aistudio/projectdetail/1086283?shared=1)\n", + "\n", + "* 我们将使用art_daily_small_noise.csv文件内数据进行训练,并使用art_day_jumpup.csv文件内数据进行测试。\n", + "\n", + "* 该数据集的简单性使我们能够有效地演示异常检测。" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "#解压数据集\r\n", + "%cd ~/\r\n", + "!unzip data/data55385/artificialNoAnomaly.zip && unzip data/data55385/artificialWithAnomaly.zip" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " value\n", + "timestamp \n", + "2014-04-01 00:00:00 18.324919\n", + "2014-04-01 00:05:00 21.970327\n", + "2014-04-01 00:10:00 18.624806\n", + "2014-04-01 00:15:00 21.953684\n", + "2014-04-01 00:20:00 21.909120\n", + " value\n", + "timestamp \n", + "2014-04-01 00:00:00 19.761252\n", + "2014-04-01 00:05:00 20.500833\n", + "2014-04-01 00:10:00 19.961641\n", + "2014-04-01 00:15:00 21.490266\n", + "2014-04-01 00:20:00 20.187739\n" + ] + } + ], + "source": [ + "#正常数据预览\r\n", + "df_small_noise_path = 'artificialNoAnomaly/art_daily_small_noise.csv'\r\n", + "df_small_noise = pd.read_csv(\r\n", + " df_small_noise_path, parse_dates=True, index_col=\"timestamp\"\r\n", + ")\r\n", + "\r\n", + "#异常数据预览\r\n", + "df_daily_jumpsup_path = 'artificialWithAnomaly/art_daily_jumpsup.csv'\r\n", + "df_daily_jumpsup = pd.read_csv(\r\n", + " df_daily_jumpsup_path, parse_dates=True, index_col=\"timestamp\"\r\n", + ")\r\n", + "print(df_small_noise.head())\r\n", + "\r\n", + "print(df_daily_jumpsup.head())" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": false + }, + "source": [ + "## 数据可视化" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/matplotlib/cbook/__init__.py:2349: DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated, and in 3.8 it will stop working\n", + " if isinstance(obj, collections.Iterator):\n", + "/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/matplotlib/cbook/__init__.py:2366: DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated, and in 3.8 it will stop working\n", + " return list(data) if isinstance(data, collections.MappingView) else data\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXQAAAEhCAYAAABvIFsXAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvIxREBQAAIABJREFUeJztnXmYFcXV/79nZoBhH5ZhkX0VUBBlRERFBVwCRtG4RaO4v8bkNcYYJZq4JNFXo4kmr77Jz4iRJGo07sYlKmLcwWFfBWTfZgYYhmGZ/fz+6L7DneHe7urqqtvLrc/zzDP39nL63OqqU1WnTlURM8NgMBgM0ScnaAUMBoPBoAZj0A0GgyEmGINuMBgMMcEYdIPBYIgJxqAbDAZDTDAG3WAwGGKCMegGg8EQE4xBNxgMhphgDLrBYDDEhLxMPqxr167cv3//TD7SYDAYIs/8+fN3MnOh23VCBp2IfgTgegAE4M/M/BgRdQbwAoD+ADYAuJiZy53k9O/fH8XFxSKPNBgMBoMNEW0Uuc7V5UJER8My5mMBHAPgHCIaDGAGgNnMPATAbPu7wWAwGAJCxIc+HMBcZj7AzHUA/gPgAgDnAZhlXzMLwDQ9KhoMBoNBBBGDvgzAKUTUhYjaAJgCoA+A7sy83b5mB4DuqW4mohuIqJiIisvKypQobTAYDIbDcTXozLwSwEMA3gPwLoBFAOqbXcMAUq7Dy8xPMnMRMxcVFrr69A0Gg8EgiVDYIjPPZOYxzDwBQDmA1QBKiKgnANj/S/WpaTAYDAY3hAw6EXWz//eF5T9/DsAbAKbbl0wH8LoOBQ0Gg8Eghmgc+stE1AVALYAfMPMeInoQwItEdC2AjQAu1qWkwWAwGNwRdbmcwswjmPkYZp5tH9vFzJOYeQgzT2bm3XpVjSe19Q1YsMkxfD90vLZwK4o37EZVbb37xSGgZG8VdGy1WFffgIYG9XJXl1Tid++vVi43Shysqdeav/6zugz/WR2/II3YTv1vaGClhfjm5xei/4y3lMlLMOSud3DB/32OZVsrlMsGgLeXbkdZZTVq6hrw3vIdvtJke8VBLN9WgVteWIQL//QFfvLPxdiwc79CbdXy1y82oP+Mt3DCA7Px+9lrlMsffNc7mPHKElTV1uN3732N6jp/BuhgTT2q6+px5qMf4w+z12D+xnJf72vXvmq8uXgb+s94C7v2VQMAnpizFl+u24XSvVW+dNXFpU9+gbMf+xjD734Xw37xLhZuKsfm3Qd8yXx+3ia8u2wHAKC+gbGvug7Tn56H6U/PU6EyAGDOqtIm6RwUGZ36r5uq2noM+8W7OHVoIb5Ytwt9OrXG7J+c5ltu8YbdeGPxtsbv9XZlkZcrXx/W1Tdg8F3vNH5furUCby7ehpK9Vbhr6ggUtm/lS2cA2Fddh5ueXYBhPdrjpMFdMfPT9Xj1pvE4tm8nz7I+WVOGK2Y2LQBvLdmOt5Zsx2czJqJXQWvf+gJorDSvGt8f9557lC9Zv3xzRePnxz5Ygx4d8rGvug6ThnfHgK5tpeWWVVajsqoWAPBi8Rb069IWf/hwLdq0ysONpw6SklnfwBh+97vo0SG/8dh3/vg57jv3KEwf319K5phff9Dk8w9OH4Qn5nzTeGzDg1Ol5DbnO3/8HJOGd8NNpw32LevLdU07+uf/3+cA/On6s1eWNsr4+WtL8fy8zfIKpuDztTtx16vWM1Zs34tThgQXzRcrg/5isfWiEl2pb8qs1uM/izdj2dYK3Hfe0VJyv/hmV5PvZzz6H6wr2+8rk1XVNTT5nsh0APDaom2+ZN/4t/noWZCPGvsZW8sPYpPdyimtlGtBvLVke9pzu/fVKDPoCZ75fIMvg15b34C6Zu6QGXYaPz5nLRbdfaZnmcu3VWDqHz497PiBmjoAaExvr3y5bhcuffJLAMCOZi3npQp7bsnG3A9VtfU49eE5ePA7ozCqV0fM31iO+RvLfRv0TLRuVRrz/529Bn06t8EtLyxqPFZVK5cHVBErl0sqf+acVaX46UtLMOsLoaUQhFhnVxTf/t9PsdduqXmFlGlzOO8u34G/fLYBz87dBACobWhALllPrJf0+f7jK7WtmmRWl1Rixba9hx3/r7/Jr/szJKn305w9B+Te2XN2ejbHr6H84XML057TmU9kYGZ8uKoUJXur8dA7q5r0As574jNpuUu3VDSRFQV++/7qJsYcAK7/a7BrVcXKoKfi6me+8i0jnQlcurUCn6ze6Vt+Kurq1dX0DQ1Abo4/g+4Ep00hMc589GNM+cMnhx3/9/ISX3JV4/YrZY3vzoD9rl54deFW3PTsAgBAfovcJucWb94jLffbjx/e8zF4J1YGnShs7Zn0uKn6WTM3jx8YjBzboDdoiPY49/HPpAfvlm875FLQEYkSdcKWpZONdirdvtoQrmC38v01jZ/LJN2NUSJWBl0XpZXpIwJ0FTiVxq22nvGmPairw6BbcuXuS/ZJz16pZrKxyt6NFyoOyrlynKCQOV2SG02pNNtS7i8iRTXJbqAv1qlrJF30p8/Tntu656Cy53jFGHQXKg7W4u9fpvadAvp8nLp6G7oMhIzU5mMe1ynyPw528J/rZHtFeEIBdYTYiqCrkyUbEropKeRxmyJDu3xbBb7akH7uyMRHPlLyHBliY9CZGW8vTR+JIcvlT33Z5PsHK5r6dWXtrpth7dkx3/F8Okpc4ovD1IUfeOfbQasQesL0vpqTSQfZ5t3+jfGD76xSoAnw6oKtjuerJaOdVBAbg/7BylLMXa/ef7dsa9PoC1WtyESoWzoSg5heOeGB2VL3GYJB14SyTLBwk/wgqEEPsTHou/dHa8AjqBAtGVeOGay0WLX98NBKv3y6Vk+UlCE7iY1BDw49fWJdNlRG28pq595EtuA6aUQicd0GqcPsckmFvrrfu+DXFzm7RmTZo2HwWxXGoPskagVORt/fvZfdC0Ul0PGu49b50fVzZNJp5qfr1SsC4KX5W7TIVYEx6D7RZ8+95+C1pftcr5GJchFZ9S5mdiklwQx2havFsMnnQlmZJFwplxliY9DDFq/rF5kWySIfM/Wc0DG7NGrsr64TqjC9omP5XZ18uMp5roAZbwmW2Bh0g1iLRMZtEDGbo4XKKj3jCPtcxydM4gOSqRA1f6gCjEH3ia4JQDIZWEQVqQlAptWlLW3dZhVGLenD5EPPPnNuDLpvgppmngohoyORy5svQ5uNiCSbTCq53RM1gx4msrCBbgy6X75vrzznhR0CU8T1FWTvuTxqfl4taGqhu/mc/a5kmc1koT0XM+hE9GMiWk5Ey4joeSLKJ6IBRDSXiNYS0QtE1FK3sk5EaYKGyOClTEEWGRiWabWYQVF9g+4NLh28F4vDGyKXEk1ZRaY8ZGOudTXoRNQLwM0Aipj5aAC5AC4F8BCAR5l5MIByANfqVNSN5C3iDOmRMUv1pt+vb1XNrDQ7Tfnoa/dVNhdsNMsMiCDqcskD0JqI8gC0AbAdwEQAL9nnZwGYpl69eCJiHKQGgYR86N4tk0gL3YSryRG3zo9MBbWmxD0cdNHm9KsbGg7hatCZeSuARwBsgmXIKwDMB7CHmRMxV1sA9NKlpCFYjMtFnz82SvWgrkpbpBJolZfrek1zsjHbirhcOgE4D8AAAEcAaAvgbNEHENENRFRMRMVlZWXSisYJoYiJEK3lEqWwRfe4bjnKNG0Tt26n+slKuhDJBjJZReSe4/oVeBechYi4XCYDWM/MZcxcC+AVACcBKLBdMADQG0DKlXCY+UlmLmLmosLCQiVKZwO6fKtyE4uiY9DX2xt4q0ZkNyUZd9Y6TfrqQCQX6AjdBIBu7eX2B8g2RAz6JgDjiKgNWTl2EoAVAOYAuNC+ZjqA1/WoaFBJ3KNcorAlYFRRteNPc3QlbVDvTHYvAxWI+NDnwhr8XABgqX3PkwDuAHArEa0F0AXATI16xgqRlpyuqeYy4XdRMugGfYgYdBkbKtIDjFJMeZuW3v39qhCKcmHme5h5GDMfzcxXMHM1M69j5rHMPJiZL2LmaO0wEXKufHqeHsESJcNp/8RsQcRQRcnoyKBrmQsht5PEo7OxU2VmigaASN6s0bRUa9yNji6y0DYchlC4rURKvbwgYpOn3AgwsxiDHiOEWpEhWkzMEC2CjM6SIahJW0EmgTHoAZCNiwZFnTAZqjAjk0wnDe7ieo3M2E82vjNj0A0GgxAt89zNhcxCbgO6tpVRx5VvytTH+Ic92skY9BjRtlWe+0UGKUS673EPmWyf38L1mvveXO5Zrq6f57qptwQheRVpMQY9AHQV/ADDXyNFl7beFwYNe0HOBCIVi0yEq8gtYXFThj0bZJVBD0tLRwSZyQkmXDxYIpS9pNC3G1EwcegyDSARXYO0M1lm0IPWwEJkgCdPIrdFqcLSRV5ucE25sLQidaFvRqfANRqeKxPxJaLH4G7tvCujiKwy6GFZk2TdTveJFGcf3cOzXF2/rnWL4Ga+eUWkIgxT2go9OxzZFrpSQcfv269pkTYRXTu2CW6vn6wy6F7zjcjKfb0KWnvW41f/WuF6zREScnV1B8cPcg8rC4vREdGjk0SBe+az9UqenUzJXvetCGXQ1VN7bu5mLXJfKFYv94fPed8aUoSwb0iSXQbd47uorKp1vaawfStJbZzRtQypDKl2LHr75lP0PMwnuorbXoG1dSYM9baa6K0vLpJVx5FKTa3TpwUqNa/M36hnWYmlWyu0yA1LwyUdsTDooi0Sr7Vr+X53gx4mdA2Kplqcy2/s8IEad6MzsND7M4IscB3yvYWNfrZ2lxY9Rt37nha5Oli1Y6/QdTreq46ezOg+wa7bHguD/tqilEux++amZ+e7XhOmCltXdzBVvvc7APj8PPdutoxrJMguscjEGxnClMdUo2vzbV0rhIZlHC4dsTDo63ceaPK9Uxv3CRAibC5vulyorhltqfBqmGrqGvD6okMbZY8b2FmZLqkKh1+DrsvPu892jdxx9jAt8pN55KJjMHVUz8bv4S7qTRkSYCRGJig/oKd3LbZrkwlbVMrYAWqMWdhr42Qe/WA13l9R0vj92evGKZOdqnLJCWmM3o1/t3pVRxTkY/E9Z+K1H5zU5LzKzQfatcrDY5eMViYvU5wypCvae3QPiRqpC47ztrVwqmx0dK8O+OV5R3mSkymap8J7P57Q5HvQxSKWBr2lxIayqWieh3XXvMU/nyx978erm+7XqtJwpXS5+JT53LxNPiWkZue+GgBAbT2jY+sWKX2aXns/OyqaRqNccFwv/OD0QThjRHd5RT3gJ9996+geuGp8f3z809ObyvQoR9SD0b+Lt15sqnx00uCuGDewaWSVSlfaIxcdg/+eOFhK4ttLtjf5PrR7ezx9VZEaxRQQS4P+0zOPxEmDu2DZfWfhNxeOUiLz37dMwG8vPkaJrHR0bScfMZPKLTJpWDcAwCs3jcfM6fKZ7kBNPcb064TpJ/ZrPOZ3Gd7mmxrceOogAMBjl4zGZzMmomu7Vp4NWWll6jDAycMtw3vakYVSFdH2iqaut4LWLfHTs4YhN4eQq6FJNqxHe2Wy2rXKw73nHoW+Xdr4kpMqf908aYgvmQBQ10zuX68Zi9vPGoYBXdti8vBuuGvKcN/PeOg7IwEAH9x6Klb+8mxcOKa3dIPk9peXHHZs4rDueOg7I3H3OSN8aKmGWBr0vl3a4NnrxqFdqzxcXNQHPz3rSAD+RsqP7NEeY/p1xroHpuDWM4Zi4S/OwKkew9RSMX5QF+TmUOOEmM9mTLROKGiQPHH5cfjnjSfiuL6d0Mlev8Sr2EWb92Dp1grM31iOe759FPp1aYOfnDEUuTmEt28+BRPtSsNPC+qCY3vh9rOOxJJ7z8S0Y3uhV0FrDO/p3aglb9uXXBn8+coxuGvKcPz2IjUVcvJyrzk5hFduGm8/1J/cX007Gg9fOAovfX88nrv+BEwbfYQ/gc1U+uT20zHvzkm+ZQLAlSf2w61nDMX6/5mCJy47Dl/dJde7fOS9rxs/jxvYGROGFiI3h9AiNwdPTT8eI3t39K3rJcf3xYYHp2Jwt3ZorWl7uEuO74trTh6gRbYXsmJ5PpWNqJwcUtIySfDc9U193b0KWiO/hZp6Nr9FLo7vb40nyCbBT5JipXNyCP9J6rqPOKIDxvTrhA9XlfpRE/efPxI5OYQOAqv5OZHs1082ZESE6ycMlJZbcbDpANuk4U1dLarGE64Yd6gHNH5QV8xXvPVfn87+WukJHjh/JC4u6g3AStupo3o2tuC9Npr2JA1eBrm5clxwtRxEdCQRLUr620tEtxBRZyJ6n4jW2P87ZUJhN2RW0jMEi6pWUxN7oHC447EP1qgTJoGfn5LOwPrprXZr3wp5uU1NhwpT7FgxaolD93f/U1eGx3eewNWgM/PXzDyamUcDGAPgAIBXAcwAMJuZhwCYbX8PnFnXjM3sA33kCpW+UoO+yBtd+7u6oeLnpHKFyS1KdUiOrkiOy8b2PeyYtja7ph8RdB/Da99+EoBvmHkjgPMAzLKPzwIwTaVisuRncCEpv3ni/vNHpj3np/FwzUnB+/KCICcn2eWiJyLp0ztOT3vOzzObR6EoQ0My6JqR/K2RPd0vChFHhrBB5tWgXwrgeftzd2ZOxPDsAJCZGC4XVPmfM0G6CsHv7LnrJ2SpQdfUPEp+T707He6HVvFYv1Eo6dBhe/2OmcgQthkhXdu1UjYmoRJh60dELQGcC+Cfzc+xFVKQMs2J6AYiKiai4rKyslSXKCVVgQsrurpnuqZTh50mg6IOFsCrlyzoSVR+fL3fG3e4GwPwbiCTdcjkTEi/4bFp5fq8P6zjt16as98CsICZE9MRS4ioJwDY/1NW28z8JDMXMXNRYaH/ML844ZRZ/RQalZntmzL3tdt14TUFRMZEZexDUPbcrzEb2r0dxvQ7fNa035/jPHYZtra0HoKeEZoOLwb9uzjkbgGANwBMtz9PB/C6KqVUE6YWa7KhTqeV78zidH+Au87ohgRb6LoIQxokk8meRVgNnC6cbEqQ+UDIoBNRWwBnAHgl6fCDAM4gojUAJtvfDR7Qt1n04YK1dV1DVJCTdVG5Do/bTwxTGmSCOFWWsj3hdL1gXeVMFKGJRcy8H0CXZsd2wYp6yWr85DNdPYcssy8pUVr+g/ahhzEIO0PoSnq/coM23OmITkhICNHqi/RR3sKa2TJKBlvoUcNkj/gSD4MekdYGIKZqXEfgM0mL3Mxn7bBlQ1Ox66OVps1M/BJOrTwiWo7CVuB0DVqFaRA4KI46wv+iTgncXpPu9JbNt7q0CsSHnsHduETon8HNbrwQC4PuNgAW1oaKrqUrKBZv1R9Oq/T5CYfMJP79vOnP+YlDV3GdKGGdq5FYwTVsxKLo1wez1IZv0s4U9VmSQ1p/ecarcRBzZ8UldeTxmwKq1ocB0LhsdNRw6l0HGYsfC4NeVVsftArCNFnWVZNxyWRm0xapE6JulaguIfPoRYKcgA266ncWdK6NhUF/5vMNQasgRSZDsoLOaOmIQgPNxKHra3WK7vik3JUT03cWC4MeJPomPMjfGyW3wqDC8O8+H9jUf5/vUZfeKvO826YWYTW8YV3iIKsMunJ3g8/clq5g6IxvDxuPX3Zc0CpkJX6McsfW/naWSsbsUqSWrDDoYcoyyVONddXyUTLo7fPDvwuisA89ZHGxaRsMPjPIxcf38XV/MqL2XFfKyr6zkL3qRrLCoIeVBk3ROUEv9xo3gk7NMBiPZB2cB91VI5f6LV0m/uh8p6FfnCvb+f2lo7XIdWqhe229ixa4sBGEqp7DIfWo4YrftIlSPlBNlLcN9IMx6AK01DSNPK1h8blmdxB+SR2tEs+TX+w7HCd9SCRN2FwpojhlA3/uvmimRypkf0lYs4Qx6AKojIlOzgcqM4Voaywq4V9+xKoctAP0x6Hffc4IyTtdSKO331eWmxPEOjlyqbvwF2ekPO679xNSyxlStfQga8x0tXQcXS6SYicPT721a9BdwShzbJ8CAMDFRb1TntedtrJ5TGVHLVmDARlcx8Rv2nZq21KNIjadbXlHdg/fBtFAlhh0Xb5I31OoFYYt6uoBXnZC6j0pVRGFmPkRR3QAAPzXqYO0yE+/Wbg/zj+2l08JhuZ075CPM0d0D9VM5mRiYdBPHNjF/SIftNC0VKbKXXVOP9Lar/XMEalb6LKYMOHoMmVkz7TnwuoDzjRxS4dYGPThPTtokTu4mzWL8ZTBXZXJbLJ7ujKph5aLHd23QKFUYE3JPqXymtO6Ra5W+ZnEq3E4ym75n3ZkN6VyE2jbs9YJTRZS+Zorkokg4ss3YYshpVObFhg/qIu2BYRURk/omqQ0d/1uLXJH9uqIbu1boWMbtQOYQSDrNhrVuyMK27dK65MOU9iiSF6VedxxfTs5y/QuMlCCdiHGwqCHdV0FN9rnpzZmfvxzqrNTwpUz1aH7LkPLvBwM6R7+dVx0o7P452vo/fx86nCl8hJuoY9/erpSuToJqfscgKBBJ6ICInqJiFYR0UoiOpGIOhPR+0S0xv7vXNVmgPd+PMHxvK5F/WU4YUBnDA3pSHkyfTu3QUGbFnjicuc1V2QqVdfWjKYZQFFtAIjSs2M+jutbgNYt0xv0sPiOdalxcVFv9OyYL/D8kCSEIkRb6L8H8C4zDwNwDICVAGYAmM3MQwDMtr8HRvv8vLQG0k83yK029m5zrBsmDC10kRuuLbfSoW1HGR+Cne7VvFlcKKS2zMtB385tHK7wngq6zZ7r+46X3dWGq0Enoo4AJgCYCQDMXMPMewCcB2CWfdksANN0KRlWMrmeuW+ZIfNGRnX2ZSr0Ta6SHbhTrEiAhDU8MKyItNAHACgD8BciWkhETxFRWwDdmXm7fc0OACnj5YjoBiIqJqLisrIyNVobDAEQJdNiDKEYMpWfW0Ub9i3o8gAcB+CPzHwsgP1o5l5hq7mV8lcw85PMXMTMRYWFzm6GsBGjho40OtPA2Jzg0LYcrTa58ovVpUI277lWABFYnGsLgC3MPNf+/hIsA19CRD0BwP5fqkdFd3R2MVW7KoR3T1f6VH8YuyuGjk2tretUb8zi/R6xDbjV40dmNuZbV4POzDsAbCaixBJ2kwCsAPAGgOn2sekAXteioSAiLy9MflvVA3ch+mlCRExdR7QN4IbQIhlXTjjfSwLR7WL+G8CzRNQSwDoAV8OqDF4komsBbARwsR4V/SPfvYqe2QlzZjMYDHoRMujMvAhAUYpTk9SqEz6MgRQjHOuhaxIcMDrUDUtjRVQP9eG2khFEIc88sZgpGiS6yoU2uYrl6Rpc8uc7TX+3zgo63EX9EFJJENCPi2KDyqzlEln8TNF3Mjrqc7G2UX0fRMUf6175hOt36GxFus7/CUmtFlR0VtA5wRh0B0KSNwMnKoZXN1FKhyA0DVv6iOgTlgpIFVll0KP07sLuqzP4RzxsUa8eQjoEnB/DsnViGN6FE7Ex6GFrHaQjqHjesBHyciGF6lmHYczTmVYpbO6ssBMbgx41VBeMKBrIuBTVENpdR6Kmr060rBIaIMagOxD27lVqwpvZDIawIFtKwm4SjEF3wa3bq23tirDnnGZ4VlfDVl5RXFZBiBAoHHQYbZj2MnB9dnCPNgbdD1JrYgi8bq2x0h5zupu+utaa97Vrk2NYmb7EVT1wGMatP92XLZcTnO6dRc09FLS+sTDoYZn15oUo5dMo6aoD90otXAQVNx+2dBBBynSE+IfGwqADYjWjph3NtBC9Kir+hLgcH06klM08cV3fKTYG3Ykwbboc5qdmknAXi8wg6p4IOgbc0iHg54fckIaFrDDoYcLky0PErdqSikMPaPlceV93vN5azDwuxqAHhfI4dFNTBEbUbFzU9JVB52C+wMMDwxh0JwI0ktJRCMorCrXydMoNg2tCB6aulmxJa7DZ7jvQBVtbGoPuglum0NEyDtsSr2IDzhIz7lxj/CXdAi7no9KbCVNDWtu65Zr2/sxWYmHQg9rYQGqrOLUqCKOrYGiTq0ds6CpLHYgYVR09QH9b8QVjuXU0RIIkFgYdcDYAYUz+oLtmBnHcy3z43mVQm3xEBek0CEutnYbYGHQdBLxgaKBP100U/d1BjU+EIaWC1iEiXrLAEdpTlIg2AKgEUA+gjpmLiKgzgBcA9AewAcDFzFyuR83gCGSjgACeGQTZ8judcOxZhrApnWmNotiTDbKx4qWFfjozj2bmxGbRMwDMZuYhAGbb3w0uRGVAzuCdKL3b6Ggqicbej3MlLCFQIX5cLucBmGV/ngVgmn91sgf36JnM6OGGWU3SnaALsVei2OqVIYiwxaARNegM4D0imk9EN9jHujPzdvvzDgDdU91IRDcQUTERFZeVlflUN41ywrWxx5UGI7jTeVDLLoUhTjhOlUQyYWj5B+/vDz4NooCQDx3Aycy8lYi6AXifiFYln2RmJqKUKc7MTwJ4EgCKioq0vRUnf6OucKqotcyAaBk9XZOropIGocxfTuVBojnhOqNTcxpEJS+IItRCZ+at9v9SAK8CGAughIh6AoD9v1SXknEisDj0iHWzoxbfHjXC0OpPJuODrZrW2w8aV4NORG2JqH3iM4AzASwD8AaA6fZl0wG8rkvJbCRk5U05Ufp97uuLS8qVvE8ER6MTYoMUdsJWETZHxOXSHcCrdo2WB+A5Zn6XiL4C8CIRXQtgI4CL9akZDEGFH0WtNS1PtH6njvci0lIMgwkJet5ApPYyCPDhrgadmdcBOCbF8V0AJulQKkxEy+SoJ+QNklgTxryXedeIj3tFtFW9HEiEwxYjRxiMk66IHJ1kY/iXDGHIX0ETlTTwk6XDWNEmiIVBj9qej4D66JmoFKRkgm7NqEL3jE49Sw1ruCEbFj4LWgEXYmHQAT15SeeqdboIbtW6QB7bVIegFVCNpnfpq3Wa4bkDuseTwtQTVkFsDLouHJcLDWXb3w21GVi2AhGJFpCOQ4/ke8luMt0OieJSvyIYg55pRH3oMRusSYWzSvoU1racQUhmIoc9tC4T6EoDoV67lieLYQy6AzrLRXTChONlHGRaV+7bjulFxi3gqlOEwgAB9Rtw6yLo3mFWGXQ9G5rFH5MCFhl3C+iS62eWZIaMXdn2AAAgAElEQVRzg5n6741YGHTXgZUw+hsMhhgSlUFGE7YYcqJis0UzfDSKhT+i8s5EiVtrzysxe50pCXuFFRuDrgORVye9M73jZrvqV60z6EN7xRSCOPSgKyuTv8UwBt0FXbuc6yIwlbwOsukwUkFbHcWEccVJ5XHobs/TJNfrdVHBGPSQoi+kTa08f75I57ulVQ1hRWtwRsvCZ07nNO4iE2TDIqsMehhacFHbBSlq+ooQlspSlxsh+FweX9wDMDKjRzpiYdBdu23Sxkxf0YhSIzLoTKoSmZ/ilg/8tC5F0lbH9n5e83bQPmwzCUuMWBh0i/Cte2FIT9AGIgroivnWumdtRGY4x6mRkkyMDHq8yAaDF9dCla1kw/tkDn42qBPGoPtEx04q2VAw4oi2NWJCULcHrUMIkiASGIPugzCt2BZ0gfNK1PR1IopuAdnkz3xjQ3Y1T8HrpKRnXqYoxqC7EFhrWXbp2AyvV914ncwCUgHpmu2EqQOodQE8p01k9D02UIQNOhHlEtFCIvqX/X0AEc0lorVE9AIRtdSnphqiUt7D1jJz8hnqDS+M+XJqUcmQGSBKbsYw6+qlhf4jACuTvj8E4FFmHgygHMC1KhXzgvuuJ+EhqDCpMA/kpEKnttrivyXerVjYYvDrrAdd98QtvFAXQgadiHoDmArgKfs7AZgI4CX7klkApulQUBQtGxlr7Q7qkx0FAiueMvu1qtdCCK2zcDXtBqU6rczyud4QbaE/BuB2AA329y4A9jBznf19C4BeinULBUG1bGOWz1ISuV5DtNRNi67lpCP1Pn2tCR9eXA06EZ0DoJSZ58s8gIhuIKJiIiouKyuTEZF1RKpgGAwhRF8Iqb69cFUg0kI/CcC5RLQBwD9guVp+D6CAiPLsa3oD2JrqZmZ+kpmLmLmosLBQgcrhwvMypFq0iB7GJypOGJIqiu9LpFmkejwl6M10XA06M/+MmXszc38AlwL4kJkvBzAHwIX2ZdMBvK5NS0WoXjzJ1xoe0nemRttaFzqroJh1RKLmP5YiLtvwaZIbNH7i0O8AcCsRrYXlU5+pRiUZ9C2BFlShkg/Z07AMqUgkRvQacMqQXvxNrRoenx2OFxYWPURhhLSitclzv+QQzPwRgI/sz+sAjFWvkhwhTmPPRGnp2DCme9DdXi+IVMDe3XpuPUvv6K6wo/PGwo2ZKZph4ri+uAy6ljwWenZEGoW6l+WVkutyXpevXds7i0heEMUYdAe0FnyXEhezfJaSIOoYqWdm635mHtFRicj2tlzXsA9ZA0cVxqC7EMSLj2leizzpjEuUXDwJotJL8YWmyYaZnlzlhawy6DoGYKIYzuUF09UNHuV5LHr1jzaURyYplueVrDDo2hJZahp59CyZttCxCLZsM0oIkyeod6Y8XjyMiauAWBh0fTHY+nAfXPImL3rVRPzwvoiWeWtuxNPs6iMWBh3QOaqf+SzlpxUUWNy85uuFZAYVQeTn3sDmOYRDbtTqNAaHekA1NgZdhAUby4NWIXDCNNXZ7c71O/ej4kCtcrm6qK5rcL9IAtVGUqaRIqKDr3R3uVlXjzVqFYobWWHQ56wqBQDc+PcFnu7T0iUOaGusRHnZUVGlVO7izXsAAD941lvaukEgVNc1YMofPlEqd29VHZ75fAP2V9e5X2zjVglW1dYDAO5+fbkv3ZqTeGdvLd3u/V4XA7l1z0GU7PWeF5zE7q+px0I7P6jC1zaPAnIf/vfX8g9IQ8WBmsY8kWmywqDPtg26FAHsF6mzhfnrt1aitl68JelWsbyy0FqT7Yt1u3xolZ6tew5qkXvLC4s835PuvdR4SE8ZHnxnlVJ5H6wsAQCc8MBspXIBYH7EesEvL9ji6Xpm57K7tnQfNuw6gOF3v+tTMzmywqDrpPxALWo0dbV1Ud/grf2vI7Ih6AHB1SWVgT4/SCoOendjeWHVjr1a5augQVP+SzRAgsresTDoQdqG3ftrcJNid8O6nfvx5uJtkasovBLk4FKOwofHzQ+bCi9jL+vL9qt/vuI03rTrgFqBISEWBh3QE43iut6I/T/RhVUhMxkv/u6gW7yqKd64W6t8lblFNundbntj8TY5wRrJdCWcKNc791Urlfu+hzIbJWJj0HWhbz1md8lVdeoGVsoqDxWIMNh+NxV27qvR+nyVhslP5JCTGut3qm/pRpX/UTyOsE6yF2G96fDGLRqD7oNFikf0m6PS5bItqbUfltmqyjf58PC7dLlcVmxT5z/OzQmP4Yjc5L1wZPGMkxUGvVdBay1yt5TricBIoDL06cju7Rs/h6GFrhMRW63LdVBZpW7AMVd2pUFlGhyOrrTVszFLeCrETJEVBv3X5x8td6OOMHQPMlV2M/t1bXNIBw/3xdX4ezEgbmmQHDHRIk9hkdI5Uyci6LLJvTvpaeQFTVYYdD/oquVFxG5Q6ENNbu2FYcZsFCuKdO9scLd2jZ/zFLpJVLqFDE1JfmdecItDD5pYGHRX32kEjQegNlY22TjomqzjlSC7xCof3abloZ0cVfq9ZV0uOgiqCIVlzZmo4GrQiSifiOYR0WIiWk5E99nHBxDRXCJaS0QvEFFL/eo66Zn+XFgGAb2iUuucWFTd4UelQQ+RPW8k04vV6ZoAFE2L4I5IMa8GMJGZjwEwGsDZRDQOwEMAHmXmwQDKAVyrT01/yM7M1rIioAepDR5mdLpdGbbue1QrWTe8pHNcW4kqV0JITqIt5eKTgdzyl/y8jXC/NFeDzhb77K8t7D8GMBHAS/bxWQCmadFQAV6nuiejLw7dHZk8l86eqPTtqkJEo3EDO2vXI0jiGIlR1+DBortk8mTD6zUu3yll/VSmYX5jQh1xIsolokUASgG8D+AbAHuYObFk3RYAvfSo6J+ozqKsV6h3suHwItatpbPgF2cAANq3ynO8ThaV0ShN5EbAkIYp23opQ3X13hVP9zqS22Iq3T26XDlBI2TQmbmemUcD6A1gLIBhog8gohuIqJiIisvKyiTV9IePBrojPTvm6xFsM35QF63yRXGyfZ3btsSVJ/ZDbq4eA9lWoqIQsdXflO5zv0iCMNgJnTo4pe23ju4BwGML3YUWmvJVGN6TDjwNlTHzHgBzAJwIoICIEqWtN4Ctae55kpmLmLmosLDQl7Lp9XI+L9vSdWuVFPX37g4QUSXR6j15cFfP8oMgh0j5JgwLfnEG8nIIbVrmyivmgJclbz3F7Sv0sfpaUsDBDh7bt0BarhN3f3sEALUNqI6tW6T87BfZFrrbbbedOVRKripEolwKiajA/twawBkAVsIy7Bfal00H8LouJUVwqsdPP1K+InEqGHdNGa5FbuKU6kbEFeP6AQD6dWnjcqV3pAqIS8u/T+c2oRqCcuryTx3VU/nzOrfVEzg265qxALzNoBZ5D4kBYZWt34I2LfG9cX0BAG1aqavchybNnPaKU9n94cQh6NEhHxOG6mm8uiHSQu8JYA4RLQHwFYD3mflfAO4AcCsRrQXQBcBMfWr6o31+C1x38gDlrb0etsuldQu1chMZRnW3cPKI7gCAfB36arC8BPXjH3+56ngAwI8nq21JnTPSMugq1b3//JEA1OevDvktcGzfAgwsbKtUbsLOqfZPH2/3hD2N/bhc+/NzrMZYK5Uze206t22JlppcRW64OiiZeQmAY1McXwfLnx4JdI2BHdO7IwraqG1JJVqCurahU20kc4i8bxItcgOpT4Oi/p0AAG0VtvYAufzl9tsGFbbDlSf207KMrlVZKpZJmvItyfVZnd5Jq7xcfG9cX7yzdIe8Yg7PNRtcZAAtG816LMliMj2JFBaco6vAQa5V5ha1QIC2sN+wzEB0e9XawmaJNGwYbv1X3WA41BBRKtaSKXG9a77V0BARJWsMumyYmlC8uJRcd8kyBcPpdyZOeZmwJPLjdLVI9BidIGcWyKElbT3KFblWxocu1FFLVBTiYoXQNeuVQIGFSmeNQQf0zE7U4efVZXNkC4abPjkaDC8gYXQ8yNY1UzUcFZC7DjlEcr0qpwaD/V+ut+Z0Tv1gawIdhte00H0i6I7V1IrUINP+r9zHaUtWPqmC9MT6y7b8nVpe2tJW00C2JVOtgUxcoFpXHVEuQHJDJPiGk8i7IIkwXlXEwqADAi0ZqZcn8FzvYt1lNvq6VQ9e2h90VBQKlylIlhuOQiwg17vYQNESmJRw6WnyoetAyl0qYGqCmokaG4MugtzLE/F1e9BBpIaXkCtC4reobk3nkCZ3lsZoAR0FWRc6ksB7qKmIG0dWG0ENFPv89Q04axIsQNYYdNlWpKtcWf+x08QiTYNAORq7rl4rCVE3QmQGwiRKsVj3HVryrey4h6Ovu7HBoCt6xuN9QoEHEgq5PteELWpH20CjFpl6fZGKg1zsqf/q/bw6fZGhkSvgdtKBTCXsRo6k4XVHjwtSqhIWlBvU8tBZY9AB7xlC9PowDAKJXNvom/eosEi8uJZBUQCqm6e6K3YdBVmLy0VDaN2hQXelYiM34Gxa6D4R9ZfV1jP2etyV3b0VCXz+zS58tnankDwvL7p0b7X4xQl9BM6tKVG80qBd4lZu3yt8i2j88Ypte7Frn/d0cH9+RCoKjXK3V1Shpk5skTKhMibTEAnQ172/ug57q+p87ZeQCjNTNAPU2qvrjbr3PaVyv9pgbbh8+VNzPd0nkkmf+XwDvvhml4RWqUmEld3/9kqlrbNEV/tbv//E031uxmrVjkpsq6jC8fd/ICTPy2/SVeBUGwcA2Fddh4qD4g0Rkd9WVlmN7RVVuO2fiz3p4rionH3uN+9+7Ummda/ThDjr3Ipt4g0GEf45fwsA4Ma/z1cqV0d0lihZY9D//Mn6oFUQJjlvf/GNWMvfq1yVhkeXnzeho1dVRYzOxl3edr9xI9HSPf//PlcqN/FTTn7oQ2/3CVSWAJSuE6Nrm8OE1NtfXiJ8jxeD+v6KEnG5AmJLKqvw5brdwr0flWSNQZchqG5TsoFUqUJygVO7G5IyURnjxeIt2F9d534hxIzDos17Dl2vIeNUVonpqgvRyXsJSiurlD1bNn/pc1c5C964y9r79PuKW/4iGIPuRgDGKjm/BO0aEDFOMvHHYdgx5pM13nbQcvqZyT+nVnALNpGrPhUcm8kUTr2x5AbDu8vUr2IYNWavKs34M41BDwiRNTEAtYN3TVroHvwYrjPjpBc+y3xt2SLnUJav1tQl9rIFm1sKJFwjUSA5G7TMjadpCfv+xLFIdW0LLQXlckkqGcsVDgS1zz+0/L2OwbsokJPUnVhdosdYHqyp1yI37CTnW5Xuju4d9O7dGyciYdD3VtVibWkl9lfXYc+BmpTXyC60U113eOGrqq1vjCrw0opctrXC9ZpUz2tO8hM/+roM2ysOut4jUvkk71Q0+pfvo3RvFZg5bTrU1TegtLLadeZfcijorn3VqK6rBzOj4mAt6prt3cnMWLl9r3WNh4r4YE09Fmwqb2whrdi2F1W19dhzoAZbyg8I+8OTeWLON44V2+LNe7BTMGQyWc4VM+c1fk6kb+Jzyd4qNDQwdu9PnY+dEA2N9YrIcspeGzcPvL1KWYVZl6Tf7z9Y0ySvbt59AFW19U3KrAyfN0vbyqpab8tMp2HJlj1K5IjifUv1AGgeanjH2cPQukUO7n1zBUb3KcCizXvQu5P4/ogPvL0ST368rvH7gxeMxCsLt+If14/DhIfnYEv5IQO6r1o8k5zzv5/i+P6dsHRrBSYN7463lmzH3eeMwNUn9ceAn70tLKd55bR4cwV6dmyN/jPeanL8V9OOxi9eW+Z4bzLNd1Af+8DsJt/PPeYI9OiY3yRtRFiwsbzx85hfWyGG1548ADM/XY/j+3fCVeMHYOyAzihs3woX/PFzLNxkDSC+WLwFv7nwGKFnDL/73cbP9517FO55Y3mT8y1zc6QGep+btwnjBnTGGY9+jNvOHIpH3luNB84fiTtfXepJTrJBX7F9L7731Fz0KmiNF4o3O943yMM2cJc/NRdF/Trh6auPx87KarTIzUGPjvnIJUJODuGjr0uxr7oOu/bXNKaxCAPvfBvH9S3Agk17cGzfApw5ogcWbirHeytKGtPk95eOBiDecKo4WIszH/0Yo/sUYHVJJQ7YvZbnrj8BlVV1uO3FxdhfUycUwVSeVPk9+sFqfLymDF3btcT+6np8unYnzhjRHdsrDmLZ1r14/LJj0SI3B6WV1U0qAjeu/2sxvrxzErZXVOHMRz9u/K0je3XEc9ePw4pte3Hx//tCWF6Ccx//DAAwuk8BXvn++CY9RB1EwqA356F3VzV+To4ucCI3hxoLXXODNeMVq/B+uKq0iTEHgI9XO7eKWuRSk0GwRFz6W0u2AwB++a8V+OW/Vhx2n8iaGAnSxck2N+Zu5Ln4NWVD2BZvPrxnMvNTK0z0qw3ljWmiiubGHABq6uX84clp+Mh7qwHAszEHDu95iQ5meq2CijeWp5xLcd7oI/D6okPvz6urboFdASzctKdJZZBIkx/9YxEA7+u0NC+fl/059XwNp/KQ16whMn9j0/yUHHb4w+cWetIvwf6aeoxslq7MwJItFTj6nn+jU5sWUnITLNq8B+t27sPgbvKbU4sQCZeLCPtcutwi9eJ1fy0+7JjK8L5kdC2v6dTt1DVQNap3Ry1yo8TYAZ2l7ttZqWYWbLIx18kBTeMDTqVh3MAuWp7phfIDh8pV855umHAt4UTUh4jmENEKIlpORD+yj3cmoveJaI39v5N+ddOz54Cza0TWfLpNDpC1y68t2ip3owtOPv+WGnY4B/RVej+ePFTqvj9+9I1iTdw5Z9QRUvftdYkvH9hV3CWTCXSZMqexjBaaGiJ/vrJI6j63cjQg7TvTXxGIpFQdgJ8w8wgA4wD8gIhGAJgBYDYzDwEw2/4eWn57kZiv1ite/HTJlO+XH8BxIogpx/l5ue4XSTBpeDep+7SF+jmOT+Tg9rOPVP7IF288UblMP7iFqF5c1FtKbhAbQvTpLD7ulsyna52X4wiy/e5q0Jl5OzMvsD9XAlgJoBeA8wDMsi+bBWCaLiVVMO3YXlrkXnliP6n73MIGO+TLDW8EEY5497dHaJF7dK9ouXJyNUxN7NK2pXKZAHCipBvD7Rc+9J1RUnKDyLcFreXSdodL1Nn954+UkqsCT30ZIuoP4FgAcwF0Z+bt9qkdALqnuecGIiomouKyMm8z86LAfeceJXXfwVpnX+Qnt0+Ukus2p0W2AnJieM8O6BGhWOEPbp2gRa6OtUxkJ2258ex1J0jdp2uSmZtBP+3IQim5TvToKJdn3SruEwd1wZkjUppD7QgbdCJqB+BlALcwc5MhdLYCbVO+EWZ+kpmLmLmosFD9Swka2QzsFjObI+k2dFNH18CoTPe1qJ+eYZcJQ53zWUfJlpkbutYOOaZPgXKZsuFzun6jm8ulV4Gce0QH/QXGNdql6GFnYs0jodJNRC1gGfNnmfkV+3AJEfW0z/cEkPmFCyLMHWcPczwv29o76ogOUvf55Z5ve++pDPQQg+0FN1vVtpUen3/bVnqigB84/2gtcmUQmWj3p++N8Sy3k4trKU/3hqUeEJm5+kBAbheRKBcCMBPASmb+XdKpNwBMtz9PB/C6evXU8sGtpwatQiPfHdvH8XzyrE4vuPUYhnbXEwd7hEQLKlegkE4d2dOz3DunDHc836alnvGJi8bIDQi6UdiulRa5P5o0RItckffanA75znHe/broqfwLJOLLRX6fbPn1i0gL/SQAVwCYSESL7L8pAB4EcAYRrQEw2f6uBZlET8Xgbu3w86nOhV2GF//rRDxw/khMGtYNU0e5G6CpI3u6Gt7cHMLy+85Ke7695KDpRUW98f+u8N6CcqOzxODd+ce6G8DHLzvWs1yRSmveXZM8y3VboyUvNweL7j4Dc247zbNsJ7p1yMctk70Z32mj3cMofzRpCN7/sbfxBBFDpSNOe/r4/nju+hPw1V2Tlcq9eaL3Sk1m8HvqqJ7o2FqNHXNCJMrlU2YmZh7FzKPtv7eZeRczT2LmIcw8mZl361JyxtnDmhjis446fMBBNI2vO2Ugnrn6eIxsFkFxQpqJISIZaOyAzrjshL6YedXxeOKy43BJUR/87dqxWP3rb+G4vgW4P6nL3K9LGzx0oVgkQNtWeXj2uhPwn5+e1njslCFd0bVdK8ycfjyO6JiP2860YrU7tWkhZEiICGcd1aNJGOcjFx2Dh75zeBfxvyYMxIShhfjVNLEu/8MXjkIOoXGaOAB8d2xfXHBc6ggjkck4RIR1D0xB706tcdGY3vj+aYMO6XfqQPTt3EYqYqNb+3wsv+8s3PvtEZh35yR8dddkXHPSgMbzqaKMRCqtgjYtHZehSLiZ2rT01oK7ZfJQbHhwKnp2zMexfQsw65qx+PW0o5v0Ov9y1fE4ZUhXAMBvLx6dTlQjOTmEId3b43vj+grrITLYN2FIIW6ZPARf3TUZGx6civk/n9ykDDRHZPwlN4cwflDXJkbRTe95d7pX2lef1B+fzZiIDQ9OxT0porWeSzF4fPHxzr3rBBsenNr4+YnLjkNXTT2tJiQWD8rE35gxY9gPm3bt5wPVdczMvL5sH5dUHOT91bU86/P1vK+q1rO86tp63llZlfLchytLuGTvQV/6JtPQ0MDFG3ZzQ0OD1P17D9bwf74u5dq6+ibHa+vq+Y1FW7m+3rvcA9V1vGtfdZNjX+/YyyUV/n/3hp370sqpOFjDNc1+hxcqDtbwhp37mhzbUn6AP1ixg+esKpGWy8xcX9/AO2y9F28u5/kbd/PBmjqp99bQ0MBbyw/w2tJKZubD8uie/TVS+bY5tXX1jc+Qoaq2jr9av6vxe01dPb+2cAvX1NVzQ0MD19bV8/vLd3DFwRrpZzQ0NPDcdbu4oaGBV26v4C++2SmdB/YcqOFNu/YzM3P5/mquqq1r8pzn527kxZvLpWSXVBzkVxds4U9Wl3GZbRv2V9fywk3l/MJXm3jPAfk08AOAYhawscQZDOgvKiri4uLDp9cbDAaDIT1ENJ+ZXae2xmYtF4PBYMh2jEE3GAyGmGAMusFgMMQEY9ANBoMhJhiDbjAYDDHBGHSDwWCICcagGwwGQ0wwBt1gMBhiQkYnFhFRJYCvJW/vC2CTQnUSdARw+C7H4ZQbJV2jJjdKuuqSGyVdoybXr8wjmdl9kSKR6aSq/iA4fTXNvWWadHoyKnKjpGvU5EZJV5MG0ZPrV6ao7YySy2WPJrlvRkhulHSNmtwo6apLbpR0jZpcXbo2IdMul2IWWI9A9b0Gg8EQZUTtX6Zb6E8GdK/BYDBEGSH7l9EWusFgMBj0ESUfum+I6Gwi+pqI1hLRDPvYs/axZUT0tL1/qgq5M4loMREtIaKX7E22fctNOvcHItqnSNdniGh90o5U7rsjiMklIrqfiFYT0UoiulmR3E+SdN1GRK8pkjuJiBbYcj8losEKZE60ZS4jollE5HmrKTtflhLRsqRjnYnofSJaY//3tON2GpkXEdFyImogIlnXaCq5DxPRKrssvEpEnne9TiP3V7bMRUT0HhG5b9MkIDfp3E+IiImoqwJd7yWirc12fVOPjlFiBSPCZ8MKb1wLYIZ97If2dwbQVUJmLoBvAAwE0BLAYgAjAEwBQPbf8wC+r0huh6Rrfpf4HX7l2ueKAPwNwD5Fuj4D4EIf7yud3KsB/BVAjn1dN1VpkHTNywCuVKTvagDD7WtuAvCMApmbAQy1r/klgGsl0ncCgOMALEs69puksjEDwEMKZA4HcCSAjwAUSeaFVHLPBJBnf37Iq64OcpPL2M0A/qRCrn28D4B/A9gIj/Ymja73ArhNJk29/IWuhU5EuQCeAPAtWAXiu0Q0AsBnsPYu3SgpeiyAtcy8jplrAPwDwHlsbafHbKX6PABed/pNJ3ev/XsIQGtYFZFvuXb6PAzgdo/y0sqUkCMq9/sAfsnMDQDAzKUq9SWiDgAmAvDaQk8nlwF0sK/pCGCbT5nfAVDDzKvta963j3mCmT8G0HyLx/MAzLI/zwIwza9MZl7JzLLzRJzkvsfMdfbXL+G9jKWTuzfpa1t4L2Pp0hYAHoVVxlTK1E7oDDrSG8iFzLzBh9xesFpLCbbYxwAAtqvlCgDvqpJLRH8BsAPAMAD/q0juDwG8wczbPcpz1BXA/Xb39VEi8rr5YTq5gwBcQkTFRPQOEXndkdfxncEyYrObFWw/cq8D8DYRbYGVF7xsfJ5KZg8AeUnuiwthtfxU0D0pD+wA4L7ZZzi4BsA7qoTZLr3NAC4HcLcimecB2MrMi1XIS+KHdhl72quLTJQwGnS3QqyL/wPwMTN/okogM18N4AgAKwFcokBkGwAXwXvl4MbPYFU6xwPoDOAORXJbAahiK9zqzwCeViQ3wXdhuclU8WMAU5i5N4C/wHKV+YEBXArgUSKaB6ASQL1PmYc/xOpdhj66gYjuAlAH4FlVMpn5LmbuY8v8oV95RNQGwJ1QVDkk8UdYDZzRALYD+K1i+QDCadB1sRVNW0e97WMgonsAFAK4VaVcAGDmehzqfvuV+w2AwQDWEtEGAG2IaK1fXZl5u+11qoZlyMYq0HUrrMr4FfvYqwBGKZILe6BqLIC3PMpMJ7cEwDHMPNc+9gKA8X51ZeYvmPkUZh4L4GNYfnoVlBBRTwCw/3t1Z2UUIroKwDkALrcrINU8Cwl3VgoGARgAYLFdxnoDWEBEPfwIZeYSZq633Y9/hvcyJkQYDbqjgfTBVwCGENEAImoJq+X0BhFdB+AsAN9N+HoVyR0MNPrQzwWwSoHc15i5BzP3Z+b+AA4ws5dIjHS6JgwDwXJjHDbiLyMXlm/7dPuaU+HdmKWTC1jui38xc5VHmU5yOxLRUPuaM2D1rHzJJKJuAGC7se4A8CcJfVPxBoDp9ufpAF5XJFc5RHQ2LH/0ucx8QKHcZBfeefBexg6DmZcyc7ekMrYFwCzI1nEAAAY+SURBVHHMvMOP3EQZszkf3suYGLpHXb3+AcgDsA5WLZmIFjgq6fwGSES52PdOgWVUvgFwl32szv6+yP67269cWBXlZwCW2i/uWSSNyPvRt9l5T1EuDmnwYZKufwfQTpHcAlgt6KUAvoDVAlaSBrAiMc72kc9S6Xu+retiW/5ABTIfhlUxfA3gFkldn4fVTa+FZWCuBdAFwGwAawB8AKCzApnn25+rYfVY/q1I17Ww3KiJMiYTjZJK7st2nl0Ca2p9LxVym53fAO9RLql0/Zudt5bAqox7yuZdp79QTiyyYzQfgxUK9jQz309WDPPtsAaaSgG8zczXBaimwWAwhIpQGnSDwWAweCeMPnSDwWAwSGAMusFgMMQEY9ANBoMhJoTKoBPRNHsxnGFB62IwGAxRI1QGHdbMv0/t/8LY65sYDAZDVhMag07W8rInw4rZvNQ+dhoRfUxEb5G1LOmfiCjHPrePiH5LRIsBnBic5gaDwRAOQmPQYc30epetlel2EdEY+/hYAP8Na+XFQQAusI+3BTCXmY9h5k8zrq3BYDCEjDAZ9O/CWvME9v+E22UeWysv1sOagXWyfbwe1kwxg8FgMMCaZh84RNQZ1rrWI4mIYc0QZVjTxpvPfEp8r7KNvMFgMBgQnhb6hQD+xsz92FoUpw+A9QBOATDWXvAoB9YStMa9YjAYDCkIi0H/LqzlVZN52T7+FYDHYS1wtD7FdQaDwWBAyNdyIaLTYO3Dd07QuhgMBkPYCUsL3WAwGAw+CXUL3WAwGAziBNZCJ6I+RDSHiFYQ0XIi+pF9vDMRvU9Ea+z/nezjw4joCyKqJqLbUsjLJaKFRPSvTP8Wg8FgCANBulzqAPyEmUcAGAfgB0Q0AsAMWDu5D4G1I8sM+/rdAG4G8EgaeT+Cty3DDAaDIVYEZtDZ2ph4gf25EpYx7gVrxugs+7JZsPa4BDOXMvNXsLZ1agIR9QYwFcBTGVDdYDAYQkkoBkWJqD+AYwHMBdCdmbfbp3YA6C4g4jFY29PJbPJsMBgMsSBwg24vyvUyrA109yafY2vE1nHUlojOAVDKzPP1aWkwGAzhJ1CDTkQtYBnzZ5n5FftwCRH1tM/3hLUhtBMnATiXiDbAWgNmIhH9XZPKBoPBEFqCjHIhADMBrGTm3yWdegPAdPvzdACvO8lh5p8xc29m7g9r2d0Pmfl7GlQ2GAyGUBNYHDoRnQzgEwBLccj3fScsP/qLAPoC2AjgYmbeTUQ9ABQD6GBfvw/AiGQ3jZlZajAYshkzschgMBhiQuCDogaDwWBQgzHoBoPBEBOMQTcYDIaYYAy6wWAwxARj0A0GgyEmGINuCDVEVEBEN9mfjyCilzQ+azQRTdEl32DQjTHohrBTAOAmAGDmbcx8ocZnjQZgDLohspg4dEOoIaJ/wFqB82sAawAMZ+ajiegqWCtxtgUwBNayyi0BXAGgGsAUe0LaIABPACgEcADA9cy8ioguAnAPgHoAFQAmA1gLoDWArQD+B9Yetr8HkA/gIICrmflrD8/+CMBiAKcCyANwDTPP05NSBgMAZjZ/5i+0fwD6A1iW4vNVsAxwe1jGugLAjfa5R2Et9gZYa+oPsT+fAGtpCMCaodzL/lyQJPPxpGd3AJBnf54M4GWPz/4IwJ/tzxMSups/86frL09VxWAwBMActtbSrySiCgBv2seXAhhlr+Q5HsA/raWDAACt7P+fAXiGiF4E8ApS0xHALCIaAmvVzxaiz0667nkAYOaPiagDERUw8x7J32swOGIMuiHKVCd9bkj63gArb+cA2MPMo5vfyMw3EtEJsDZGmU9EY1LI/xUsw32+vWb/Rx6e3fio5o92+D0Ggy/MoKgh7FTCcm14hq2F29bb/nKQxTH250HMPJeZ7wZQBqBPimd1hOVPByw3iwyX2M87GUAFM1dIyjEYXDEG3RBqmHkXgM+IaBmAhyVEXA7gWiJaDGA5rAFWAHiYiJbacj+HNXg5B8AIIlpERJcA+A2A/yGihZDvzVbZ9/8JwLWSMgwGIUyUi8GgCTvK5TZmLg5aF0N2YFroBoPBEBNMC91gMBhigmmhGwwGQ0wwBt1gMBhigjHoBoPBEBOMQTcYDIaYYAy6wWAwxARj0A0GgyEm/H/9jZPKe2QWYAAAAABJRU5ErkJggg==\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "#正常的时序数据可视化\r\n", + "fig, ax = plt.subplots()\r\n", + "df_small_noise.plot(legend=False, ax=ax)\r\n", + "plt.show()\r\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": false + }, + "source": [ + "**带有异常的时序数据如下:**\n", + "\n", + "训练好模型后,我们将使用以下数据进行测试,并查看数据中的突然跳升是否被检测为异常。" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "#异常的时序数据可视化\r\n", + "fig, ax = plt.subplots()\r\n", + "df_daily_jumpsup.plot(legend=False, ax=ax)\r\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": false + }, + "source": [ + "# 训练数据预处理\n", + "\n", + "* 我们的训练数据包含了14天的采样,每天每隔5分钟采集一次数据,所以:\n", + "* 每天包含 24 * 60 / 5 = 288 个timestep \n", + "* 总共14天 288 * 14 = 4032 个数据\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "训练数据总量: 4032\n" + ] + } + ], + "source": [ + "#初始化并保存我们得到的均值和方差,用于初始化数据。\r\n", + "training_mean = df_small_noise.mean()\r\n", + "training_std = df_small_noise.std()\r\n", + "df_training_value = (df_small_noise - training_mean) / training_std\r\n", + "print(\"训练数据总量:\", len(df_training_value))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": false + }, + "source": [ + "# 创建序列\n", + "\n", + "从训练数据中创建组合时间步骤为288的连续数据值的序列。\n" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "#时序步长\r\n", + "TIME_STEPS = 288 \r\n", + "\r\n", + "class MyDataset(paddle.io.Dataset):\r\n", + " \"\"\"\r\n", + " 步骤一:继承paddle.io.Dataset类\r\n", + " \"\"\"\r\n", + " def __init__(self,data,time_steps):\r\n", + " \"\"\"\r\n", + " 步骤二:实现构造函数,定义数据读取方式,划分训练和测试数据集\r\n", + " 注意:我们这个是不需要label的哦\r\n", + " \"\"\"\r\n", + " super(MyDataset, self).__init__()\r\n", + " self.time_steps = time_steps\r\n", + " self.data = paddle.to_tensor(self.transform(data),dtype='float32')\r\n", + "\r\n", + " def transform(self,data):\r\n", + " '''\r\n", + " 构造时序数据\r\n", + " '''\r\n", + " output = []\r\n", + " for i in range(len(data) - self.time_steps):\r\n", + " output.append(np.reshape(data[i : (i + self.time_steps)],(1,self.time_steps)))\r\n", + " return np.stack(output)\r\n", + "\r\n", + " def __getitem__(self, index):\r\n", + " \"\"\"\r\n", + " 步骤三:实现__getitem__方法,定义指定index时如何获取数据,并返回单条数据(训练数据)\r\n", + " \"\"\"\r\n", + " data = self.data[index]\r\n", + " label = self.data[index]\r\n", + " return data,label\r\n", + "\r\n", + " def __len__(self):\r\n", + " \"\"\"\r\n", + " 步骤四:实现__len__方法,返回数据集总数目\r\n", + " \"\"\"\r\n", + " return len(self.data)\r\n", + "\r\n", + "# 实例化数据集\r\n", + "train_dataset = MyDataset(df_training_value.values,TIME_STEPS)\r\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": false + }, + "source": [ + "## 模型组网\n", + "\n", + "用paddle.nn下的API,Layer,Conv1d、rlue完成网络的搭建。" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "\r\n", + "class AutoEncoder(paddle.nn.Layer):\r\n", + " def __init__(self):\r\n", + " super(AutoEncoder, self).__init__()\r\n", + " self.conv0 = paddle.nn.Conv1d(in_channels=1,out_channels=32,kernel_size=7,stride=2)\r\n", + " self.conv1 = paddle.nn.Conv1d(in_channels=32,out_channels=16,kernel_size=7,stride=2)\r\n", + " self.convT0 = paddle.nn.ConvTranspose1d(in_channels=16,out_channels=32,kernel_size=7,stride=2)\r\n", + " self.convT1 = paddle.nn.ConvTranspose1d(in_channels=32,out_channels=1,kernel_size=7,stride=2)\r\n", + "\r\n", + " def forward(self, x):\r\n", + " x = self.conv0(x)\r\n", + " x = F.relu(x)\r\n", + " x = F.dropout(x,0.2)\r\n", + " x = self.conv1(x)\r\n", + " x = F.relu(x)\r\n", + " x = self.convT0(x)\r\n", + " x = F.relu(x)\r\n", + " x = F.dropout(x,0.2)\r\n", + " x = self.convT1(x)\r\n", + " return x" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": false + }, + "source": [ + "## 模型训练\n", + "\n", + "接下来,我们用一个循环来进行模型的训练,我们将会:\n", + "\n", + "- 使用paddle.optimizer.Adam优化器来进行优化。\n", + "\n", + "- 使用paddle.nn.loss.MSELoss来计算损失值。 \n", + "\n", + "- 使用paddle.io.DataLoader来加载数据并组建batch。\n" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "训练开始\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 200/200 [01:02<00:00, 3.22it/s]\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import tqdm\r\n", + "#参数设置\r\n", + "epoch_num = 200\r\n", + "batch_size = 128\r\n", + "learning_rate = 0.001\r\n", + "\r\n", + "def train():\r\n", + " print('训练开始')\r\n", + " #实例化模型\r\n", + " model = AutoEncoder()\r\n", + " #将模型转换为训练模式\r\n", + " model.train()\r\n", + " #设置优化器,学习率,并且把模型参数给优化器\r\n", + " opt = paddle.optimizer.Adam(learning_rate=learning_rate,parameters=model.parameters())\r\n", + " #设置损失函数\r\n", + " mse_loss = paddle.nn.loss.MSELoss()\r\n", + " #设置数据读取器\r\n", + " data_reader = paddle.io.DataLoader(train_dataset,\r\n", + " places=[paddle.CPUPlace()],\r\n", + " batch_size=batch_size,\r\n", + " shuffle=True,\r\n", + " drop_last=True,\r\n", + " num_workers=0)\r\n", + " history_loss = []\r\n", + " iter_epoch = []\r\n", + " for epoch in tqdm.tqdm(range(epoch_num)):\r\n", + " for batch_id, data in enumerate(data_reader()): \r\n", + " x = data[0]\r\n", + " y = data[1]\r\n", + " out = model(x)\r\n", + " avg_loss = mse_loss(out,(y[:,:,:-1])) #输输入的数据进过卷积会丢掉最后一个数据所以只剩287\r\n", + " avg_loss.backward()\r\n", + " opt.step()\r\n", + " opt.clear_grad()\r\n", + " iter_epoch.append(epoch)\r\n", + " history_loss.append(avg_loss.numpy()[0])\r\n", + " #绘制loss\r\n", + " plt.plot(iter_epoch,history_loss, label = 'loss')\r\n", + " plt.legend()\r\n", + " plt.xlabel('iters')\r\n", + " plt.ylabel('Loss')\r\n", + " plt.show()\r\n", + " #保存模型参数\r\n", + " paddle.save(model.state_dict(),'model')\r\n", + "\r\n", + "train()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": false + }, + "source": [ + "## 探测异常时序\n", + "\n", + "我们将用我们训练好的模型探测异常时序:\n", + "\n", + "1. 使用自编码器计算出无异常时序数据集里的所有重建损失\n", + "\n", + "2. 找出最大重建损失并且以这个为阀值,模型重建损失超出这个值则输入的数据为异常时序 \n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "阀值: 0.028311959\n" + ] + } + ], + "source": [ + "#计算阀值\r\n", + "\r\n", + "param_dict,_ = paddle.load('model.pdparams') #读取保存的参数\r\n", + "model = AutoEncoder() \r\n", + "model.load_dict(param_dict) #加载参数\r\n", + "model.eval() #预测\r\n", + "total_loss = []\r\n", + "datas = []\r\n", + "#预测所有正常时序\r\n", + "mse_loss = paddle.nn.loss.MSELoss()\r\n", + "#这里设置batch_size为1,单独求得每个数据的loss\r\n", + "data_reader = paddle.io.DataLoader(train_dataset,\r\n", + " places=[paddle.CPUPlace()],\r\n", + " batch_size=1,\r\n", + " shuffle=False,\r\n", + " drop_last=False,\r\n", + " num_workers=0)\r\n", + "for batch_id, data in enumerate(data_reader()):\r\n", + " x = data[0]\r\n", + " y = data[1]\r\n", + " out = model(x)\r\n", + " avg_loss = mse_loss(out,(y[:,:,:-1]))\r\n", + " total_loss.append(avg_loss.numpy()[0])\r\n", + " datas.append(batch_id)\r\n", + "\r\n", + "plt.bar(datas, total_loss)\r\n", + "plt.ylabel(\"reconstruction loss\")\r\n", + "plt.xlabel(\"data samples\")\r\n", + "plt.show()\r\n", + "\r\n", + "# 获取重建loss的阀值.\r\n", + "threshold = np.max(total_loss)\r\n", + "print(\"阀值:\", threshold)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": false + }, + "source": [ + "## AutoEncoder 对异常数据的重构\n", + "\n", + "为了好玩,让我们先看看我们的模型是如何重构第一个组数据。这是我们训练数据集第一天起的288步时间。" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "ename": "SystemExit", + "evalue": "", + "output_type": "error", + "traceback": [ + "An exception has occurred, use %tb to see the full traceback.\n", + "\u001b[0;31mSystemExit\u001b[0m\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/IPython/core/interactiveshell.py:3273: UserWarning: To exit: use 'exit', 'quit', or Ctrl-D.\n", + " warn(\"To exit: use 'exit', 'quit', or Ctrl-D.\", stacklevel=1)\n" + ] + } + ], + "source": [ + "import sys\r\n", + "param_dict,_ = paddle.load('model.pdparams') #读取保存的参数\r\n", + "model = AutoEncoder() \r\n", + "model.load_dict(param_dict) #加载参数\r\n", + "model.eval() #预测\r\n", + "data_reader = paddle.io.DataLoader(train_dataset,\r\n", + " places=[paddle.CPUPlace()],\r\n", + " batch_size=128,\r\n", + " shuffle=False,\r\n", + " drop_last=False,\r\n", + " num_workers=0)\r\n", + "for batch_id, data in enumerate(data_reader()):\r\n", + " x = data[0]\r\n", + " out = model(x)\r\n", + " step = np.arange(287)\r\n", + " plt.plot(step,x[0,0,:-1].numpy())\r\n", + " plt.plot(step,out[0,0].numpy())\r\n", + " plt.show()\r\n", + " sys.exit()\r\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": false + }, + "source": [ + "* 可以看出对正常数据的重构效果十分不错\n", + "* 接下来我们对异常数据进行探测\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "df_test_value = (df_daily_jumpsup - training_mean) / training_std\r\n", + "fig, ax = plt.subplots()\r\n", + "df_test_value.plot(legend=False, ax=ax)\r\n", + "plt.show()\r\n", + "#这是测试集里面的异常数据,可以看到第11~~12天发生了异常" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "142\n", + "[2990, 2991, 2992, 2993, 2994, 2995, 2997, 2998, 3000, 3001, 3002, 3003, 3004, 3005, 3007, 3008, 3009, 3010, 3011, 3012, 3013, 3014, 3015, 3016, 3017, 3018, 3019, 3020, 3021, 3022, 3023, 3024, 3025, 3026, 3027, 3028, 3029, 3030, 3031, 3032, 3033, 3034, 3035, 3036, 3037, 3038, 3039, 3040, 3041, 3042, 3043, 3044, 3045, 3046, 3047, 3048, 3049, 3050, 3051, 3052, 3053, 3054, 3055, 3056, 3057, 3058, 3059, 3060, 3061, 3062, 3063, 3064, 3065, 3066, 3067, 3068, 3069, 3070, 3071, 3072, 3073, 3074, 3075, 3076, 3077, 3078, 3079, 3080, 3081, 3082, 3083, 3084, 3085, 3086, 3087, 3088, 3089, 3090, 3091, 3092, 3093, 3094, 3095, 3096, 3097, 3098, 3099, 3100, 3101, 3102, 3103, 3104, 3105, 3106, 3107, 3108, 3109, 3110, 3111, 3112, 3113, 3114, 3115, 3116, 3117, 3118, 3119, 3120, 3121, 3122, 3123, 3124, 3125, 3126, 3127, 3128, 3129, 3130, 3131, 3132, 3133, 3134]\n" + ] + } + ], + "source": [ + "#探测异常数据\r\n", + "threshold = 0.033 #阀值设定,即刚才求得的值\r\n", + "param_dict,_ = paddle.load('model.pdparams') #读取保存的参数\r\n", + "model = AutoEncoder() \r\n", + "model.load_dict(param_dict) #加载参数\r\n", + "model.eval() #预测\r\n", + "mse_loss = paddle.nn.loss.MSELoss()\r\n", + "\r\n", + "def create_sequences(values, time_steps=288):\r\n", + " '''\r\n", + " 探测数据预处理\r\n", + " '''\r\n", + " output = []\r\n", + " for i in range(len(values) - time_steps):\r\n", + " output.append(values[i : (i + time_steps)])\r\n", + " return np.stack(output)\r\n", + "\r\n", + "\r\n", + "x_test = create_sequences(df_test_value.values)\r\n", + "x = paddle.to_tensor(x_test).astype('float32')\r\n", + "\r\n", + "abnormal_index = [] #记录检测到异常时数据的索引\r\n", + "\r\n", + "for i in range(len(x_test)):\r\n", + " input_x = paddle.reshape(x[i],(1,1,288))\r\n", + " out = model(input_x)\r\n", + " loss = mse_loss(input_x[:,:,:-1],out)\r\n", + " if loss.numpy()[0]>threshold:\r\n", + " #开始检测到异常时序列末端靠近异常点,所以我们要加上序列长度,得到真实索引位置\r\n", + " abnormal_index.append(i+288)\r\n", + "\r\n", + "#不再检测异常时序列的前端靠近异常点,所以我们要减去索引长度得到异常点真实索引,为了结果明显,我们给异常位置加宽40单位\r\n", + "abnormal_index = abnormal_index[:(-288+40)]\r\n", + "print(len(abnormal_index))\r\n", + "print(abnormal_index)\r\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "#异常检测结果可视化\r\n", + "df_subset = df_daily_jumpsup.iloc[abnormal_index]\r\n", + "fig, ax = plt.subplots()\r\n", + "df_daily_jumpsup.plot(legend=False, ax=ax)\r\n", + "df_subset.plot(legend=False, ax=ax, color=\"r\")\r\n", + "plt.show()" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "PaddlePaddle 1.8.4 (Python 3.5)", + "language": "python", + "name": "py35-paddle1.2.0" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.4" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +}