├── DRNet-3_7Layer_ERCOT.ipynb ├── DRNet-4_11Layer_ERCOT.ipynb ├── DRNet-4_7Layer_ERCOT.ipynb ├── DRNet3_11Layer_ERCOT.ipynb ├── DenseNet_11Layer_ERCOT.ipynb ├── DenseNet_7Layer_ERCOT.ipynb ├── Fused_DRNet-1_ERCOT.ipynb ├── Jena_DRNet-3.ipynb ├── Jena_DenseNet.ipynb ├── Jena_FusedDRNet-1.ipynb ├── Jena_PureBi-LSTM.ipynb ├── Jena_ResNet.ipynb ├── MRN_11Layer_ERCOT.ipynb ├── MRN_7Layer_ERCOT.ipynb ├── MultiResidual_ERCOT.ipynb ├── NotWeather_fused.ipynb ├── Notweather_Attention_Fused.ipynb ├── README.md ├── ResNet_ERCOT.ipynb ├── Weather_Attention_Fused_DRNet-1.ipynb └── Weather_Fused.ipynb /DenseNet_11Layer_ERCOT.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": {}, 7 | "outputs": [ 8 | { 9 | "name": "stderr", 10 | "output_type": "stream", 11 | "text": [ 12 | "Using TensorFlow backend.\n", 13 | "WARNING: Logging before flag parsing goes to stderr.\n", 14 | "W0306 13:34:57.630302 14976 deprecation_wrapper.py:119] From C:\\Users\\Smartgrid_ML\\Anaconda3\\envs\\tensorflow-gpu\\lib\\site-packages\\keras\\backend\\tensorflow_backend.py:74: The name tf.get_default_graph is deprecated. Please use tf.compat.v1.get_default_graph instead.\n", 15 | "\n", 16 | "W0306 13:34:57.630302 14976 deprecation_wrapper.py:119] From C:\\Users\\Smartgrid_ML\\Anaconda3\\envs\\tensorflow-gpu\\lib\\site-packages\\keras\\backend\\tensorflow_backend.py:517: The name tf.placeholder is deprecated. Please use tf.compat.v1.placeholder instead.\n", 17 | "\n", 18 | "W0306 13:34:57.634303 14976 deprecation_wrapper.py:119] From C:\\Users\\Smartgrid_ML\\Anaconda3\\envs\\tensorflow-gpu\\lib\\site-packages\\keras\\backend\\tensorflow_backend.py:4138: The name tf.random_uniform is deprecated. Please use tf.random.uniform instead.\n", 19 | "\n" 20 | ] 21 | }, 22 | { 23 | "name": "stdout", 24 | "output_type": "stream", 25 | "text": [ 26 | "(26311, 1)\n", 27 | "Dataset mean = 0.36639967284314107 var = 0.04237001272906482\n", 28 | "Maximum value = [19099.07421875]\n" 29 | ] 30 | }, 31 | { 32 | "name": "stderr", 33 | "output_type": "stream", 34 | "text": [ 35 | "W0306 13:35:00.779286 14976 deprecation.py:323] From C:\\Users\\Smartgrid_ML\\Anaconda3\\envs\\tensorflow-gpu\\lib\\site-packages\\keras\\backend\\tensorflow_backend.py:3217: add_dispatch_support..wrapper (from tensorflow.python.ops.array_ops) is deprecated and will be removed in a future version.\n", 36 | "Instructions for updating:\n", 37 | "Use tf.where in 2.0, which has the same broadcast rule as np.where\n", 38 | "W0306 13:35:00.796290 14976 deprecation_wrapper.py:119] From C:\\Users\\Smartgrid_ML\\Anaconda3\\envs\\tensorflow-gpu\\lib\\site-packages\\keras\\optimizers.py:790: The name tf.train.Optimizer is deprecated. Please use tf.compat.v1.train.Optimizer instead.\n", 39 | "\n" 40 | ] 41 | }, 42 | { 43 | "name": "stdout", 44 | "output_type": "stream", 45 | "text": [ 46 | "__________________________________________________________________________________________________\n", 47 | "Layer (type) Output Shape Param # Connected to \n", 48 | "==================================================================================================\n", 49 | "input_1 (InputLayer) (None, 24, 1) 0 \n", 50 | "__________________________________________________________________________________________________\n", 51 | "bidirectional_1 (Bidirectional) (None, 24, 32) 2304 input_1[0][0] \n", 52 | "__________________________________________________________________________________________________\n", 53 | "bidirectional_2 (Bidirectional) (None, 24, 32) 6272 bidirectional_1[0][0] \n", 54 | "__________________________________________________________________________________________________\n", 55 | "concatenate_1 (Concatenate) (None, 24, 33) 0 bidirectional_2[0][0] \n", 56 | " input_1[0][0] \n", 57 | "__________________________________________________________________________________________________\n", 58 | "bidirectional_3 (Bidirectional) (None, 24, 32) 6400 concatenate_1[0][0] \n", 59 | "__________________________________________________________________________________________________\n", 60 | "bidirectional_4 (Bidirectional) (None, 24, 32) 6272 bidirectional_3[0][0] \n", 61 | "__________________________________________________________________________________________________\n", 62 | "concatenate_2 (Concatenate) (None, 24, 66) 0 bidirectional_4[0][0] \n", 63 | " concatenate_1[0][0] \n", 64 | " input_1[0][0] \n", 65 | "__________________________________________________________________________________________________\n", 66 | "bidirectional_5 (Bidirectional) (None, 24, 32) 10624 concatenate_2[0][0] \n", 67 | "__________________________________________________________________________________________________\n", 68 | "bidirectional_6 (Bidirectional) (None, 24, 32) 6272 bidirectional_5[0][0] \n", 69 | "__________________________________________________________________________________________________\n", 70 | "bidirectional_7 (Bidirectional) (None, 24, 32) 6272 bidirectional_6[0][0] \n", 71 | "__________________________________________________________________________________________________\n", 72 | "bidirectional_8 (Bidirectional) (None, 24, 32) 6272 bidirectional_7[0][0] \n", 73 | "__________________________________________________________________________________________________\n", 74 | "concatenate_3 (Concatenate) (None, 24, 132) 0 bidirectional_6[0][0] \n", 75 | " concatenate_1[0][0] \n", 76 | " concatenate_2[0][0] \n", 77 | " input_1[0][0] \n", 78 | "__________________________________________________________________________________________________\n", 79 | "concatenate_4 (Concatenate) (None, 24, 264) 0 bidirectional_8[0][0] \n", 80 | " concatenate_1[0][0] \n", 81 | " concatenate_2[0][0] \n", 82 | " concatenate_3[0][0] \n", 83 | " input_1[0][0] \n", 84 | "__________________________________________________________________________________________________\n", 85 | "bidirectional_9 (Bidirectional) (None, 24, 32) 35968 concatenate_4[0][0] \n", 86 | "__________________________________________________________________________________________________\n", 87 | "bidirectional_10 (Bidirectional (None, 24, 32) 6272 bidirectional_9[0][0] \n", 88 | "__________________________________________________________________________________________________\n", 89 | "concatenate_5 (Concatenate) (None, 24, 528) 0 bidirectional_10[0][0] \n", 90 | " concatenate_1[0][0] \n", 91 | " concatenate_2[0][0] \n", 92 | " concatenate_3[0][0] \n", 93 | " concatenate_4[0][0] \n", 94 | " input_1[0][0] \n", 95 | "__________________________________________________________________________________________________\n", 96 | "bidirectional_11 (Bidirectional (None, 64) 143616 concatenate_5[0][0] \n", 97 | "__________________________________________________________________________________________________\n", 98 | "dense_1 (Dense) (None, 24) 1560 bidirectional_11[0][0] \n", 99 | "__________________________________________________________________________________________________\n", 100 | "dense_2 (Dense) (None, 1) 25 dense_1[0][0] \n", 101 | "==================================================================================================\n", 102 | "Total params: 238,129\n", 103 | "Trainable params: 238,129\n", 104 | "Non-trainable params: 0\n", 105 | "__________________________________________________________________________________________________\n", 106 | "None\n" 107 | ] 108 | }, 109 | { 110 | "name": "stderr", 111 | "output_type": "stream", 112 | "text": [ 113 | "W0306 13:35:10.236998 14976 deprecation_wrapper.py:119] From C:\\Users\\Smartgrid_ML\\Anaconda3\\envs\\tensorflow-gpu\\lib\\site-packages\\keras\\backend\\tensorflow_backend.py:986: The name tf.assign_add is deprecated. Please use tf.compat.v1.assign_add instead.\n", 114 | "\n", 115 | "W0306 13:35:10.869204 14976 deprecation_wrapper.py:119] From C:\\Users\\Smartgrid_ML\\Anaconda3\\envs\\tensorflow-gpu\\lib\\site-packages\\keras\\backend\\tensorflow_backend.py:973: The name tf.assign is deprecated. Please use tf.compat.v1.assign instead.\n", 116 | "\n" 117 | ] 118 | }, 119 | { 120 | "name": "stdout", 121 | "output_type": "stream", 122 | "text": [ 123 | "Train on 19975 samples, validate on 4278 samples\n", 124 | "Epoch 1/20\n", 125 | "19975/19975 [==============================] - 319s 16ms/step - loss: 0.0035 - mean_squared_error: 0.0035 - mean_absolute_error: 0.0436 - mean_absolute_percentage_error: 37694.8738 - val_loss: 0.0024 - val_mean_squared_error: 0.0024 - val_mean_absolute_error: 0.0396 - val_mean_absolute_percentage_error: 17.4203\n", 126 | "Epoch 2/20\n", 127 | "19975/19975 [==============================] - 310s 16ms/step - loss: 0.0018 - mean_squared_error: 0.0018 - mean_absolute_error: 0.0309 - mean_absolute_percentage_error: 47700.0923 - val_loss: 0.0015 - val_mean_squared_error: 0.0015 - val_mean_absolute_error: 0.0294 - val_mean_absolute_percentage_error: 11.8942\n", 128 | "Epoch 3/20\n", 129 | "19975/19975 [==============================] - 310s 16ms/step - loss: 0.0014 - mean_squared_error: 0.0014 - mean_absolute_error: 0.0270 - mean_absolute_percentage_error: 53339.2343 - val_loss: 0.0014 - val_mean_squared_error: 0.0014 - val_mean_absolute_error: 0.0282 - val_mean_absolute_percentage_error: 10.9763\n", 130 | "Epoch 4/20\n", 131 | "19975/19975 [==============================] - 310s 16ms/step - loss: 0.0013 - mean_squared_error: 0.0013 - mean_absolute_error: 0.0248 - mean_absolute_percentage_error: 51892.6571 - val_loss: 0.0013 - val_mean_squared_error: 0.0013 - val_mean_absolute_error: 0.0270 - val_mean_absolute_percentage_error: 9.8959\n", 132 | "Epoch 5/20\n", 133 | "19975/19975 [==============================] - 315s 16ms/step - loss: 0.0013 - mean_squared_error: 0.0013 - mean_absolute_error: 0.0247 - mean_absolute_percentage_error: 52269.5230 - val_loss: 0.0013 - val_mean_squared_error: 0.0013 - val_mean_absolute_error: 0.0270 - val_mean_absolute_percentage_error: 9.9416\n", 134 | "Epoch 6/20\n", 135 | "19975/19975 [==============================] - 310s 16ms/step - loss: 0.0012 - mean_squared_error: 0.0012 - mean_absolute_error: 0.0245 - mean_absolute_percentage_error: 51811.7311 - val_loss: 0.0013 - val_mean_squared_error: 0.0013 - val_mean_absolute_error: 0.0268 - val_mean_absolute_percentage_error: 9.7207\n", 136 | "Epoch 7/20\n", 137 | "19975/19975 [==============================] - 310s 15ms/step - loss: 0.0012 - mean_squared_error: 0.0012 - mean_absolute_error: 0.0246 - mean_absolute_percentage_error: 51732.5026 - val_loss: 0.0013 - val_mean_squared_error: 0.0013 - val_mean_absolute_error: 0.0267 - val_mean_absolute_percentage_error: 9.5558\n", 138 | "Epoch 8/20\n", 139 | "19975/19975 [==============================] - 309s 15ms/step - loss: 0.0012 - mean_squared_error: 0.0012 - mean_absolute_error: 0.0245 - mean_absolute_percentage_error: 51780.3900 - val_loss: 0.0013 - val_mean_squared_error: 0.0013 - val_mean_absolute_error: 0.0267 - val_mean_absolute_percentage_error: 9.5321\n", 140 | "Epoch 9/20\n", 141 | "19975/19975 [==============================] - 309s 15ms/step - loss: 0.0012 - mean_squared_error: 0.0012 - mean_absolute_error: 0.0245 - mean_absolute_percentage_error: 51785.0088 - val_loss: 0.0013 - val_mean_squared_error: 0.0013 - val_mean_absolute_error: 0.0267 - val_mean_absolute_percentage_error: 9.5303\n", 142 | "Epoch 10/20\n", 143 | "19975/19975 [==============================] - 309s 15ms/step - loss: 0.0012 - mean_squared_error: 0.0012 - mean_absolute_error: 0.0245 - mean_absolute_percentage_error: 51785.4215 - val_loss: 0.0013 - val_mean_squared_error: 0.0013 - val_mean_absolute_error: 0.0267 - val_mean_absolute_percentage_error: 9.5302\n", 144 | "Epoch 11/20\n", 145 | "19975/19975 [==============================] - 310s 16ms/step - loss: 0.0012 - mean_squared_error: 0.0012 - mean_absolute_error: 0.0245 - mean_absolute_percentage_error: 51785.4428 - val_loss: 0.0013 - val_mean_squared_error: 0.0013 - val_mean_absolute_error: 0.0267 - val_mean_absolute_percentage_error: 9.5302\n", 146 | "Epoch 12/20\n", 147 | "19975/19975 [==============================] - 309s 15ms/step - loss: 0.0012 - mean_squared_error: 0.0012 - mean_absolute_error: 0.0245 - mean_absolute_percentage_error: 51785.4432 - val_loss: 0.0013 - val_mean_squared_error: 0.0013 - val_mean_absolute_error: 0.0267 - val_mean_absolute_percentage_error: 9.5302\n", 148 | "Epoch 13/20\n", 149 | "19975/19975 [==============================] - 309s 15ms/step - loss: 0.0012 - mean_squared_error: 0.0012 - mean_absolute_error: 0.0245 - mean_absolute_percentage_error: 51785.4432 - val_loss: 0.0013 - val_mean_squared_error: 0.0013 - val_mean_absolute_error: 0.0267 - val_mean_absolute_percentage_error: 9.5302\n", 150 | "Epoch 14/20\n", 151 | "19975/19975 [==============================] - 310s 16ms/step - loss: 0.0012 - mean_squared_error: 0.0012 - mean_absolute_error: 0.0245 - mean_absolute_percentage_error: 51785.4432 - val_loss: 0.0013 - val_mean_squared_error: 0.0013 - val_mean_absolute_error: 0.0267 - val_mean_absolute_percentage_error: 9.5302\n", 152 | "Epoch 15/20\n", 153 | "19975/19975 [==============================] - 309s 15ms/step - loss: 0.0012 - mean_squared_error: 0.0012 - mean_absolute_error: 0.0245 - mean_absolute_percentage_error: 51785.4432 - val_loss: 0.0013 - val_mean_squared_error: 0.0013 - val_mean_absolute_error: 0.0267 - val_mean_absolute_percentage_error: 9.5302\n", 154 | "Epoch 16/20\n", 155 | "19975/19975 [==============================] - 310s 16ms/step - loss: 0.0012 - mean_squared_error: 0.0012 - mean_absolute_error: 0.0245 - mean_absolute_percentage_error: 51785.4432 - val_loss: 0.0013 - val_mean_squared_error: 0.0013 - val_mean_absolute_error: 0.0267 - val_mean_absolute_percentage_error: 9.5302\n", 156 | "Epoch 17/20\n", 157 | "19975/19975 [==============================] - 310s 16ms/step - loss: 0.0012 - mean_squared_error: 0.0012 - mean_absolute_error: 0.0245 - mean_absolute_percentage_error: 51785.4432 - val_loss: 0.0013 - val_mean_squared_error: 0.0013 - val_mean_absolute_error: 0.0267 - val_mean_absolute_percentage_error: 9.5302\n", 158 | "Epoch 18/20\n", 159 | "19975/19975 [==============================] - 311s 16ms/step - loss: 0.0012 - mean_squared_error: 0.0012 - mean_absolute_error: 0.0245 - mean_absolute_percentage_error: 51785.4432 - val_loss: 0.0013 - val_mean_squared_error: 0.0013 - val_mean_absolute_error: 0.0267 - val_mean_absolute_percentage_error: 9.5302\n", 160 | "Epoch 19/20\n", 161 | "19975/19975 [==============================] - 311s 16ms/step - loss: 0.0012 - mean_squared_error: 0.0012 - mean_absolute_error: 0.0245 - mean_absolute_percentage_error: 51785.4432 - val_loss: 0.0013 - val_mean_squared_error: 0.0013 - val_mean_absolute_error: 0.0267 - val_mean_absolute_percentage_error: 9.5302\n", 162 | "Epoch 20/20\n", 163 | "19975/19975 [==============================] - 311s 16ms/step - loss: 0.0012 - mean_squared_error: 0.0012 - mean_absolute_error: 0.0245 - mean_absolute_percentage_error: 51785.4432 - val_loss: 0.0013 - val_mean_squared_error: 0.0013 - val_mean_absolute_error: 0.0267 - val_mean_absolute_percentage_error: 9.5302\n", 164 | "--------------------------------------------------------\n", 165 | " history.mses(=loss) = [0.0035346998091791764, 0.001755106730622068, 0.001440797696176809, 0.0012655524445903978, 0.001258041502459695, 0.0012446110273183362, 0.0012460242195150469, 0.0012444931055472766, 0.0012440191483642621, 0.0012439863394668445, 0.0012439848062522868, 0.0012439847225469021, 0.0012439847186129676, 0.0012439847199534192, 0.0012439847199534192, 0.0012439847199534192, 0.0012439847199534192, 0.0012439847199534192, 0.0012439847199534192, 0.0012439847199534192]\n", 166 | " history.maes = [0.04356145484836886, 0.030930640762473673, 0.026961149242199556, 0.02482531735200309, 0.024654899457835583, 0.024517238270188303, 0.024555865980134588, 0.024536848101340634, 0.02452764523930111, 0.024526995502514894, 0.02452696161542801, 0.024526959544371753, 0.024526959178836384, 0.024526959203081077, 0.024526959203081077, 0.024526959203081077, 0.024526959203081077, 0.024526959203081077, 0.024526959203081077, 0.024526959203081077]\n", 167 | " history.mapes = [37694.87379267696, 47700.09230300058, 53339.23434073247, 51892.65713883807, 52269.52297345473, 51811.73113697604, 51732.50260745891, 51780.38998710838, 51785.00883779585, 51785.42146807176, 51785.44280965206, 51785.443181656716, 51785.443181592265, 51785.443181618044, 51785.443181618044, 51785.443181618044, 51785.443181618044, 51785.443181618044, 51785.443181618044, 51785.443181618044]\n", 168 | " history.val_mses(=loss)= [0.002402907685764646, 0.0014615638472523858, 0.001366986635632207, 0.001298550749524153, 0.0012976049846464915, 0.0012835213517101395, 0.001281462450411176, 0.0012821155602862173, 0.0012821652367558678, 0.0012821669726993483, 0.0012821670828013568, 0.0012821671309675839, 0.0012821671260693235, 0.0012821671260693235, 0.0012821671260693235, 0.0012821671260693235, 0.0012821671260693235, 0.0012821671260693235, 0.0012821671260693235, 0.0012821671260693235]\n", 169 | " history.val_maes = [0.03959246361371288, 0.029350070945497093, 0.02819752257949507, 0.027035700987158896, 0.02703162410016537, 0.026792639120194108, 0.02671247880771763, 0.026711346765317445, 0.026711228290984653, 0.026711202186086903, 0.02671120155388476, 0.02671120217912049, 0.026711201973611255, 0.026711201973611255, 0.026711201973611255, 0.026711201973611255, 0.026711201973611255, 0.026711201973611255, 0.026711201973611255, 0.026711201973611255]\n", 170 | " history.val_mapes = [17.420322934953674, 11.894192009007837, 10.976284469829201, 9.895892275221273, 9.94155378194544, 9.720732251078573, 9.555789626943223, 9.53210962704823, 9.530294202766223, 9.530172593686112, 9.53016660814254, 9.530166908199957, 9.530166857818847, 9.530166857818847, 9.530166857818847, 9.530166857818847, 9.530166857818847, 9.530166857818847, 9.530166857818847, 9.530166857818847]\n", 171 | "--------------------------------------------------------\n" 172 | ] 173 | }, 174 | { 175 | "data": { 176 | "text/plain": [ 177 | "
" 178 | ] 179 | }, 180 | "metadata": {}, 181 | "output_type": "display_data" 182 | }, 183 | { 184 | "data": { 185 | "text/plain": [ 186 | "
" 187 | ] 188 | }, 189 | "metadata": {}, 190 | "output_type": "display_data" 191 | }, 192 | { 193 | "name": "stdout", 194 | "output_type": "stream", 195 | "text": [ 196 | "Test Score > MSE == 0.001165007515304027 MAE == 0.025164676821690112 MAPE == 10.79228433058651\n" 197 | ] 198 | } 199 | ], 200 | "source": [ 201 | "import pandas as pd\n", 202 | "import tensorflow as tf\n", 203 | "import codecs\n", 204 | "import numpy as np\n", 205 | "import math\n", 206 | "import csv\n", 207 | "from sklearn.preprocessing import MinMaxScaler\n", 208 | "from sklearn.metrics import mean_squared_error\n", 209 | "from sklearn.metrics import mean_absolute_error\n", 210 | "from sklearn.metrics import recall_score, precision_score # New\n", 211 | "from sklearn.metrics import f1_score\n", 212 | "from sklearn.metrics import confusion_matrix\n", 213 | "from sklearn import preprocessing\n", 214 | "import keras\n", 215 | "import matplotlib.pyplot as plt\n", 216 | "from keras.callbacks import ModelCheckpoint, CSVLogger, EarlyStopping, LearningRateScheduler, ReduceLROnPlateau\n", 217 | "from keras.layers import merge\n", 218 | "from keras.models import Sequential, Model\n", 219 | "from keras.layers import Dense, Input, Flatten, Add\n", 220 | "from keras.layers import Activation, BatchNormalization, regularizers\n", 221 | "from keras.layers.convolutional import Conv1D\n", 222 | "from keras.layers.convolutional import MaxPooling1D\n", 223 | "from keras.layers.merge import concatenate\n", 224 | "from keras.layers import LSTM, Bidirectional\n", 225 | "from keras.utils import plot_model\n", 226 | "from keras.layers import Dropout\n", 227 | "from scipy import signal\n", 228 | "import openpyxl\n", 229 | "\n", 230 | "from keras.backend import tensorflow_backend as K\n", 231 | "config = tf.ConfigProto()\n", 232 | "config.gpu_options.allow_growth = True\n", 233 | "K.set_session(tf.Session(config=config))\n", 234 | "\n", 235 | "class LossHistory(keras.callbacks.Callback): # history = LossHistory()\n", 236 | " def init(self): # history.init()\n", 237 | " self.losses = []\n", 238 | " # self.accs = []\n", 239 | " self.val_losses = []\n", 240 | " # self.val_accs = []\n", 241 | " self.mses = []\n", 242 | " self.maes = []\n", 243 | " self.mapes = []\n", 244 | " self.val_mses = []\n", 245 | " self.val_maes = []\n", 246 | " self.val_mapes = []\n", 247 | "\n", 248 | " def on_epoch_end(self, batch, logs={}):\n", 249 | " self.losses.append(logs.get('loss'))\n", 250 | " # self.accs.append(logs.get('acc'))\n", 251 | " self.val_losses.append(logs.get('val_loss'))\n", 252 | " # self.val_accs.append(logs.get('val_accuracy\n", 253 | " self.mses.append(logs.get('mean_squared_error'))\n", 254 | " self.maes.append(logs.get('mean_absolute_error'))\n", 255 | " self.mapes.append(logs.get('mean_absolute_percentage_error'))\n", 256 | " self.val_mses.append(logs.get('val_mean_squared_error'))\n", 257 | " self.val_maes.append(logs.get('val_mean_absolute_error'))\n", 258 | " self.val_mapes.append(logs.get('val_mean_absolute_percentage_error'))\n", 259 | "\n", 260 | "def create_dataset(dataset, timesteps):\n", 261 | " dataX, dataY = [], []\n", 262 | " for i in range(len(dataset) - timesteps - 1):\n", 263 | " a = dataset[i:(i + timesteps), 0]\n", 264 | " dataX.append(a)\n", 265 | " dataY.append(dataset[i + timesteps, 0])\n", 266 | " return np.array(dataX), np.array(dataY)\n", 267 | "\n", 268 | "def mean_absolute_percentage_error(y_true, y_pred):\n", 269 | " y_true, y_pred = np.array(y_true), np.array(y_pred)\n", 270 | " return np.mean(np.abs((y_true - y_pred) / y_true)) * 100\n", 271 | "\n", 272 | "data_path = 'C:/Users/Smartgrid_ML/Desktop/KMS/ercot_2016.xlsx'\n", 273 | "data_source = pd.read_excel(data_path, sheet_name='numbers')\n", 274 | "data_source = pd.DataFrame(data_source)\n", 275 | "data_set = data_source.iloc[:, 3]\n", 276 | "wind_2016 = np.array(data_set)\n", 277 | "wind_2016 = wind_2016.reshape(-1, 1)\n", 278 | "installed_2016 = data_source.iloc[:, 4]\n", 279 | "installed_2016 = np.array(installed_2016)\n", 280 | "installed_2016 = installed_2016.reshape(-1, 1)\n", 281 | "\n", 282 | "data_path = 'C:/Users/Smartgrid_ML/Desktop/KMS/ercot_2017.xlsx'\n", 283 | "data_source = pd.read_excel(data_path, sheet_name='numbers')\n", 284 | "data_source = pd.DataFrame(data_source)\n", 285 | "data_set = data_source.iloc[:, 3]\n", 286 | "wind_2017 = np.array(data_set)\n", 287 | "wind_2017 = wind_2017.reshape(-1, 1)\n", 288 | "installed_2017 = data_source.iloc[:, 4]\n", 289 | "installed_2017 = np.array(installed_2017)\n", 290 | "installed_2017 = installed_2017.reshape(-1, 1)\n", 291 | "\n", 292 | "data_path = 'C:/Users/Smartgrid_ML/Desktop/KMS/ercot_2018.xlsx'\n", 293 | "data_source = pd.read_excel(data_path, sheet_name='numbers')\n", 294 | "data_source = pd.DataFrame(data_source)\n", 295 | "data_set = data_source.iloc[:, 3]\n", 296 | "wind_2018 = np.array(data_set)\n", 297 | "wind_2018 = wind_2018.reshape(-1, 1)\n", 298 | "installed_2018 = data_source.iloc[:, 4]\n", 299 | "installed_2018 = np.array(installed_2018)\n", 300 | "installed_2018 = installed_2018.reshape(-1, 1)\n", 301 | "\n", 302 | "wind = np.concatenate((wind_2016, wind_2017, wind_2018), axis=None)\n", 303 | "wind = wind.reshape(-1, 1)\n", 304 | "scaler = MinMaxScaler(feature_range=(0, 1))\n", 305 | "wind = scaler.fit_transform(wind)\n", 306 | "Maxvalue_1 = scaler.data_max_\n", 307 | "print(wind.shape)\n", 308 | "\n", 309 | "np.savetxt('ERCOT_WIND_DATA.txt', wind)\n", 310 | "\n", 311 | "Training_set = wind[0:20000, :]\n", 312 | "Validation_set = wind[20001:24304, :]\n", 313 | "Test_set = wind[24305:26305:, :]\n", 314 | "\n", 315 | "Tr_mean = np.nanmean(wind)\n", 316 | "Tr_var = np.nanvar(wind)\n", 317 | "\n", 318 | "print('Dataset mean = ', Tr_mean, 'var = ', Tr_var)\n", 319 | "print('Maximum value = ', Maxvalue_1)\n", 320 | "\n", 321 | "features = 1\n", 322 | "timesteps = 24\n", 323 | "trainX, trainY = create_dataset(Training_set, timesteps)\n", 324 | "validX, validY = create_dataset(Validation_set, timesteps)\n", 325 | "testX, testY = create_dataset(Test_set, timesteps)\n", 326 | "\n", 327 | "trainX = np.reshape(trainX, (trainX.shape[0], trainX.shape[1], 1))\n", 328 | "validX = np.reshape(validX, (validX.shape[0], validX.shape[1], 1))\n", 329 | "testX = np.reshape(testX, (testX.shape[0], testX.shape[1], 1))\n", 330 | "\n", 331 | "# -----------------------------------------------------------------------------------------------------------\n", 332 | "# -----------------------------------------------------------------------------------------------------------\n", 333 | "visible1 = Input(shape=(timesteps, features))\n", 334 | "\n", 335 | "bi11 = (Bidirectional(LSTM(16, return_sequences=True)))(visible1) ### success\n", 336 | "bi12 = (Bidirectional(LSTM(16, return_sequences=True)))(bi11)\n", 337 | "res13 = keras.layers.Concatenate()([bi12, visible1])\n", 338 | "\n", 339 | "bi13 = (Bidirectional(LSTM(16, return_sequences=True)))(res13)\n", 340 | "bi14 = (Bidirectional(LSTM(16, return_sequences=True)))(bi13)\n", 341 | "res14 = keras.layers.Concatenate()([bi14, res13, visible1])\n", 342 | "\n", 343 | "bi15 = (Bidirectional(LSTM(16, return_sequences=True)))(res14)\n", 344 | "bi16 = (Bidirectional(LSTM(16, return_sequences=True)))(bi15)\n", 345 | "res15 = keras.layers.Concatenate()([bi16, res13, res14, visible1])\n", 346 | "\n", 347 | "bi17 = (Bidirectional(LSTM(16, return_sequences=True)))(bi16)\n", 348 | "bi18 = (Bidirectional(LSTM(16, return_sequences=True)))(bi17)\n", 349 | "res16 = keras.layers.Concatenate()([bi18, res13, res14, res15, visible1])\n", 350 | "\n", 351 | "bi19 = (Bidirectional(LSTM(16, return_sequences=True)))(res16)\n", 352 | "bi20 = (Bidirectional(LSTM(16, return_sequences=True)))(bi19)\n", 353 | "res17 = keras.layers.Concatenate()([bi20, res13, res14, res15, res16, visible1])\n", 354 | "\n", 355 | "bi21 = (Bidirectional(LSTM(32)))(res17)\n", 356 | "\n", 357 | "dense11 = Dense(24, activation='selu')(bi21)\n", 358 | "out1 = Dense(1, activation='selu')(dense11)\n", 359 | "\n", 360 | "model = Model(inputs=[visible1], outputs=[out1]) # multi-input, multi-output\n", 361 | "\n", 362 | "#########################################\n", 363 | "\n", 364 | "print(model.summary())\n", 365 | "\n", 366 | "reducelr = ReduceLROnPlateau(monitor='val_loss', factor=0.1, patience=1) # 에포크 1동안 좋아지지 않으면 호출\n", 367 | "\n", 368 | "model.compile(loss='mean_squared_error', optimizer='adam', metrics=['mse', 'mae', 'mape'])\n", 369 | "\n", 370 | "batch_size = 40\n", 371 | "epochs = 20\n", 372 | "\n", 373 | "history = LossHistory()\n", 374 | "history.init()\n", 375 | "\n", 376 | "model.fit(trainX, trainY, epochs=epochs, batch_size=batch_size, shuffle=False, validation_data=(validX, validY), callbacks=[history, reducelr]) # , checkpoint\n", 377 | "\n", 378 | "trainPredict = model.predict(trainX, batch_size=batch_size)\n", 379 | "validPredict = model.predict(validX, batch_size=batch_size)\n", 380 | "testPredict = model.predict(testX, batch_size=batch_size)\n", 381 | "\n", 382 | "trainPredict = trainPredict.reshape([-1])\n", 383 | "validPredict = validPredict.reshape([-1])\n", 384 | "testPredict = testPredict.reshape([-1])\n", 385 | "testY = testY.reshape([-1])\n", 386 | "validY = validY.reshape([-1])\n", 387 | "trainY = trainY.reshape([-1])\n", 388 | "\n", 389 | "np.savetxt('trainPredict_5.txt', trainPredict)\n", 390 | "np.savetxt('testPredict_5.txt', testPredict)\n", 391 | "np.savetxt('validPredict_5.txt', validPredict)\n", 392 | "np.savetxt('testY_5.txt', testY)\n", 393 | "np.savetxt('validY_5.txt', validY)\n", 394 | "np.savetxt('trainY_5.txt', trainY)\n", 395 | "\n", 396 | "print('--------------------------------------------------------')\n", 397 | "print(' history.mses(=loss) = ', history.mses) # loss == mse\n", 398 | "print(' history.maes = ', history.maes)\n", 399 | "print(' history.mapes = ', history.mapes)\n", 400 | "print(' history.val_mses(=loss)= ', history.val_mses) # loss == mse\n", 401 | "print(' history.val_maes = ', history.val_maes)\n", 402 | "print(' history.val_mapes = ', history.val_mapes)\n", 403 | "print('--------------------------------------------------------')\n", 404 | "\n", 405 | "plt.figure(1)\n", 406 | "plt.plot(testPredict, 'r')\n", 407 | "plt.plot(testY, 'b')\n", 408 | "plt.show()\n", 409 | "\n", 410 | "plt.figure(2)\n", 411 | "plt.plot(history.mses, 'b--')\n", 412 | "plt.plot(history.val_mses, 'b:')\n", 413 | "plt.plot(history.maes, 'ro')\n", 414 | "plt.plot(history.val_maes, 'r+')\n", 415 | "plt.ylabel('Loss and Accuracy')\n", 416 | "plt.xlabel('epoch')\n", 417 | "plt.show()\n", 418 | "\n", 419 | "print('Test Score > MSE == ', mean_squared_error(testY, testPredict), ' MAE == ', mean_absolute_error(testY, testPredict), 'MAPE == ', mean_absolute_percentage_error(testY, testPredict))" 420 | ] 421 | }, 422 | { 423 | "cell_type": "code", 424 | "execution_count": null, 425 | "metadata": {}, 426 | "outputs": [], 427 | "source": [] 428 | } 429 | ], 430 | "metadata": { 431 | "kernelspec": { 432 | "display_name": "Python 3", 433 | "language": "python", 434 | "name": "python3" 435 | }, 436 | "language_info": { 437 | "codemirror_mode": { 438 | "name": "ipython", 439 | "version": 3 440 | }, 441 | "file_extension": ".py", 442 | "mimetype": "text/x-python", 443 | "name": "python", 444 | "nbconvert_exporter": "python", 445 | "pygments_lexer": "ipython3", 446 | "version": "3.6.9" 447 | } 448 | }, 449 | "nbformat": 4, 450 | "nbformat_minor": 4 451 | } 452 | -------------------------------------------------------------------------------- /DenseNet_7Layer_ERCOT.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": {}, 7 | "outputs": [ 8 | { 9 | "name": "stderr", 10 | "output_type": "stream", 11 | "text": [ 12 | "Using TensorFlow backend.\n", 13 | "WARNING: Logging before flag parsing goes to stderr.\n", 14 | "W0309 15:55:34.736577 1728 deprecation_wrapper.py:119] From C:\\Users\\Smartgrid_ML\\Anaconda3\\envs\\tensorflow-gpu\\lib\\site-packages\\keras\\backend\\tensorflow_backend.py:74: The name tf.get_default_graph is deprecated. Please use tf.compat.v1.get_default_graph instead.\n", 15 | "\n", 16 | "W0309 15:55:34.736577 1728 deprecation_wrapper.py:119] From C:\\Users\\Smartgrid_ML\\Anaconda3\\envs\\tensorflow-gpu\\lib\\site-packages\\keras\\backend\\tensorflow_backend.py:517: The name tf.placeholder is deprecated. Please use tf.compat.v1.placeholder instead.\n", 17 | "\n", 18 | "W0309 15:55:34.740578 1728 deprecation_wrapper.py:119] From C:\\Users\\Smartgrid_ML\\Anaconda3\\envs\\tensorflow-gpu\\lib\\site-packages\\keras\\backend\\tensorflow_backend.py:4138: The name tf.random_uniform is deprecated. Please use tf.random.uniform instead.\n", 19 | "\n" 20 | ] 21 | }, 22 | { 23 | "name": "stdout", 24 | "output_type": "stream", 25 | "text": [ 26 | "(26311, 1)\n", 27 | "Dataset mean = 0.36639967284314107 var = 0.04237001272906482\n", 28 | "Maximum value = [19099.07421875]\n" 29 | ] 30 | }, 31 | { 32 | "name": "stderr", 33 | "output_type": "stream", 34 | "text": [ 35 | "W0309 15:55:36.700097 1728 deprecation.py:323] From C:\\Users\\Smartgrid_ML\\Anaconda3\\envs\\tensorflow-gpu\\lib\\site-packages\\keras\\backend\\tensorflow_backend.py:3217: add_dispatch_support..wrapper (from tensorflow.python.ops.array_ops) is deprecated and will be removed in a future version.\n", 36 | "Instructions for updating:\n", 37 | "Use tf.where in 2.0, which has the same broadcast rule as np.where\n", 38 | "W0309 15:55:36.716101 1728 deprecation_wrapper.py:119] From C:\\Users\\Smartgrid_ML\\Anaconda3\\envs\\tensorflow-gpu\\lib\\site-packages\\keras\\optimizers.py:790: The name tf.train.Optimizer is deprecated. Please use tf.compat.v1.train.Optimizer instead.\n", 39 | "\n" 40 | ] 41 | }, 42 | { 43 | "name": "stdout", 44 | "output_type": "stream", 45 | "text": [ 46 | "__________________________________________________________________________________________________\n", 47 | "Layer (type) Output Shape Param # Connected to \n", 48 | "==================================================================================================\n", 49 | "input_1 (InputLayer) (None, 24, 1) 0 \n", 50 | "__________________________________________________________________________________________________\n", 51 | "bidirectional_1 (Bidirectional) (None, 24, 32) 2304 input_1[0][0] \n", 52 | "__________________________________________________________________________________________________\n", 53 | "bidirectional_2 (Bidirectional) (None, 24, 32) 6272 bidirectional_1[0][0] \n", 54 | "__________________________________________________________________________________________________\n", 55 | "concatenate_1 (Concatenate) (None, 24, 33) 0 bidirectional_2[0][0] \n", 56 | " input_1[0][0] \n", 57 | "__________________________________________________________________________________________________\n", 58 | "bidirectional_3 (Bidirectional) (None, 24, 32) 6400 concatenate_1[0][0] \n", 59 | "__________________________________________________________________________________________________\n", 60 | "bidirectional_4 (Bidirectional) (None, 24, 32) 6272 bidirectional_3[0][0] \n", 61 | "__________________________________________________________________________________________________\n", 62 | "concatenate_2 (Concatenate) (None, 24, 66) 0 bidirectional_4[0][0] \n", 63 | " concatenate_1[0][0] \n", 64 | " input_1[0][0] \n", 65 | "__________________________________________________________________________________________________\n", 66 | "bidirectional_5 (Bidirectional) (None, 24, 32) 10624 concatenate_2[0][0] \n", 67 | "__________________________________________________________________________________________________\n", 68 | "bidirectional_6 (Bidirectional) (None, 24, 32) 6272 bidirectional_5[0][0] \n", 69 | "__________________________________________________________________________________________________\n", 70 | "concatenate_3 (Concatenate) (None, 24, 132) 0 bidirectional_6[0][0] \n", 71 | " concatenate_1[0][0] \n", 72 | " concatenate_2[0][0] \n", 73 | " input_1[0][0] \n", 74 | "__________________________________________________________________________________________________\n", 75 | "bidirectional_7 (Bidirectional) (None, 64) 42240 concatenate_3[0][0] \n", 76 | "__________________________________________________________________________________________________\n", 77 | "dense_1 (Dense) (None, 24) 1560 bidirectional_7[0][0] \n", 78 | "__________________________________________________________________________________________________\n", 79 | "dense_2 (Dense) (None, 1) 25 dense_1[0][0] \n", 80 | "==================================================================================================\n", 81 | "Total params: 81,969\n", 82 | "Trainable params: 81,969\n", 83 | "Non-trainable params: 0\n", 84 | "__________________________________________________________________________________________________\n", 85 | "None\n" 86 | ] 87 | }, 88 | { 89 | "name": "stderr", 90 | "output_type": "stream", 91 | "text": [ 92 | "W0309 15:55:42.717986 1728 deprecation_wrapper.py:119] From C:\\Users\\Smartgrid_ML\\Anaconda3\\envs\\tensorflow-gpu\\lib\\site-packages\\keras\\backend\\tensorflow_backend.py:986: The name tf.assign_add is deprecated. Please use tf.compat.v1.assign_add instead.\n", 93 | "\n", 94 | "W0309 15:55:43.283114 1728 deprecation_wrapper.py:119] From C:\\Users\\Smartgrid_ML\\Anaconda3\\envs\\tensorflow-gpu\\lib\\site-packages\\keras\\backend\\tensorflow_backend.py:973: The name tf.assign is deprecated. Please use tf.compat.v1.assign instead.\n", 95 | "\n" 96 | ] 97 | }, 98 | { 99 | "name": "stdout", 100 | "output_type": "stream", 101 | "text": [ 102 | "Train on 19975 samples, validate on 4278 samples\n", 103 | "Epoch 1/20\n", 104 | "19975/19975 [==============================] - 203s 10ms/step - loss: 0.0037 - mean_squared_error: 0.0037 - mean_absolute_error: 0.0458 - mean_absolute_percentage_error: 35001.9610 - val_loss: 0.0020 - val_mean_squared_error: 0.0020 - val_mean_absolute_error: 0.0350 - val_mean_absolute_percentage_error: 14.4356\n", 105 | "Epoch 2/20\n", 106 | "19975/19975 [==============================] - 196s 10ms/step - loss: 0.0017 - mean_squared_error: 0.0017 - mean_absolute_error: 0.0300 - mean_absolute_percentage_error: 49773.5321 - val_loss: 0.0014 - val_mean_squared_error: 0.0014 - val_mean_absolute_error: 0.0291 - val_mean_absolute_percentage_error: 11.4917\n", 107 | "Epoch 3/20\n", 108 | "19975/19975 [==============================] - 195s 10ms/step - loss: 0.0014 - mean_squared_error: 0.0014 - mean_absolute_error: 0.0269 - mean_absolute_percentage_error: 55858.9773 - val_loss: 0.0014 - val_mean_squared_error: 0.0014 - val_mean_absolute_error: 0.0280 - val_mean_absolute_percentage_error: 10.6317\n", 109 | "Epoch 4/20\n", 110 | "19975/19975 [==============================] - 195s 10ms/step - loss: 0.0013 - mean_squared_error: 0.0013 - mean_absolute_error: 0.0249 - mean_absolute_percentage_error: 52562.5810 - val_loss: 0.0013 - val_mean_squared_error: 0.0013 - val_mean_absolute_error: 0.0271 - val_mean_absolute_percentage_error: 9.7708\n", 111 | "Epoch 5/20\n", 112 | "19975/19975 [==============================] - 195s 10ms/step - loss: 0.0013 - mean_squared_error: 0.0013 - mean_absolute_error: 0.0247 - mean_absolute_percentage_error: 53401.3864 - val_loss: 0.0013 - val_mean_squared_error: 0.0013 - val_mean_absolute_error: 0.0271 - val_mean_absolute_percentage_error: 9.9423\n", 113 | "Epoch 6/20\n", 114 | "19975/19975 [==============================] - 195s 10ms/step - loss: 0.0013 - mean_squared_error: 0.0013 - mean_absolute_error: 0.0246 - mean_absolute_percentage_error: 52846.5162 - val_loss: 0.0013 - val_mean_squared_error: 0.0013 - val_mean_absolute_error: 0.0268 - val_mean_absolute_percentage_error: 9.6875\n", 115 | "Epoch 7/20\n", 116 | "19975/19975 [==============================] - 196s 10ms/step - loss: 0.0013 - mean_squared_error: 0.0013 - mean_absolute_error: 0.0246 - mean_absolute_percentage_error: 52802.6187 - val_loss: 0.0013 - val_mean_squared_error: 0.0013 - val_mean_absolute_error: 0.0267 - val_mean_absolute_percentage_error: 9.5223\n", 117 | "Epoch 8/20\n", 118 | "19975/19975 [==============================] - 196s 10ms/step - loss: 0.0013 - mean_squared_error: 0.0013 - mean_absolute_error: 0.0246 - mean_absolute_percentage_error: 52833.2912 - val_loss: 0.0013 - val_mean_squared_error: 0.0013 - val_mean_absolute_error: 0.0267 - val_mean_absolute_percentage_error: 9.5068\n", 119 | "Epoch 9/20\n", 120 | "19975/19975 [==============================] - 196s 10ms/step - loss: 0.0013 - mean_squared_error: 0.0013 - mean_absolute_error: 0.0246 - mean_absolute_percentage_error: 52836.2182 - val_loss: 0.0013 - val_mean_squared_error: 0.0013 - val_mean_absolute_error: 0.0267 - val_mean_absolute_percentage_error: 9.5056\n", 121 | "Epoch 10/20\n", 122 | "19975/19975 [==============================] - 194s 10ms/step - loss: 0.0013 - mean_squared_error: 0.0013 - mean_absolute_error: 0.0246 - mean_absolute_percentage_error: 52836.4200 - val_loss: 0.0013 - val_mean_squared_error: 0.0013 - val_mean_absolute_error: 0.0267 - val_mean_absolute_percentage_error: 9.5055\n", 123 | "Epoch 11/20\n", 124 | "19975/19975 [==============================] - 196s 10ms/step - loss: 0.0013 - mean_squared_error: 0.0013 - mean_absolute_error: 0.0246 - mean_absolute_percentage_error: 52836.4444 - val_loss: 0.0013 - val_mean_squared_error: 0.0013 - val_mean_absolute_error: 0.0267 - val_mean_absolute_percentage_error: 9.5055\n", 125 | "Epoch 12/20\n", 126 | "19975/19975 [==============================] - 195s 10ms/step - loss: 0.0013 - mean_squared_error: 0.0013 - mean_absolute_error: 0.0246 - mean_absolute_percentage_error: 52836.4486 - val_loss: 0.0013 - val_mean_squared_error: 0.0013 - val_mean_absolute_error: 0.0267 - val_mean_absolute_percentage_error: 9.5055\n", 127 | "Epoch 13/20\n", 128 | "19975/19975 [==============================] - 196s 10ms/step - loss: 0.0013 - mean_squared_error: 0.0013 - mean_absolute_error: 0.0246 - mean_absolute_percentage_error: 52836.4446 - val_loss: 0.0013 - val_mean_squared_error: 0.0013 - val_mean_absolute_error: 0.0267 - val_mean_absolute_percentage_error: 9.5055\n", 129 | "Epoch 14/20\n", 130 | "19975/19975 [==============================] - 195s 10ms/step - loss: 0.0013 - mean_squared_error: 0.0013 - mean_absolute_error: 0.0246 - mean_absolute_percentage_error: 52836.4446 - val_loss: 0.0013 - val_mean_squared_error: 0.0013 - val_mean_absolute_error: 0.0267 - val_mean_absolute_percentage_error: 9.5055\n", 131 | "Epoch 15/20\n", 132 | "19975/19975 [==============================] - 195s 10ms/step - loss: 0.0013 - mean_squared_error: 0.0013 - mean_absolute_error: 0.0246 - mean_absolute_percentage_error: 52836.4446 - val_loss: 0.0013 - val_mean_squared_error: 0.0013 - val_mean_absolute_error: 0.0267 - val_mean_absolute_percentage_error: 9.5055\n", 133 | "Epoch 16/20\n", 134 | "19975/19975 [==============================] - 195s 10ms/step - loss: 0.0013 - mean_squared_error: 0.0013 - mean_absolute_error: 0.0246 - mean_absolute_percentage_error: 52836.4446 - val_loss: 0.0013 - val_mean_squared_error: 0.0013 - val_mean_absolute_error: 0.0267 - val_mean_absolute_percentage_error: 9.5055\n", 135 | "Epoch 17/20\n", 136 | "19975/19975 [==============================] - 195s 10ms/step - loss: 0.0013 - mean_squared_error: 0.0013 - mean_absolute_error: 0.0246 - mean_absolute_percentage_error: 52836.4446 - val_loss: 0.0013 - val_mean_squared_error: 0.0013 - val_mean_absolute_error: 0.0267 - val_mean_absolute_percentage_error: 9.5055\n", 137 | "Epoch 18/20\n", 138 | "19975/19975 [==============================] - 195s 10ms/step - loss: 0.0013 - mean_squared_error: 0.0013 - mean_absolute_error: 0.0246 - mean_absolute_percentage_error: 52836.4446 - val_loss: 0.0013 - val_mean_squared_error: 0.0013 - val_mean_absolute_error: 0.0267 - val_mean_absolute_percentage_error: 9.5055\n", 139 | "Epoch 19/20\n", 140 | "19975/19975 [==============================] - 196s 10ms/step - loss: 0.0013 - mean_squared_error: 0.0013 - mean_absolute_error: 0.0246 - mean_absolute_percentage_error: 52836.4446 - val_loss: 0.0013 - val_mean_squared_error: 0.0013 - val_mean_absolute_error: 0.0267 - val_mean_absolute_percentage_error: 9.5055\n", 141 | "Epoch 20/20\n", 142 | "19975/19975 [==============================] - 195s 10ms/step - loss: 0.0013 - mean_squared_error: 0.0013 - mean_absolute_error: 0.0246 - mean_absolute_percentage_error: 52836.4446 - val_loss: 0.0013 - val_mean_squared_error: 0.0013 - val_mean_absolute_error: 0.0267 - val_mean_absolute_percentage_error: 9.5055\n", 143 | "--------------------------------------------------------\n", 144 | " history.mses(=loss) = [0.003747787664980116, 0.0016765823469465791, 0.0014426339748729305, 0.001275954814671477, 0.001268087990858239, 0.001256488589890469, 0.0012570436450172547, 0.001255032430503177, 0.0012547519200776375, 0.0012547335361167834, 0.0012547323024203448, 0.00125473227338208, 0.0012547322927312099, 0.0012547322927312099, 0.0012547322927312099, 0.0012547322927312099, 0.0012547322927312099, 0.0012547322927312099, 0.0012547322927312099, 0.0012547322927312099]\n", 145 | " history.maes = [0.045778161718583524, 0.029959060706300788, 0.02691196152924074, 0.02490396968535473, 0.02470894602869867, 0.024608733125954158, 0.024632565265938697, 0.024601788262140767, 0.024596682342890655, 0.024596313658975837, 0.024596287349754192, 0.024596286286717662, 0.02459628655900421, 0.02459628655900421, 0.02459628655900421, 0.02459628655900421, 0.02459628655900421, 0.02459628655900421, 0.02459628655900421, 0.02459628655900421]\n", 146 | " history.mapes = [35001.96100733033, 49773.53211767008, 55858.97734307771, 52562.58098623785, 53401.38638986485, 52846.51621174592, 52802.618653810845, 52833.2911707017, 52836.218212122374, 52836.42000221347, 52836.444354532956, 52836.44860804979, 52836.44460306693, 52836.44460306693, 52836.44460306693, 52836.44460306693, 52836.44460306693, 52836.44460306693, 52836.44460306693, 52836.44460306693]\n", 147 | " history.val_mses(=loss)= [0.002021670805629083, 0.0014424762042442205, 0.0013634855676657473, 0.001310777720100934, 0.0013122987430459981, 0.0012965198598524305, 0.001295303974963303, 0.0012957915861717747, 0.0012958205660762437, 0.001295822235784359, 0.0012958222409003197, 0.0012958222444379522, 0.0012958222444379522, 0.0012958222444379522, 0.0012958222444379522, 0.0012958222444379522, 0.0012958222444379522, 0.0012958222444379522, 0.0012958222444379522, 0.0012958222444379522]\n", 148 | " history.val_maes = [0.03503499258276512, 0.029055273443349003, 0.02799530597616992, 0.027067342331583335, 0.02709272649450913, 0.026810750166714442, 0.02673971920843267, 0.02673987513943608, 0.026739810916058312, 0.02673979588776005, 0.026739796074111644, 0.026739795825062314, 0.026739795825062314, 0.026739795825062314, 0.026739795825062314, 0.026739795825062314, 0.026739795825062314, 0.026739795825062314, 0.026739795825062314, 0.026739795825062314]\n", 149 | " history.val_mapes = [14.435594095031254, 11.49167369246873, 10.631694287660803, 9.770760668611459, 9.942274107003445, 9.687543495395797, 9.52231321874318, 9.506781914681127, 9.50556562948918, 9.505460242904086, 9.505457572259319, 9.505457661429428, 9.505457661429428, 9.505457661429428, 9.505457661429428, 9.505457661429428, 9.505457661429428, 9.505457661429428, 9.505457661429428, 9.505457661429428]\n", 150 | "--------------------------------------------------------\n" 151 | ] 152 | }, 153 | { 154 | "data": { 155 | "text/plain": [ 156 | "
" 157 | ] 158 | }, 159 | "metadata": {}, 160 | "output_type": "display_data" 161 | }, 162 | { 163 | "data": { 164 | "text/plain": [ 165 | "
" 166 | ] 167 | }, 168 | "metadata": {}, 169 | "output_type": "display_data" 170 | }, 171 | { 172 | "name": "stdout", 173 | "output_type": "stream", 174 | "text": [ 175 | "Test Score > MSE == 0.0011792867708826373 MAE == 0.025323707179315483 MAPE == 11.048650242339653\n" 176 | ] 177 | } 178 | ], 179 | "source": [ 180 | "import pandas as pd\n", 181 | "import tensorflow as tf\n", 182 | "import codecs\n", 183 | "import numpy as np\n", 184 | "import math\n", 185 | "import csv\n", 186 | "from sklearn.preprocessing import MinMaxScaler\n", 187 | "from sklearn.metrics import mean_squared_error\n", 188 | "from sklearn.metrics import mean_absolute_error\n", 189 | "from sklearn.metrics import recall_score, precision_score # New\n", 190 | "from sklearn.metrics import f1_score\n", 191 | "from sklearn.metrics import confusion_matrix\n", 192 | "from sklearn import preprocessing\n", 193 | "import keras\n", 194 | "import matplotlib.pyplot as plt\n", 195 | "from keras.callbacks import ModelCheckpoint, CSVLogger, EarlyStopping, LearningRateScheduler, ReduceLROnPlateau\n", 196 | "from keras.layers import merge\n", 197 | "from keras.models import Sequential, Model\n", 198 | "from keras.layers import Dense, Input, Flatten, Add\n", 199 | "from keras.layers import Activation, BatchNormalization, regularizers\n", 200 | "from keras.layers.convolutional import Conv1D\n", 201 | "from keras.layers.convolutional import MaxPooling1D\n", 202 | "from keras.layers.merge import concatenate\n", 203 | "from keras.layers import LSTM, Bidirectional\n", 204 | "from keras.utils import plot_model\n", 205 | "from keras.layers import Dropout\n", 206 | "from scipy import signal\n", 207 | "import openpyxl\n", 208 | "\n", 209 | "from keras.backend import tensorflow_backend as K\n", 210 | "config = tf.ConfigProto()\n", 211 | "config.gpu_options.allow_growth = True\n", 212 | "K.set_session(tf.Session(config=config))\n", 213 | "\n", 214 | "class LossHistory(keras.callbacks.Callback): # history = LossHistory()\n", 215 | " def init(self): # history.init()\n", 216 | " self.losses = []\n", 217 | " # self.accs = []\n", 218 | " self.val_losses = []\n", 219 | " # self.val_accs = []\n", 220 | " self.mses = []\n", 221 | " self.maes = []\n", 222 | " self.mapes = []\n", 223 | " self.val_mses = []\n", 224 | " self.val_maes = []\n", 225 | " self.val_mapes = []\n", 226 | "\n", 227 | " def on_epoch_end(self, batch, logs={}):\n", 228 | " self.losses.append(logs.get('loss'))\n", 229 | " # self.accs.append(logs.get('acc'))\n", 230 | " self.val_losses.append(logs.get('val_loss'))\n", 231 | " # self.val_accs.append(logs.get('val_accuracy\n", 232 | " self.mses.append(logs.get('mean_squared_error'))\n", 233 | " self.maes.append(logs.get('mean_absolute_error'))\n", 234 | " self.mapes.append(logs.get('mean_absolute_percentage_error'))\n", 235 | " self.val_mses.append(logs.get('val_mean_squared_error'))\n", 236 | " self.val_maes.append(logs.get('val_mean_absolute_error'))\n", 237 | " self.val_mapes.append(logs.get('val_mean_absolute_percentage_error'))\n", 238 | "\n", 239 | "def create_dataset(dataset, timesteps):\n", 240 | " dataX, dataY = [], []\n", 241 | " for i in range(len(dataset) - timesteps - 1):\n", 242 | " a = dataset[i:(i + timesteps), 0]\n", 243 | " dataX.append(a)\n", 244 | " dataY.append(dataset[i + timesteps, 0])\n", 245 | " return np.array(dataX), np.array(dataY)\n", 246 | "\n", 247 | "def mean_absolute_percentage_error(y_true, y_pred):\n", 248 | " y_true, y_pred = np.array(y_true), np.array(y_pred)\n", 249 | " return np.mean(np.abs((y_true - y_pred) / y_true)) * 100\n", 250 | "\n", 251 | "data_path = 'C:/Users/Smartgrid_ML/Desktop/KMS/ercot_2016.xlsx'\n", 252 | "data_source = pd.read_excel(data_path, sheet_name='numbers')\n", 253 | "data_source = pd.DataFrame(data_source)\n", 254 | "data_set = data_source.iloc[:, 3]\n", 255 | "wind_2016 = np.array(data_set)\n", 256 | "wind_2016 = wind_2016.reshape(-1, 1)\n", 257 | "installed_2016 = data_source.iloc[:, 4]\n", 258 | "installed_2016 = np.array(installed_2016)\n", 259 | "installed_2016 = installed_2016.reshape(-1, 1)\n", 260 | "\n", 261 | "data_path = 'C:/Users/Smartgrid_ML/Desktop/KMS/ercot_2017.xlsx'\n", 262 | "data_source = pd.read_excel(data_path, sheet_name='numbers')\n", 263 | "data_source = pd.DataFrame(data_source)\n", 264 | "data_set = data_source.iloc[:, 3]\n", 265 | "wind_2017 = np.array(data_set)\n", 266 | "wind_2017 = wind_2017.reshape(-1, 1)\n", 267 | "installed_2017 = data_source.iloc[:, 4]\n", 268 | "installed_2017 = np.array(installed_2017)\n", 269 | "installed_2017 = installed_2017.reshape(-1, 1)\n", 270 | "\n", 271 | "data_path = 'C:/Users/Smartgrid_ML/Desktop/KMS/ercot_2018.xlsx'\n", 272 | "data_source = pd.read_excel(data_path, sheet_name='numbers')\n", 273 | "data_source = pd.DataFrame(data_source)\n", 274 | "data_set = data_source.iloc[:, 3]\n", 275 | "wind_2018 = np.array(data_set)\n", 276 | "wind_2018 = wind_2018.reshape(-1, 1)\n", 277 | "installed_2018 = data_source.iloc[:, 4]\n", 278 | "installed_2018 = np.array(installed_2018)\n", 279 | "installed_2018 = installed_2018.reshape(-1, 1)\n", 280 | "\n", 281 | "wind = np.concatenate((wind_2016, wind_2017, wind_2018), axis=None)\n", 282 | "wind = wind.reshape(-1, 1)\n", 283 | "scaler = MinMaxScaler(feature_range=(0, 1))\n", 284 | "wind = scaler.fit_transform(wind)\n", 285 | "Maxvalue_1 = scaler.data_max_\n", 286 | "print(wind.shape)\n", 287 | "\n", 288 | "np.savetxt('ERCOT_WIND_DATA.txt', wind)\n", 289 | "\n", 290 | "Training_set = wind[0:20000, :]\n", 291 | "Validation_set = wind[20001:24304, :]\n", 292 | "Test_set = wind[24305:26305:, :]\n", 293 | "\n", 294 | "Tr_mean = np.nanmean(wind)\n", 295 | "Tr_var = np.nanvar(wind)\n", 296 | "\n", 297 | "print('Dataset mean = ', Tr_mean, 'var = ', Tr_var)\n", 298 | "print('Maximum value = ', Maxvalue_1)\n", 299 | "\n", 300 | "features = 1\n", 301 | "timesteps = 24\n", 302 | "trainX, trainY = create_dataset(Training_set, timesteps)\n", 303 | "validX, validY = create_dataset(Validation_set, timesteps)\n", 304 | "testX, testY = create_dataset(Test_set, timesteps)\n", 305 | "\n", 306 | "trainX = np.reshape(trainX, (trainX.shape[0], trainX.shape[1], 1))\n", 307 | "validX = np.reshape(validX, (validX.shape[0], validX.shape[1], 1))\n", 308 | "testX = np.reshape(testX, (testX.shape[0], testX.shape[1], 1))\n", 309 | "\n", 310 | "# -----------------------------------------------------------------------------------------------------------\n", 311 | "# -----------------------------------------------------------------------------------------------------------\n", 312 | "visible1 = Input(shape=(timesteps, features))\n", 313 | "\n", 314 | "bi11 = (Bidirectional(LSTM(16, return_sequences=True)))(visible1) ### success\n", 315 | "bi12 = (Bidirectional(LSTM(16, return_sequences=True)))(bi11)\n", 316 | "res13 = keras.layers.Concatenate()([bi12, visible1])\n", 317 | "\n", 318 | "bi13 = (Bidirectional(LSTM(16, return_sequences=True)))(res13)\n", 319 | "bi14 = (Bidirectional(LSTM(16, return_sequences=True)))(bi13)\n", 320 | "res14 = keras.layers.Concatenate()([bi14, res13, visible1])\n", 321 | "\n", 322 | "bi15 = (Bidirectional(LSTM(16, return_sequences=True)))(res14)\n", 323 | "bi16 = (Bidirectional(LSTM(16, return_sequences=True)))(bi15)\n", 324 | "res15 = keras.layers.Concatenate()([bi16, res13, res14, visible1])\n", 325 | "\n", 326 | "bi21 = (Bidirectional(LSTM(32)))(res15)\n", 327 | "\n", 328 | "dense11 = Dense(24, activation='selu')(bi21)\n", 329 | "out1 = Dense(1, activation='selu')(dense11)\n", 330 | "\n", 331 | "model = Model(inputs=[visible1], outputs=[out1]) # multi-input, multi-output\n", 332 | "\n", 333 | "#########################################\n", 334 | "\n", 335 | "print(model.summary())\n", 336 | "\n", 337 | "reducelr = ReduceLROnPlateau(monitor='val_loss', factor=0.1, patience=1) # 에포크 1동안 좋아지지 않으면 호출\n", 338 | "\n", 339 | "model.compile(loss='mean_squared_error', optimizer='adam', metrics=['mse', 'mae', 'mape'])\n", 340 | "\n", 341 | "batch_size = 40\n", 342 | "epochs = 20\n", 343 | "\n", 344 | "history = LossHistory()\n", 345 | "history.init()\n", 346 | "\n", 347 | "model.fit(trainX, trainY, epochs=epochs, batch_size=batch_size, shuffle=False, validation_data=(validX, validY), callbacks=[history, reducelr]) # , checkpoint\n", 348 | "\n", 349 | "trainPredict = model.predict(trainX, batch_size=batch_size)\n", 350 | "validPredict = model.predict(validX, batch_size=batch_size)\n", 351 | "testPredict = model.predict(testX, batch_size=batch_size)\n", 352 | "\n", 353 | "trainPredict = trainPredict.reshape([-1])\n", 354 | "validPredict = validPredict.reshape([-1])\n", 355 | "testPredict = testPredict.reshape([-1])\n", 356 | "testY = testY.reshape([-1])\n", 357 | "validY = validY.reshape([-1])\n", 358 | "trainY = trainY.reshape([-1])\n", 359 | "\n", 360 | "np.savetxt('trainPredict_5.txt', trainPredict)\n", 361 | "np.savetxt('testPredict_5.txt', testPredict)\n", 362 | "np.savetxt('validPredict_5.txt', validPredict)\n", 363 | "np.savetxt('testY_5.txt', testY)\n", 364 | "np.savetxt('validY_5.txt', validY)\n", 365 | "np.savetxt('trainY_5.txt', trainY)\n", 366 | "\n", 367 | "print('--------------------------------------------------------')\n", 368 | "print(' history.mses(=loss) = ', history.mses) # loss == mse\n", 369 | "print(' history.maes = ', history.maes)\n", 370 | "print(' history.mapes = ', history.mapes)\n", 371 | "print(' history.val_mses(=loss)= ', history.val_mses) # loss == mse\n", 372 | "print(' history.val_maes = ', history.val_maes)\n", 373 | "print(' history.val_mapes = ', history.val_mapes)\n", 374 | "print('--------------------------------------------------------')\n", 375 | "\n", 376 | "plt.figure(1)\n", 377 | "plt.plot(testPredict, 'r')\n", 378 | "plt.plot(testY, 'b')\n", 379 | "plt.show()\n", 380 | "\n", 381 | "plt.figure(2)\n", 382 | "plt.plot(history.mses, 'b--')\n", 383 | "plt.plot(history.val_mses, 'b:')\n", 384 | "plt.plot(history.maes, 'ro')\n", 385 | "plt.plot(history.val_maes, 'r+')\n", 386 | "plt.ylabel('Loss and Accuracy')\n", 387 | "plt.xlabel('epoch')\n", 388 | "plt.show()\n", 389 | "\n", 390 | "print('Test Score > MSE == ', mean_squared_error(testY, testPredict), ' MAE == ', mean_absolute_error(testY, testPredict), 'MAPE == ', mean_absolute_percentage_error(testY, testPredict))" 391 | ] 392 | }, 393 | { 394 | "cell_type": "code", 395 | "execution_count": null, 396 | "metadata": {}, 397 | "outputs": [], 398 | "source": [] 399 | } 400 | ], 401 | "metadata": { 402 | "kernelspec": { 403 | "display_name": "Python 3", 404 | "language": "python", 405 | "name": "python3" 406 | }, 407 | "language_info": { 408 | "codemirror_mode": { 409 | "name": "ipython", 410 | "version": 3 411 | }, 412 | "file_extension": ".py", 413 | "mimetype": "text/x-python", 414 | "name": "python", 415 | "nbconvert_exporter": "python", 416 | "pygments_lexer": "ipython3", 417 | "version": "3.6.9" 418 | } 419 | }, 420 | "nbformat": 4, 421 | "nbformat_minor": 4 422 | } 423 | -------------------------------------------------------------------------------- /Jena_PureBi-LSTM.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": {}, 7 | "outputs": [ 8 | { 9 | "name": "stderr", 10 | "output_type": "stream", 11 | "text": [ 12 | "Using TensorFlow backend.\n", 13 | "WARNING: Logging before flag parsing goes to stderr.\n", 14 | "W0110 14:37:43.781729 11872 deprecation_wrapper.py:119] From C:\\Users\\Smartgrid_ML\\Anaconda3\\envs\\tensorflow-gpu\\lib\\site-packages\\keras\\backend\\tensorflow_backend.py:74: The name tf.get_default_graph is deprecated. Please use tf.compat.v1.get_default_graph instead.\n", 15 | "\n", 16 | "W0110 14:37:43.781729 11872 deprecation_wrapper.py:119] From C:\\Users\\Smartgrid_ML\\Anaconda3\\envs\\tensorflow-gpu\\lib\\site-packages\\keras\\backend\\tensorflow_backend.py:517: The name tf.placeholder is deprecated. Please use tf.compat.v1.placeholder instead.\n", 17 | "\n", 18 | "W0110 14:37:43.795430 11872 deprecation_wrapper.py:119] From C:\\Users\\Smartgrid_ML\\Anaconda3\\envs\\tensorflow-gpu\\lib\\site-packages\\keras\\backend\\tensorflow_backend.py:4138: The name tf.random_uniform is deprecated. Please use tf.random.uniform instead.\n", 19 | "\n" 20 | ] 21 | }, 22 | { 23 | "name": "stdout", 24 | "output_type": "stream", 25 | "text": [ 26 | "(70037, 1)\n", 27 | "Dataset mean = 0.5363373411352942 var = 0.01966813341576947\n", 28 | "Maximum value = [37.28]\n" 29 | ] 30 | }, 31 | { 32 | "name": "stderr", 33 | "output_type": "stream", 34 | "text": [ 35 | "W0110 14:37:46.966321 11872 deprecation.py:323] From C:\\Users\\Smartgrid_ML\\Anaconda3\\envs\\tensorflow-gpu\\lib\\site-packages\\keras\\backend\\tensorflow_backend.py:3217: add_dispatch_support..wrapper (from tensorflow.python.ops.array_ops) is deprecated and will be removed in a future version.\n", 36 | "Instructions for updating:\n", 37 | "Use tf.where in 2.0, which has the same broadcast rule as np.where\n" 38 | ] 39 | }, 40 | { 41 | "name": "stdout", 42 | "output_type": "stream", 43 | "text": [ 44 | "_________________________________________________________________\n", 45 | "Layer (type) Output Shape Param # \n", 46 | "=================================================================\n", 47 | "input_1 (InputLayer) (None, 24, 1) 0 \n", 48 | "_________________________________________________________________\n", 49 | "bidirectional_1 (Bidirection (None, 24, 32) 2304 \n", 50 | "_________________________________________________________________\n", 51 | "bidirectional_2 (Bidirection (None, 24, 32) 6272 \n", 52 | "_________________________________________________________________\n", 53 | "bidirectional_3 (Bidirection (None, 24, 32) 6272 \n", 54 | "_________________________________________________________________\n", 55 | "bidirectional_4 (Bidirection (None, 24, 32) 6272 \n", 56 | "_________________________________________________________________\n", 57 | "bidirectional_5 (Bidirection (None, 24, 32) 6272 \n", 58 | "_________________________________________________________________\n", 59 | "bidirectional_6 (Bidirection (None, 24, 32) 6272 \n", 60 | "_________________________________________________________________\n", 61 | "bidirectional_7 (Bidirection (None, 24, 32) 6272 \n", 62 | "_________________________________________________________________\n", 63 | "bidirectional_8 (Bidirection (None, 24, 32) 6272 \n", 64 | "_________________________________________________________________\n", 65 | "bidirectional_9 (Bidirection (None, 24, 32) 6272 \n", 66 | "_________________________________________________________________\n", 67 | "bidirectional_10 (Bidirectio (None, 24, 32) 6272 \n", 68 | "_________________________________________________________________\n", 69 | "bidirectional_11 (Bidirectio (None, 64) 16640 \n", 70 | "_________________________________________________________________\n", 71 | "dense_1 (Dense) (None, 24) 1560 \n", 72 | "_________________________________________________________________\n", 73 | "dense_2 (Dense) (None, 1) 25 \n", 74 | "=================================================================\n", 75 | "Total params: 76,977\n", 76 | "Trainable params: 76,977\n", 77 | "Non-trainable params: 0\n", 78 | "_________________________________________________________________\n", 79 | "None\n" 80 | ] 81 | }, 82 | { 83 | "name": "stderr", 84 | "output_type": "stream", 85 | "text": [ 86 | "W0110 14:37:51.500619 11872 deprecation_wrapper.py:119] From C:\\Users\\Smartgrid_ML\\Anaconda3\\envs\\tensorflow-gpu\\lib\\site-packages\\keras\\optimizers.py:790: The name tf.train.Optimizer is deprecated. Please use tf.compat.v1.train.Optimizer instead.\n", 87 | "\n", 88 | "W0110 14:38:01.157714 11872 deprecation_wrapper.py:119] From C:\\Users\\Smartgrid_ML\\Anaconda3\\envs\\tensorflow-gpu\\lib\\site-packages\\keras\\backend\\tensorflow_backend.py:986: The name tf.assign_add is deprecated. Please use tf.compat.v1.assign_add instead.\n", 89 | "\n", 90 | "W0110 14:38:01.844384 11872 deprecation_wrapper.py:119] From C:\\Users\\Smartgrid_ML\\Anaconda3\\envs\\tensorflow-gpu\\lib\\site-packages\\keras\\backend\\tensorflow_backend.py:973: The name tf.assign is deprecated. Please use tf.compat.v1.assign instead.\n", 91 | "\n" 92 | ] 93 | }, 94 | { 95 | "name": "stdout", 96 | "output_type": "stream", 97 | "text": [ 98 | "Train on 41997 samples, validate on 20983 samples\n", 99 | "Epoch 1/20\n", 100 | "41997/41997 [==============================] - 238s 6ms/step - loss: 0.0109 - mean_squared_error: 0.0109 - mean_absolute_error: 0.0818 - mean_absolute_percentage_error: 716.7462 - val_loss: 0.0164 - val_mean_squared_error: 0.0164 - val_mean_absolute_error: 0.1040 - val_mean_absolute_percentage_error: 19.9368\n", 101 | "Epoch 2/20\n", 102 | "41997/41997 [==============================] - 228s 5ms/step - loss: 0.0118 - mean_squared_error: 0.0118 - mean_absolute_error: 0.0855 - mean_absolute_percentage_error: 11712.2477 - val_loss: 0.0169 - val_mean_squared_error: 0.0169 - val_mean_absolute_error: 0.1079 - val_mean_absolute_percentage_error: 22.6663\n", 103 | "Epoch 3/20\n", 104 | "41997/41997 [==============================] - 229s 5ms/step - loss: 0.0248 - mean_squared_error: 0.0248 - mean_absolute_error: 0.1301 - mean_absolute_percentage_error: 13533.7465 - val_loss: 0.0162 - val_mean_squared_error: 0.0162 - val_mean_absolute_error: 0.1053 - val_mean_absolute_percentage_error: 21.6244\n", 105 | "Epoch 4/20\n", 106 | "41997/41997 [==============================] - 228s 5ms/step - loss: 0.0240 - mean_squared_error: 0.0240 - mean_absolute_error: 0.1276 - mean_absolute_percentage_error: 13229.2926 - val_loss: 0.0161 - val_mean_squared_error: 0.0161 - val_mean_absolute_error: 0.1047 - val_mean_absolute_percentage_error: 21.3662\n", 107 | "Epoch 5/20\n", 108 | "41997/41997 [==============================] - 228s 5ms/step - loss: 0.0237 - mean_squared_error: 0.0237 - mean_absolute_error: 0.1268 - mean_absolute_percentage_error: 13125.6324 - val_loss: 0.0158 - val_mean_squared_error: 0.0158 - val_mean_absolute_error: 0.1037 - val_mean_absolute_percentage_error: 21.2089\n", 109 | "Epoch 6/20\n", 110 | "41997/41997 [==============================] - 227s 5ms/step - loss: 0.0187 - mean_squared_error: 0.0187 - mean_absolute_error: 0.1096 - mean_absolute_percentage_error: 13004.9051 - val_loss: 0.0143 - val_mean_squared_error: 0.0143 - val_mean_absolute_error: 0.1027 - val_mean_absolute_percentage_error: 21.8239\n", 111 | "Epoch 7/20\n", 112 | "41997/41997 [==============================] - 229s 5ms/step - loss: 0.0056 - mean_squared_error: 0.0056 - mean_absolute_error: 0.0581 - mean_absolute_percentage_error: 7152.6876 - val_loss: 0.0048 - val_mean_squared_error: 0.0048 - val_mean_absolute_error: 0.0543 - val_mean_absolute_percentage_error: 10.6159\n", 113 | "Epoch 8/20\n", 114 | "41997/41997 [==============================] - 231s 5ms/step - loss: 0.0050 - mean_squared_error: 0.0050 - mean_absolute_error: 0.0551 - mean_absolute_percentage_error: 5342.1285 - val_loss: 0.0044 - val_mean_squared_error: 0.0044 - val_mean_absolute_error: 0.0524 - val_mean_absolute_percentage_error: 10.2534\n", 115 | "Epoch 9/20\n", 116 | "41997/41997 [==============================] - 228s 5ms/step - loss: 0.0045 - mean_squared_error: 0.0045 - mean_absolute_error: 0.0524 - mean_absolute_percentage_error: 4990.9161 - val_loss: 0.0040 - val_mean_squared_error: 0.0040 - val_mean_absolute_error: 0.0492 - val_mean_absolute_percentage_error: 9.5270\n", 117 | "Epoch 10/20\n", 118 | "41997/41997 [==============================] - 227s 5ms/step - loss: 0.0041 - mean_squared_error: 0.0041 - mean_absolute_error: 0.0499 - mean_absolute_percentage_error: 4685.1212 - val_loss: 0.0034 - val_mean_squared_error: 0.0034 - val_mean_absolute_error: 0.0445 - val_mean_absolute_percentage_error: 8.3817\n", 119 | "Epoch 11/20\n", 120 | "41997/41997 [==============================] - 229s 5ms/step - loss: 0.0032 - mean_squared_error: 0.0032 - mean_absolute_error: 0.0441 - mean_absolute_percentage_error: 4272.6337 - val_loss: 0.0022 - val_mean_squared_error: 0.0022 - val_mean_absolute_error: 0.0349 - val_mean_absolute_percentage_error: 6.3169\n", 121 | "Epoch 12/20\n", 122 | "41997/41997 [==============================] - 228s 5ms/step - loss: 0.0013 - mean_squared_error: 0.0013 - mean_absolute_error: 0.0281 - mean_absolute_percentage_error: 3454.5799 - val_loss: 0.0010 - val_mean_squared_error: 0.0010 - val_mean_absolute_error: 0.0243 - val_mean_absolute_percentage_error: 4.6068\n", 123 | "Epoch 13/20\n", 124 | "41997/41997 [==============================] - 227s 5ms/step - loss: 0.0011 - mean_squared_error: 0.0011 - mean_absolute_error: 0.0249 - mean_absolute_percentage_error: 2975.9994 - val_loss: 0.0010 - val_mean_squared_error: 0.0010 - val_mean_absolute_error: 0.0245 - val_mean_absolute_percentage_error: 4.6981\n", 125 | "Epoch 14/20\n", 126 | "41997/41997 [==============================] - 228s 5ms/step - loss: 9.5638e-04 - mean_squared_error: 9.5638e-04 - mean_absolute_error: 0.0234 - mean_absolute_percentage_error: 3117.7558 - val_loss: 9.1626e-04 - val_mean_squared_error: 9.1626e-04 - val_mean_absolute_error: 0.0231 - val_mean_absolute_percentage_error: 4.4140\n", 127 | "Epoch 15/20\n", 128 | "41997/41997 [==============================] - 227s 5ms/step - loss: 9.3771e-04 - mean_squared_error: 9.3771e-04 - mean_absolute_error: 0.0232 - mean_absolute_percentage_error: 2306.8489 - val_loss: 9.1572e-04 - val_mean_squared_error: 9.1572e-04 - val_mean_absolute_error: 0.0231 - val_mean_absolute_percentage_error: 4.4343\n", 129 | "Epoch 16/20\n", 130 | "41997/41997 [==============================] - 227s 5ms/step - loss: 9.2363e-04 - mean_squared_error: 9.2363e-04 - mean_absolute_error: 0.0230 - mean_absolute_percentage_error: 2284.1273 - val_loss: 8.9610e-04 - val_mean_squared_error: 8.9610e-04 - val_mean_absolute_error: 0.0227 - val_mean_absolute_percentage_error: 4.3112\n", 131 | "Epoch 17/20\n", 132 | "41997/41997 [==============================] - 227s 5ms/step - loss: 9.1550e-04 - mean_squared_error: 9.1550e-04 - mean_absolute_error: 0.0229 - mean_absolute_percentage_error: 2000.0142 - val_loss: 8.9577e-04 - val_mean_squared_error: 8.9577e-04 - val_mean_absolute_error: 0.0227 - val_mean_absolute_percentage_error: 4.3084\n", 133 | "Epoch 18/20\n", 134 | "41997/41997 [==============================] - 229s 5ms/step - loss: 9.1527e-04 - mean_squared_error: 9.1527e-04 - mean_absolute_error: 0.0228 - mean_absolute_percentage_error: 1995.6924 - val_loss: 8.9575e-04 - val_mean_squared_error: 8.9575e-04 - val_mean_absolute_error: 0.0227 - val_mean_absolute_percentage_error: 4.3083\n", 135 | "Epoch 19/20\n", 136 | "41997/41997 [==============================] - 228s 5ms/step - loss: 9.1525e-04 - mean_squared_error: 9.1525e-04 - mean_absolute_error: 0.0228 - mean_absolute_percentage_error: 1995.4322 - val_loss: 8.9575e-04 - val_mean_squared_error: 8.9575e-04 - val_mean_absolute_error: 0.0227 - val_mean_absolute_percentage_error: 4.3083\n", 137 | "Epoch 20/20\n", 138 | "41997/41997 [==============================] - 229s 5ms/step - loss: 9.1525e-04 - mean_squared_error: 9.1525e-04 - mean_absolute_error: 0.0228 - mean_absolute_percentage_error: 1995.4229 - val_loss: 8.9575e-04 - val_mean_squared_error: 8.9575e-04 - val_mean_absolute_error: 0.0227 - val_mean_absolute_percentage_error: 4.3083\n", 139 | "--------------------------------------------------------\n", 140 | " history.mses(=loss) = [0.010912979662081601, 0.011777041874593596, 0.024765182464252106, 0.023987828310508587, 0.023712375340139476, 0.018717295472398015, 0.005594932591742251, 0.00501221509577036, 0.004526509419582609, 0.004091679023573363, 0.003223783336141825, 0.0013368454282105884, 0.0010571797968390677, 0.0009563806597204008, 0.0009377112196951863, 0.0009236286886660571, 0.0009154966233835694, 0.0009152687508557072, 0.0009152549947951418, 0.0009152546693637008]\n", 141 | " history.maes = [0.08178628160089504, 0.08549289680043609, 0.13011348825840877, 0.12758092795256662, 0.12678889790522155, 0.10958123975807628, 0.05806096647245477, 0.05507880627225844, 0.05238975357398844, 0.04989152749759128, 0.04413501666592459, 0.028148059543807367, 0.024885874250815686, 0.023406303422365635, 0.023196076435885477, 0.02303265071418953, 0.02285632986264813, 0.02284989511253066, 0.02284950276722192, 0.022849488274984894]\n", 142 | " history.mapes = [716.7461951069682, 11712.247733068372, 13533.746503625196, 13229.292640354712, 13125.632423381316, 13004.90506074944, 7152.687552918444, 5342.128474365244, 4990.916140008183, 4685.121247973842, 4272.633694719365, 3454.5798672806477, 2975.9993837138545, 3117.755832144336, 2306.848941119446, 2284.1273097167978, 2000.0142042122532, 1995.6924389661526, 1995.432152633074, 1995.4229199594295]\n", 143 | " history.val_mses(=loss)= [0.01644057335954486, 0.016927681158369155, 0.016218073233722916, 0.016085165211676904, 0.01579150735708957, 0.01425129665278961, 0.004785387124637666, 0.004442976482020536, 0.003996114982011545, 0.003447856689740143, 0.0022434228184291063, 0.0010237185715436768, 0.0010145385173303731, 0.0009162611444222731, 0.0009157224973290058, 0.000896097224972743, 0.0008957688042605662, 0.0008957518981696003, 0.0008957511349232763, 0.0008957510881141417]\n", 144 | " history.val_maes = [0.10395143430349638, 0.10785982269540402, 0.1052715969023626, 0.1047059702431088, 0.1037343656061455, 0.10274209876930965, 0.05432701965865249, 0.052430972918887236, 0.049228047312473495, 0.04451614258146795, 0.034910026005113434, 0.024333501699002554, 0.024455085081724597, 0.02305987782393583, 0.023099574059306915, 0.022678805831366163, 0.022670390128592958, 0.02266994594822111, 0.022669922263786585, 0.02266992149007381]\n", 145 | " history.val_mapes = [19.936803828566088, 22.66626517024911, 21.624373954329723, 21.366245426759193, 21.20887703298585, 21.823862060625412, 10.615927015389193, 10.253369697822048, 9.526962384989904, 8.381711460754005, 6.316881626195325, 4.606799999944806, 4.698080556519816, 4.4140365747207175, 4.434348780860132, 4.311165258097352, 4.308422959646801, 4.308273808674244, 4.3082657464721015, 4.3082655425386]\n", 146 | "--------------------------------------------------------\n" 147 | ] 148 | }, 149 | { 150 | "data": { 151 | "text/plain": [ 152 | "
" 153 | ] 154 | }, 155 | "metadata": {}, 156 | "output_type": "display_data" 157 | }, 158 | { 159 | "data": { 160 | "text/plain": [ 161 | "
" 162 | ] 163 | }, 164 | "metadata": {}, 165 | "output_type": "display_data" 166 | }, 167 | { 168 | "name": "stdout", 169 | "output_type": "stream", 170 | "text": [ 171 | "Test Score > MSE == 0.0008310659956060693 MAE == 0.02195041727659361 MAPE == 3.946298580183479\n" 172 | ] 173 | } 174 | ], 175 | "source": [ 176 | "import pandas as pd\n", 177 | "import tensorflow as tf\n", 178 | "import codecs\n", 179 | "import numpy as np\n", 180 | "import math\n", 181 | "import csv\n", 182 | "from sklearn.preprocessing import MinMaxScaler\n", 183 | "from sklearn.metrics import mean_squared_error\n", 184 | "from sklearn.metrics import mean_absolute_error\n", 185 | "from sklearn.metrics import recall_score, precision_score # New\n", 186 | "from sklearn.metrics import f1_score\n", 187 | "from sklearn.metrics import confusion_matrix\n", 188 | "from sklearn import preprocessing\n", 189 | "import keras\n", 190 | "import matplotlib.pyplot as plt\n", 191 | "from keras.callbacks import ModelCheckpoint, CSVLogger, EarlyStopping, LearningRateScheduler, ReduceLROnPlateau\n", 192 | "from keras.layers import merge\n", 193 | "from keras.models import Sequential, Model\n", 194 | "from keras.layers import Dense, Input, Flatten, Add\n", 195 | "from keras.layers import Activation, BatchNormalization, regularizers\n", 196 | "from keras.layers.convolutional import Conv1D\n", 197 | "from keras.layers.convolutional import MaxPooling1D\n", 198 | "from keras.layers.merge import concatenate\n", 199 | "from keras.layers import LSTM, Bidirectional\n", 200 | "from keras.utils import plot_model\n", 201 | "from keras.layers import Dropout\n", 202 | "from scipy import signal\n", 203 | "from IPython.display import SVG\n", 204 | "from keras.utils.vis_utils import model_to_dot\n", 205 | "from keras.utils import plot_model\n", 206 | "import openpyxl\n", 207 | "\n", 208 | "from keras.backend import tensorflow_backend as K\n", 209 | "config = tf.ConfigProto()\n", 210 | "config.gpu_options.allow_growth = True\n", 211 | "K.set_session(tf.Session(config=config))\n", 212 | "\n", 213 | "class LossHistory(keras.callbacks.Callback): # history = LossHistory()\n", 214 | " def init(self): # history.init()\n", 215 | " self.losses = []\n", 216 | " # self.accs = []\n", 217 | " self.val_losses = []\n", 218 | " # self.val_accs = []\n", 219 | " self.mses = []\n", 220 | " self.maes = []\n", 221 | " self.mapes = []\n", 222 | " self.val_mses = []\n", 223 | " self.val_maes = []\n", 224 | " self.val_mapes = []\n", 225 | "\n", 226 | " def on_epoch_end(self, batch, logs={}):\n", 227 | " self.losses.append(logs.get('loss'))\n", 228 | " # self.accs.append(logs.get('acc'))\n", 229 | " self.val_losses.append(logs.get('val_loss'))\n", 230 | " # self.val_accs.append(logs.get('val_accuracy\n", 231 | " self.mses.append(logs.get('mean_squared_error'))\n", 232 | " self.maes.append(logs.get('mean_absolute_error'))\n", 233 | " self.mapes.append(logs.get('mean_absolute_percentage_error'))\n", 234 | " self.val_mses.append(logs.get('val_mean_squared_error'))\n", 235 | " self.val_maes.append(logs.get('val_mean_absolute_error'))\n", 236 | " self.val_mapes.append(logs.get('val_mean_absolute_percentage_error'))\n", 237 | "\n", 238 | "def create_dataset(dataset, timesteps):\n", 239 | " dataX, dataY = [], []\n", 240 | " for i in range(len(dataset) - timesteps - 1):\n", 241 | " a = dataset[i:(i + timesteps), 0]\n", 242 | " dataX.append(a)\n", 243 | " dataY.append(dataset[i + timesteps, 0])\n", 244 | " return np.array(dataX), np.array(dataY)\n", 245 | "\n", 246 | "def mean_absolute_percentage_error(y_true, y_pred):\n", 247 | " y_true, y_pred = np.array(y_true), np.array(y_pred)\n", 248 | " return np.mean(np.abs((y_true - y_pred) / y_true)) * 100\n", 249 | "\n", 250 | "data_path = 'C:/Users/Smartgrid_ML/Desktop/KMS/climate_hour.csv'\n", 251 | "data_source = pd.read_csv(data_path)\n", 252 | "data_source = pd.DataFrame(data_source)\n", 253 | "data_set = data_source.iloc[:, 2]\n", 254 | "data = np.array(data_set)\n", 255 | "data = data.reshape(-1, 1)\n", 256 | "scaler = MinMaxScaler(feature_range=(0, 1))\n", 257 | "data = scaler.fit_transform(data)\n", 258 | "Maxvalue_1 = scaler.data_max_\n", 259 | "print(data.shape)\n", 260 | "\n", 261 | "Tr_mean = np.nanmean(data)\n", 262 | "Tr_var = np.nanvar(data)\n", 263 | "\n", 264 | "print('Dataset mean = ', Tr_mean, 'var = ', Tr_var)\n", 265 | "print('Maximum value = ', Maxvalue_1)\n", 266 | "\n", 267 | "Training_set = data[0:42022, :]\n", 268 | "Validation_set = data[42023:63031, :]\n", 269 | "Test_set = data[63032:, :]\n", 270 | "\n", 271 | "features = 1\n", 272 | "timesteps = 24\n", 273 | "trainX, trainY = create_dataset(Training_set, timesteps)\n", 274 | "validX, validY = create_dataset(Validation_set, timesteps)\n", 275 | "testX, testY = create_dataset(Test_set, timesteps)\n", 276 | "\n", 277 | "trainX = np.reshape(trainX, (trainX.shape[0], trainX.shape[1], 1))\n", 278 | "validX = np.reshape(validX, (validX.shape[0], validX.shape[1], 1))\n", 279 | "testX = np.reshape(testX, (testX.shape[0], testX.shape[1], 1))\n", 280 | "\n", 281 | "# -----------------------------------------------------------------------------------------------------------\n", 282 | "# -----------------------------------------------------------------------------------------------------------\n", 283 | "import keras.backend.tensorflow_backend as K\n", 284 | "with K.tf.device('/gpu:0'):\n", 285 | " \n", 286 | " visible1 = Input(shape=(timesteps, features))\n", 287 | "\n", 288 | " bi11 = (Bidirectional(LSTM(16, return_sequences=True)))(visible1) ### success\n", 289 | " bi12 = (Bidirectional(LSTM(16, return_sequences=True)))(bi11)\n", 290 | " bi13 = (Bidirectional(LSTM(16, return_sequences=True)))(bi12)\n", 291 | " bi14 = (Bidirectional(LSTM(16, return_sequences=True)))(bi13)\n", 292 | " bi15 = (Bidirectional(LSTM(16, return_sequences=True)))(bi14)\n", 293 | " bi16 = (Bidirectional(LSTM(16, return_sequences=True)))(bi15)\n", 294 | " bi17 = (Bidirectional(LSTM(16, return_sequences=True)))(bi16)\n", 295 | " bi18 = (Bidirectional(LSTM(16, return_sequences=True)))(bi17)\n", 296 | " bi19 = (Bidirectional(LSTM(16, return_sequences=True)))(bi18)\n", 297 | " bi20 = (Bidirectional(LSTM(16, return_sequences=True)))(bi19)\n", 298 | " bi21 = (Bidirectional(LSTM(32)))(bi20)\n", 299 | "\n", 300 | " dense11 = Dense(24, activation='selu')(bi21)\n", 301 | " out1 = Dense(1, activation='selu')(dense11)\n", 302 | "\n", 303 | " model = Model(inputs=[visible1], outputs=[out1]) # multi-input, multi-output\n", 304 | "\n", 305 | "#########################################\n", 306 | "\n", 307 | "print(model.summary())\n", 308 | "plot_model(model, to_file='C:/Users/Smartgrid_ML/Documents/KMS/DRNet-3_Structure.svg')\n", 309 | "SVG(model_to_dot(model, show_shapes=True).create(prog='dot', format='svg'))\n", 310 | "\n", 311 | "reducelr = ReduceLROnPlateau(monitor='val_loss', factor=0.1, patience=1) # 에포크 1동안 좋아지지 않으면 호출\n", 312 | "\n", 313 | "model.compile(loss='mean_squared_error', optimizer='adam', metrics=['mse', 'mae', 'mape'])\n", 314 | "\n", 315 | "batch_size = 100\n", 316 | "epochs = 20\n", 317 | "\n", 318 | "history = LossHistory()\n", 319 | "history.init()\n", 320 | "\n", 321 | "model.fit(trainX, trainY, epochs=epochs, batch_size=batch_size, shuffle=False, validation_data=(validX, validY), callbacks=[history, reducelr]) # , checkpoint\n", 322 | "\n", 323 | "trainPredict = model.predict(trainX, batch_size=batch_size)\n", 324 | "validPredict = model.predict(validX, batch_size=batch_size)\n", 325 | "testPredict = model.predict(testX, batch_size=batch_size)\n", 326 | "\n", 327 | "trainPredict = trainPredict.reshape([-1])\n", 328 | "validPredict = validPredict.reshape([-1])\n", 329 | "testPredict = testPredict.reshape([-1])\n", 330 | "testY = testY.reshape([-1])\n", 331 | "validY = validY.reshape([-1])\n", 332 | "trainY = trainY.reshape([-1])\n", 333 | "\n", 334 | "np.savetxt('trainPredict_5.txt', trainPredict)\n", 335 | "np.savetxt('testPredict_5.txt', testPredict)\n", 336 | "np.savetxt('validPredict_5.txt', validPredict)\n", 337 | "np.savetxt('testY_5.txt', testY)\n", 338 | "np.savetxt('validY_5.txt', validY)\n", 339 | "np.savetxt('trainY_5.txt', trainY)\n", 340 | "\n", 341 | "print('--------------------------------------------------------')\n", 342 | "print(' history.mses(=loss) = ', history.mses) # loss == mse\n", 343 | "print(' history.maes = ', history.maes)\n", 344 | "print(' history.mapes = ', history.mapes)\n", 345 | "print(' history.val_mses(=loss)= ', history.val_mses) # loss == mse\n", 346 | "print(' history.val_maes = ', history.val_maes)\n", 347 | "print(' history.val_mapes = ', history.val_mapes)\n", 348 | "print('--------------------------------------------------------')\n", 349 | "\n", 350 | "plt.figure(1)\n", 351 | "plt.plot(testPredict, 'r')\n", 352 | "plt.plot(testY, 'b')\n", 353 | "plt.show()\n", 354 | "\n", 355 | "plt.figure(2)\n", 356 | "plt.plot(history.mses, 'b--')\n", 357 | "plt.plot(history.val_mses, 'b:')\n", 358 | "plt.plot(history.maes, 'ro')\n", 359 | "plt.plot(history.val_maes, 'r+')\n", 360 | "plt.ylabel('Loss and Accuracy')\n", 361 | "plt.xlabel('epoch')\n", 362 | "plt.show()\n", 363 | "\n", 364 | "print('Test Score > MSE == ', mean_squared_error(testY, testPredict), ' MAE == ', mean_absolute_error(testY, testPredict), 'MAPE == ', mean_absolute_percentage_error(testY, testPredict))" 365 | ] 366 | }, 367 | { 368 | "cell_type": "code", 369 | "execution_count": null, 370 | "metadata": {}, 371 | "outputs": [], 372 | "source": [] 373 | } 374 | ], 375 | "metadata": { 376 | "kernelspec": { 377 | "display_name": "Python 3", 378 | "language": "python", 379 | "name": "python3" 380 | }, 381 | "language_info": { 382 | "codemirror_mode": { 383 | "name": "ipython", 384 | "version": 3 385 | }, 386 | "file_extension": ".py", 387 | "mimetype": "text/x-python", 388 | "name": "python", 389 | "nbconvert_exporter": "python", 390 | "pygments_lexer": "ipython3", 391 | "version": "3.6.9" 392 | } 393 | }, 394 | "nbformat": 4, 395 | "nbformat_minor": 4 396 | } 397 | -------------------------------------------------------------------------------- /Jena_ResNet.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": {}, 7 | "outputs": [ 8 | { 9 | "name": "stderr", 10 | "output_type": "stream", 11 | "text": [ 12 | "Using TensorFlow backend.\n", 13 | "WARNING: Logging before flag parsing goes to stderr.\n", 14 | "W0110 12:52:06.749966 612 deprecation_wrapper.py:119] From C:\\Users\\Smartgrid_ML\\Anaconda3\\envs\\tensorflow-gpu\\lib\\site-packages\\keras\\backend\\tensorflow_backend.py:74: The name tf.get_default_graph is deprecated. Please use tf.compat.v1.get_default_graph instead.\n", 15 | "\n", 16 | "W0110 12:52:06.750966 612 deprecation_wrapper.py:119] From C:\\Users\\Smartgrid_ML\\Anaconda3\\envs\\tensorflow-gpu\\lib\\site-packages\\keras\\backend\\tensorflow_backend.py:517: The name tf.placeholder is deprecated. Please use tf.compat.v1.placeholder instead.\n", 17 | "\n", 18 | "W0110 12:52:06.753967 612 deprecation_wrapper.py:119] From C:\\Users\\Smartgrid_ML\\Anaconda3\\envs\\tensorflow-gpu\\lib\\site-packages\\keras\\backend\\tensorflow_backend.py:4138: The name tf.random_uniform is deprecated. Please use tf.random.uniform instead.\n", 19 | "\n" 20 | ] 21 | }, 22 | { 23 | "name": "stdout", 24 | "output_type": "stream", 25 | "text": [ 26 | "(70037, 1)\n", 27 | "Dataset mean = 0.5363373411352942 var = 0.01966813341576947\n", 28 | "Maximum value = [37.28]\n" 29 | ] 30 | }, 31 | { 32 | "name": "stderr", 33 | "output_type": "stream", 34 | "text": [ 35 | "W0110 12:52:09.900158 612 deprecation.py:323] From C:\\Users\\Smartgrid_ML\\Anaconda3\\envs\\tensorflow-gpu\\lib\\site-packages\\keras\\backend\\tensorflow_backend.py:3217: add_dispatch_support..wrapper (from tensorflow.python.ops.array_ops) is deprecated and will be removed in a future version.\n", 36 | "Instructions for updating:\n", 37 | "Use tf.where in 2.0, which has the same broadcast rule as np.where\n" 38 | ] 39 | }, 40 | { 41 | "name": "stdout", 42 | "output_type": "stream", 43 | "text": [ 44 | "__________________________________________________________________________________________________\n", 45 | "Layer (type) Output Shape Param # Connected to \n", 46 | "==================================================================================================\n", 47 | "input_1 (InputLayer) (None, 24, 1) 0 \n", 48 | "__________________________________________________________________________________________________\n", 49 | "bidirectional_1 (Bidirectional) (None, 24, 32) 2304 input_1[0][0] \n", 50 | "__________________________________________________________________________________________________\n", 51 | "bidirectional_2 (Bidirectional) (None, 24, 32) 6272 bidirectional_1[0][0] \n", 52 | "__________________________________________________________________________________________________\n", 53 | "add_1 (Add) (None, 24, 32) 0 bidirectional_2[0][0] \n", 54 | " input_1[0][0] \n", 55 | "__________________________________________________________________________________________________\n", 56 | "bidirectional_3 (Bidirectional) (None, 24, 32) 6272 add_1[0][0] \n", 57 | "__________________________________________________________________________________________________\n", 58 | "bidirectional_4 (Bidirectional) (None, 24, 32) 6272 bidirectional_3[0][0] \n", 59 | "__________________________________________________________________________________________________\n", 60 | "add_2 (Add) (None, 24, 32) 0 add_1[0][0] \n", 61 | " bidirectional_4[0][0] \n", 62 | "__________________________________________________________________________________________________\n", 63 | "bidirectional_5 (Bidirectional) (None, 24, 32) 6272 add_2[0][0] \n", 64 | "__________________________________________________________________________________________________\n", 65 | "bidirectional_6 (Bidirectional) (None, 24, 32) 6272 bidirectional_5[0][0] \n", 66 | "__________________________________________________________________________________________________\n", 67 | "bidirectional_7 (Bidirectional) (None, 24, 32) 6272 bidirectional_6[0][0] \n", 68 | "__________________________________________________________________________________________________\n", 69 | "add_3 (Add) (None, 24, 32) 0 add_2[0][0] \n", 70 | " bidirectional_6[0][0] \n", 71 | " input_1[0][0] \n", 72 | "__________________________________________________________________________________________________\n", 73 | "bidirectional_8 (Bidirectional) (None, 24, 32) 6272 bidirectional_7[0][0] \n", 74 | "__________________________________________________________________________________________________\n", 75 | "add_4 (Add) (None, 24, 32) 0 add_3[0][0] \n", 76 | " bidirectional_8[0][0] \n", 77 | "__________________________________________________________________________________________________\n", 78 | "bidirectional_9 (Bidirectional) (None, 24, 32) 6272 add_4[0][0] \n", 79 | "__________________________________________________________________________________________________\n", 80 | "bidirectional_10 (Bidirectional (None, 24, 32) 6272 bidirectional_9[0][0] \n", 81 | "__________________________________________________________________________________________________\n", 82 | "add_5 (Add) (None, 24, 32) 0 add_4[0][0] \n", 83 | " bidirectional_10[0][0] \n", 84 | " input_1[0][0] \n", 85 | "__________________________________________________________________________________________________\n", 86 | "bidirectional_11 (Bidirectional (None, 64) 16640 add_5[0][0] \n", 87 | "__________________________________________________________________________________________________\n", 88 | "dense_1 (Dense) (None, 24) 1560 bidirectional_11[0][0] \n", 89 | "__________________________________________________________________________________________________\n", 90 | "dense_2 (Dense) (None, 1) 25 dense_1[0][0] \n", 91 | "==================================================================================================\n", 92 | "Total params: 76,977\n", 93 | "Trainable params: 76,977\n", 94 | "Non-trainable params: 0\n", 95 | "__________________________________________________________________________________________________\n", 96 | "None\n" 97 | ] 98 | }, 99 | { 100 | "name": "stderr", 101 | "output_type": "stream", 102 | "text": [ 103 | "W0110 12:52:14.441641 612 deprecation_wrapper.py:119] From C:\\Users\\Smartgrid_ML\\Anaconda3\\envs\\tensorflow-gpu\\lib\\site-packages\\keras\\optimizers.py:790: The name tf.train.Optimizer is deprecated. Please use tf.compat.v1.train.Optimizer instead.\n", 104 | "\n", 105 | "W0110 12:52:23.988851 612 deprecation_wrapper.py:119] From C:\\Users\\Smartgrid_ML\\Anaconda3\\envs\\tensorflow-gpu\\lib\\site-packages\\keras\\backend\\tensorflow_backend.py:986: The name tf.assign_add is deprecated. Please use tf.compat.v1.assign_add instead.\n", 106 | "\n", 107 | "W0110 12:52:24.631872 612 deprecation_wrapper.py:119] From C:\\Users\\Smartgrid_ML\\Anaconda3\\envs\\tensorflow-gpu\\lib\\site-packages\\keras\\backend\\tensorflow_backend.py:973: The name tf.assign is deprecated. Please use tf.compat.v1.assign instead.\n", 108 | "\n" 109 | ] 110 | }, 111 | { 112 | "name": "stdout", 113 | "output_type": "stream", 114 | "text": [ 115 | "Train on 41997 samples, validate on 20983 samples\n", 116 | "Epoch 1/20\n", 117 | "41997/41997 [==============================] - 237s 6ms/step - loss: 0.0041 - mean_squared_error: 0.0041 - mean_absolute_error: 0.0379 - mean_absolute_percentage_error: 5657.0711 - val_loss: 3.5553e-04 - val_mean_squared_error: 3.5553e-04 - val_mean_absolute_error: 0.0144 - val_mean_absolute_percentage_error: 2.8711\n", 118 | "Epoch 2/20\n", 119 | "41997/41997 [==============================] - 226s 5ms/step - loss: 3.3299e-04 - mean_squared_error: 3.3299e-04 - mean_absolute_error: 0.0136 - mean_absolute_percentage_error: 1172.6879 - val_loss: 2.7795e-04 - val_mean_squared_error: 2.7795e-04 - val_mean_absolute_error: 0.0130 - val_mean_absolute_percentage_error: 2.6647\n", 120 | "Epoch 3/20\n", 121 | "41997/41997 [==============================] - 225s 5ms/step - loss: 2.0695e-04 - mean_squared_error: 2.0695e-04 - mean_absolute_error: 0.0102 - mean_absolute_percentage_error: 1457.8139 - val_loss: 2.1225e-04 - val_mean_squared_error: 2.1225e-04 - val_mean_absolute_error: 0.0104 - val_mean_absolute_percentage_error: 1.9332\n", 122 | "Epoch 4/20\n", 123 | "41997/41997 [==============================] - 225s 5ms/step - loss: 1.9414e-04 - mean_squared_error: 1.9414e-04 - mean_absolute_error: 0.0098 - mean_absolute_percentage_error: 983.8114 - val_loss: 1.9365e-04 - val_mean_squared_error: 1.9365e-04 - val_mean_absolute_error: 0.0098 - val_mean_absolute_percentage_error: 1.8411\n", 124 | "Epoch 5/20\n", 125 | "41997/41997 [==============================] - 226s 5ms/step - loss: 1.8883e-04 - mean_squared_error: 1.8883e-04 - mean_absolute_error: 0.0096 - mean_absolute_percentage_error: 983.4790 - val_loss: 1.9213e-04 - val_mean_squared_error: 1.9213e-04 - val_mean_absolute_error: 0.0100 - val_mean_absolute_percentage_error: 1.9295\n", 126 | "Epoch 6/20\n", 127 | "41997/41997 [==============================] - 226s 5ms/step - loss: 1.9372e-04 - mean_squared_error: 1.9372e-04 - mean_absolute_error: 0.0099 - mean_absolute_percentage_error: 1028.5626 - val_loss: 1.8644e-04 - val_mean_squared_error: 1.8644e-04 - val_mean_absolute_error: 0.0097 - val_mean_absolute_percentage_error: 1.8624\n", 128 | "Epoch 7/20\n", 129 | "41997/41997 [==============================] - 225s 5ms/step - loss: 1.8928e-04 - mean_squared_error: 1.8928e-04 - mean_absolute_error: 0.0097 - mean_absolute_percentage_error: 965.7937 - val_loss: 1.8488e-04 - val_mean_squared_error: 1.8488e-04 - val_mean_absolute_error: 0.0096 - val_mean_absolute_percentage_error: 1.8325\n", 130 | "Epoch 8/20\n", 131 | "41997/41997 [==============================] - 225s 5ms/step - loss: 1.8860e-04 - mean_squared_error: 1.8860e-04 - mean_absolute_error: 0.0096 - mean_absolute_percentage_error: 954.2880 - val_loss: 1.8485e-04 - val_mean_squared_error: 1.8485e-04 - val_mean_absolute_error: 0.0096 - val_mean_absolute_percentage_error: 1.8319\n", 132 | "Epoch 9/20\n", 133 | "41997/41997 [==============================] - 225s 5ms/step - loss: 1.8858e-04 - mean_squared_error: 1.8858e-04 - mean_absolute_error: 0.0096 - mean_absolute_percentage_error: 953.8966 - val_loss: 1.8485e-04 - val_mean_squared_error: 1.8485e-04 - val_mean_absolute_error: 0.0096 - val_mean_absolute_percentage_error: 1.8318\n", 134 | "Epoch 10/20\n", 135 | "41997/41997 [==============================] - 226s 5ms/step - loss: 1.8858e-04 - mean_squared_error: 1.8858e-04 - mean_absolute_error: 0.0096 - mean_absolute_percentage_error: 953.8840 - val_loss: 1.8485e-04 - val_mean_squared_error: 1.8485e-04 - val_mean_absolute_error: 0.0096 - val_mean_absolute_percentage_error: 1.8318\n", 136 | "Epoch 11/20\n", 137 | "41997/41997 [==============================] - 225s 5ms/step - loss: 1.8858e-04 - mean_squared_error: 1.8858e-04 - mean_absolute_error: 0.0096 - mean_absolute_percentage_error: 953.8833 - val_loss: 1.8485e-04 - val_mean_squared_error: 1.8485e-04 - val_mean_absolute_error: 0.0096 - val_mean_absolute_percentage_error: 1.8318\n", 138 | "Epoch 12/20\n", 139 | "41997/41997 [==============================] - 227s 5ms/step - loss: 1.8858e-04 - mean_squared_error: 1.8858e-04 - mean_absolute_error: 0.0096 - mean_absolute_percentage_error: 953.8818 - val_loss: 1.8485e-04 - val_mean_squared_error: 1.8485e-04 - val_mean_absolute_error: 0.0096 - val_mean_absolute_percentage_error: 1.8318\n", 140 | "Epoch 13/20\n", 141 | "41997/41997 [==============================] - 226s 5ms/step - loss: 1.8858e-04 - mean_squared_error: 1.8858e-04 - mean_absolute_error: 0.0096 - mean_absolute_percentage_error: 953.8818 - val_loss: 1.8485e-04 - val_mean_squared_error: 1.8485e-04 - val_mean_absolute_error: 0.0096 - val_mean_absolute_percentage_error: 1.8318\n", 142 | "Epoch 14/20\n", 143 | "41997/41997 [==============================] - 227s 5ms/step - loss: 1.8858e-04 - mean_squared_error: 1.8858e-04 - mean_absolute_error: 0.0096 - mean_absolute_percentage_error: 953.8818 - val_loss: 1.8485e-04 - val_mean_squared_error: 1.8485e-04 - val_mean_absolute_error: 0.0096 - val_mean_absolute_percentage_error: 1.8318\n", 144 | "Epoch 15/20\n", 145 | "41997/41997 [==============================] - 226s 5ms/step - loss: 1.8858e-04 - mean_squared_error: 1.8858e-04 - mean_absolute_error: 0.0096 - mean_absolute_percentage_error: 953.8818 - val_loss: 1.8485e-04 - val_mean_squared_error: 1.8485e-04 - val_mean_absolute_error: 0.0096 - val_mean_absolute_percentage_error: 1.8318\n", 146 | "Epoch 16/20\n", 147 | "41997/41997 [==============================] - 225s 5ms/step - loss: 1.8858e-04 - mean_squared_error: 1.8858e-04 - mean_absolute_error: 0.0096 - mean_absolute_percentage_error: 953.8818 - val_loss: 1.8485e-04 - val_mean_squared_error: 1.8485e-04 - val_mean_absolute_error: 0.0096 - val_mean_absolute_percentage_error: 1.8318\n", 148 | "Epoch 17/20\n", 149 | "41997/41997 [==============================] - 226s 5ms/step - loss: 1.8858e-04 - mean_squared_error: 1.8858e-04 - mean_absolute_error: 0.0096 - mean_absolute_percentage_error: 953.8818 - val_loss: 1.8485e-04 - val_mean_squared_error: 1.8485e-04 - val_mean_absolute_error: 0.0096 - val_mean_absolute_percentage_error: 1.8318\n", 150 | "Epoch 18/20\n", 151 | "41997/41997 [==============================] - 227s 5ms/step - loss: 1.8858e-04 - mean_squared_error: 1.8858e-04 - mean_absolute_error: 0.0096 - mean_absolute_percentage_error: 953.8818 - val_loss: 1.8485e-04 - val_mean_squared_error: 1.8485e-04 - val_mean_absolute_error: 0.0096 - val_mean_absolute_percentage_error: 1.8318\n", 152 | "Epoch 19/20\n", 153 | "41997/41997 [==============================] - 227s 5ms/step - loss: 1.8858e-04 - mean_squared_error: 1.8858e-04 - mean_absolute_error: 0.0096 - mean_absolute_percentage_error: 953.8818 - val_loss: 1.8485e-04 - val_mean_squared_error: 1.8485e-04 - val_mean_absolute_error: 0.0096 - val_mean_absolute_percentage_error: 1.8318\n", 154 | "Epoch 20/20\n", 155 | "41997/41997 [==============================] - 228s 5ms/step - loss: 1.8858e-04 - mean_squared_error: 1.8858e-04 - mean_absolute_error: 0.0096 - mean_absolute_percentage_error: 953.8818 - val_loss: 1.8485e-04 - val_mean_squared_error: 1.8485e-04 - val_mean_absolute_error: 0.0096 - val_mean_absolute_percentage_error: 1.8318\n", 156 | "--------------------------------------------------------\n", 157 | " history.mses(=loss) = [0.004071939642654627, 0.0003329938121443101, 0.00020695224021124886, 0.00019413899585175626, 0.00018882697839128656, 0.0001937182798662494, 0.0001892828373950874, 0.00018860143480577298, 0.00018858084993371088, 0.00018858027501473, 0.00018858026120258995, 0.0001885802696884352, 0.00018858026925964278, 0.00018858026925964278, 0.00018858026925964278, 0.00018858026925964278, 0.00018858026925964278, 0.00018858026925964278, 0.00018858026925964278, 0.00018858026925964278]\n", 158 | " history.maes = [0.03789227242874557, 0.013632669249958387, 0.010190355838848473, 0.009809090908339405, 0.009590771617097982, 0.009852633970911868, 0.009677105502862772, 0.009631647252133247, 0.009630400889367983, 0.009630361165467534, 0.009630360509082152, 0.009630360657793945, 0.00963036065613075, 0.00963036065613075, 0.00963036065613075, 0.00963036065613075, 0.00963036065613075, 0.00963036065613075, 0.00963036065613075, 0.00963036065613075]\n", 159 | " history.mapes = [5657.071053229062, 1172.6878590737024, 1457.813906032111, 983.8114468349395, 983.4790299202961, 1028.5626053952813, 965.7937048501019, 954.2880141283099, 953.8965735997342, 953.8839866346066, 953.8833167366173, 953.881754163907, 953.8817541634812, 953.8817541634812, 953.8817541634812, 953.8817541634812, 953.8817541634812, 953.8817541634812, 953.8817541634812, 953.8817541634812]\n", 160 | " history.val_mses(=loss)= [0.0003555267424928759, 0.0002779476967218478, 0.00021224675369532016, 0.00019365366369913128, 0.00019213493714663295, 0.0001864379825275968, 0.0001848785664963421, 0.00018484770580715407, 0.00018484673161440693, 0.00018484671592929676, 0.00018484670259535804, 0.00018484670041513674, 0.00018484670041513674, 0.00018484670041513674, 0.00018484670041513674, 0.00018484670041513674, 0.00018484670041513674, 0.00018484670041513674, 0.00018484670041513674, 0.00018484670041513674]\n", 161 | " history.val_maes = [0.014429657822513452, 0.01297894218963282, 0.010358279111578486, 0.009788415731780253, 0.009979536591274096, 0.00969415389869799, 0.00958513338452564, 0.009582873259707473, 0.009582798463381944, 0.009582795987363477, 0.009582796148213356, 0.009582796184830671, 0.009582796184830671, 0.009582796184830671, 0.009582796184830671, 0.009582796184830671, 0.009582796184830671, 0.009582796184830671, 0.009582796184830671, 0.009582796184830671]\n", 162 | " history.val_mapes = [2.871078043143538, 2.6646606710921454, 1.9332481243076005, 1.8411305143648748, 1.9295210516305645, 1.8623930181577744, 1.8324759159779882, 1.8318538623162246, 1.831832638449524, 1.8318320142412097, 1.8318320514419164, 1.8318320432041302, 1.8318320432041302, 1.8318320432041302, 1.8318320432041302, 1.8318320432041302, 1.8318320432041302, 1.8318320432041302, 1.8318320432041302, 1.8318320432041302]\n", 163 | "--------------------------------------------------------\n" 164 | ] 165 | }, 166 | { 167 | "data": { 168 | "text/plain": [ 169 | "
" 170 | ] 171 | }, 172 | "metadata": {}, 173 | "output_type": "display_data" 174 | }, 175 | { 176 | "data": { 177 | "text/plain": [ 178 | "
" 179 | ] 180 | }, 181 | "metadata": {}, 182 | "output_type": "display_data" 183 | }, 184 | { 185 | "name": "stdout", 186 | "output_type": "stream", 187 | "text": [ 188 | "Test Score > MSE == 0.00017880214901398527 MAE == 0.009525361321326116 MAPE == 1.7086055209708955\n" 189 | ] 190 | } 191 | ], 192 | "source": [ 193 | "import pandas as pd\n", 194 | "import tensorflow as tf\n", 195 | "import codecs\n", 196 | "import numpy as np\n", 197 | "import math\n", 198 | "import csv\n", 199 | "from sklearn.preprocessing import MinMaxScaler\n", 200 | "from sklearn.metrics import mean_squared_error\n", 201 | "from sklearn.metrics import mean_absolute_error\n", 202 | "from sklearn.metrics import recall_score, precision_score # New\n", 203 | "from sklearn.metrics import f1_score\n", 204 | "from sklearn.metrics import confusion_matrix\n", 205 | "from sklearn import preprocessing\n", 206 | "import keras\n", 207 | "import matplotlib.pyplot as plt\n", 208 | "from keras.callbacks import ModelCheckpoint, CSVLogger, EarlyStopping, LearningRateScheduler, ReduceLROnPlateau\n", 209 | "from keras.layers import merge\n", 210 | "from keras.models import Sequential, Model\n", 211 | "from keras.layers import Dense, Input, Flatten, Add\n", 212 | "from keras.layers import Activation, BatchNormalization, regularizers\n", 213 | "from keras.layers.convolutional import Conv1D\n", 214 | "from keras.layers.convolutional import MaxPooling1D\n", 215 | "from keras.layers.merge import concatenate\n", 216 | "from keras.layers import LSTM, Bidirectional\n", 217 | "from keras.utils import plot_model\n", 218 | "from keras.layers import Dropout\n", 219 | "from scipy import signal\n", 220 | "from IPython.display import SVG\n", 221 | "from keras.utils.vis_utils import model_to_dot\n", 222 | "from keras.utils import plot_model\n", 223 | "import openpyxl\n", 224 | "\n", 225 | "from keras.backend import tensorflow_backend as K\n", 226 | "config = tf.ConfigProto()\n", 227 | "config.gpu_options.allow_growth = True\n", 228 | "K.set_session(tf.Session(config=config))\n", 229 | "\n", 230 | "class LossHistory(keras.callbacks.Callback): # history = LossHistory()\n", 231 | " def init(self): # history.init()\n", 232 | " self.losses = []\n", 233 | " # self.accs = []\n", 234 | " self.val_losses = []\n", 235 | " # self.val_accs = []\n", 236 | " self.mses = []\n", 237 | " self.maes = []\n", 238 | " self.mapes = []\n", 239 | " self.val_mses = []\n", 240 | " self.val_maes = []\n", 241 | " self.val_mapes = []\n", 242 | "\n", 243 | " def on_epoch_end(self, batch, logs={}):\n", 244 | " self.losses.append(logs.get('loss'))\n", 245 | " # self.accs.append(logs.get('acc'))\n", 246 | " self.val_losses.append(logs.get('val_loss'))\n", 247 | " # self.val_accs.append(logs.get('val_accuracy\n", 248 | " self.mses.append(logs.get('mean_squared_error'))\n", 249 | " self.maes.append(logs.get('mean_absolute_error'))\n", 250 | " self.mapes.append(logs.get('mean_absolute_percentage_error'))\n", 251 | " self.val_mses.append(logs.get('val_mean_squared_error'))\n", 252 | " self.val_maes.append(logs.get('val_mean_absolute_error'))\n", 253 | " self.val_mapes.append(logs.get('val_mean_absolute_percentage_error'))\n", 254 | "\n", 255 | "def create_dataset(dataset, timesteps):\n", 256 | " dataX, dataY = [], []\n", 257 | " for i in range(len(dataset) - timesteps - 1):\n", 258 | " a = dataset[i:(i + timesteps), 0]\n", 259 | " dataX.append(a)\n", 260 | " dataY.append(dataset[i + timesteps, 0])\n", 261 | " return np.array(dataX), np.array(dataY)\n", 262 | "\n", 263 | "def mean_absolute_percentage_error(y_true, y_pred):\n", 264 | " y_true, y_pred = np.array(y_true), np.array(y_pred)\n", 265 | " return np.mean(np.abs((y_true - y_pred) / y_true)) * 100\n", 266 | "\n", 267 | "data_path = 'C:/Users/Smartgrid_ML/Desktop/KMS/climate_hour.csv'\n", 268 | "data_source = pd.read_csv(data_path)\n", 269 | "data_source = pd.DataFrame(data_source)\n", 270 | "data_set = data_source.iloc[:, 2]\n", 271 | "data = np.array(data_set)\n", 272 | "data = data.reshape(-1, 1)\n", 273 | "scaler = MinMaxScaler(feature_range=(0, 1))\n", 274 | "data = scaler.fit_transform(data)\n", 275 | "Maxvalue_1 = scaler.data_max_\n", 276 | "print(data.shape)\n", 277 | "\n", 278 | "Tr_mean = np.nanmean(data)\n", 279 | "Tr_var = np.nanvar(data)\n", 280 | "\n", 281 | "print('Dataset mean = ', Tr_mean, 'var = ', Tr_var)\n", 282 | "print('Maximum value = ', Maxvalue_1)\n", 283 | "\n", 284 | "Training_set = data[0:42022, :]\n", 285 | "Validation_set = data[42023:63031, :]\n", 286 | "Test_set = data[63032:, :]\n", 287 | "\n", 288 | "features = 1\n", 289 | "timesteps = 24\n", 290 | "trainX, trainY = create_dataset(Training_set, timesteps)\n", 291 | "validX, validY = create_dataset(Validation_set, timesteps)\n", 292 | "testX, testY = create_dataset(Test_set, timesteps)\n", 293 | "\n", 294 | "trainX = np.reshape(trainX, (trainX.shape[0], trainX.shape[1], 1))\n", 295 | "validX = np.reshape(validX, (validX.shape[0], validX.shape[1], 1))\n", 296 | "testX = np.reshape(testX, (testX.shape[0], testX.shape[1], 1))\n", 297 | "\n", 298 | "# -----------------------------------------------------------------------------------------------------------\n", 299 | "# -----------------------------------------------------------------------------------------------------------\n", 300 | "import keras.backend.tensorflow_backend as K\n", 301 | "with K.tf.device('/gpu:0'):\n", 302 | " \n", 303 | " visible1 = Input(shape=(timesteps, features))\n", 304 | "\n", 305 | " bi11 = (Bidirectional(LSTM(16, return_sequences=True)))(visible1) ### success\n", 306 | " bi12 = (Bidirectional(LSTM(16, return_sequences=True)))(bi11)\n", 307 | " res13 = keras.layers.Add()([bi12, visible1])\n", 308 | "\n", 309 | " bi13 = (Bidirectional(LSTM(16, return_sequences=True)))(res13)\n", 310 | " bi14 = (Bidirectional(LSTM(16, return_sequences=True)))(bi13)\n", 311 | " res14 = keras.layers.Add()([res13, bi14])\n", 312 | "\n", 313 | " bi15 = (Bidirectional(LSTM(16, return_sequences=True)))(res14)\n", 314 | " bi16 = (Bidirectional(LSTM(16, return_sequences=True)))(bi15)\n", 315 | " res15 = keras.layers.Add()([res14, bi16, visible1])\n", 316 | "\n", 317 | " bi17 = (Bidirectional(LSTM(16, return_sequences=True)))(bi16)\n", 318 | " bi18 = (Bidirectional(LSTM(16, return_sequences=True)))(bi17)\n", 319 | " res16 = keras.layers.Add()([res15, bi18])\n", 320 | "\n", 321 | " bi19 = (Bidirectional(LSTM(16, return_sequences=True)))(res16)\n", 322 | " bi20 = (Bidirectional(LSTM(16, return_sequences=True)))(bi19)\n", 323 | " res17 = keras.layers.Add()([res16, bi20, visible1])\n", 324 | "\n", 325 | " bi21 = (Bidirectional(LSTM(32)))(res17)\n", 326 | "\n", 327 | " dense11 = Dense(24, activation='selu')(bi21)\n", 328 | " out1 = Dense(1, activation='selu')(dense11)\n", 329 | "\n", 330 | " model = Model(inputs=[visible1], outputs=[out1]) # multi-input, multi-output\n", 331 | "\n", 332 | "#########################################\n", 333 | "\n", 334 | "print(model.summary())\n", 335 | "plot_model(model, to_file='C:/Users/Smartgrid_ML/Documents/KMS/DRNet-3_Structure.svg')\n", 336 | "SVG(model_to_dot(model, show_shapes=True).create(prog='dot', format='svg'))\n", 337 | "\n", 338 | "reducelr = ReduceLROnPlateau(monitor='val_loss', factor=0.1, patience=1) # 에포크 1동안 좋아지지 않으면 호출\n", 339 | "\n", 340 | "model.compile(loss='mean_squared_error', optimizer='adam', metrics=['mse', 'mae', 'mape'])\n", 341 | "\n", 342 | "batch_size = 100\n", 343 | "epochs = 20\n", 344 | "\n", 345 | "history = LossHistory()\n", 346 | "history.init()\n", 347 | "\n", 348 | "model.fit(trainX, trainY, epochs=epochs, batch_size=batch_size, shuffle=False, validation_data=(validX, validY), callbacks=[history, reducelr]) # , checkpoint\n", 349 | "\n", 350 | "trainPredict = model.predict(trainX, batch_size=batch_size)\n", 351 | "validPredict = model.predict(validX, batch_size=batch_size)\n", 352 | "testPredict = model.predict(testX, batch_size=batch_size)\n", 353 | "\n", 354 | "trainPredict = trainPredict.reshape([-1])\n", 355 | "validPredict = validPredict.reshape([-1])\n", 356 | "testPredict = testPredict.reshape([-1])\n", 357 | "testY = testY.reshape([-1])\n", 358 | "validY = validY.reshape([-1])\n", 359 | "trainY = trainY.reshape([-1])\n", 360 | "\n", 361 | "np.savetxt('trainPredict_5.txt', trainPredict)\n", 362 | "np.savetxt('testPredict_5.txt', testPredict)\n", 363 | "np.savetxt('validPredict_5.txt', validPredict)\n", 364 | "np.savetxt('testY_5.txt', testY)\n", 365 | "np.savetxt('validY_5.txt', validY)\n", 366 | "np.savetxt('trainY_5.txt', trainY)\n", 367 | "\n", 368 | "print('--------------------------------------------------------')\n", 369 | "print(' history.mses(=loss) = ', history.mses) # loss == mse\n", 370 | "print(' history.maes = ', history.maes)\n", 371 | "print(' history.mapes = ', history.mapes)\n", 372 | "print(' history.val_mses(=loss)= ', history.val_mses) # loss == mse\n", 373 | "print(' history.val_maes = ', history.val_maes)\n", 374 | "print(' history.val_mapes = ', history.val_mapes)\n", 375 | "print('--------------------------------------------------------')\n", 376 | "\n", 377 | "plt.figure(1)\n", 378 | "plt.plot(testPredict, 'r')\n", 379 | "plt.plot(testY, 'b')\n", 380 | "plt.show()\n", 381 | "\n", 382 | "plt.figure(2)\n", 383 | "plt.plot(history.mses, 'b--')\n", 384 | "plt.plot(history.val_mses, 'b:')\n", 385 | "plt.plot(history.maes, 'ro')\n", 386 | "plt.plot(history.val_maes, 'r+')\n", 387 | "plt.ylabel('Loss and Accuracy')\n", 388 | "plt.xlabel('epoch')\n", 389 | "plt.show()\n", 390 | "\n", 391 | "print('Test Score > MSE == ', mean_squared_error(testY, testPredict), ' MAE == ', mean_absolute_error(testY, testPredict), 'MAPE == ', mean_absolute_percentage_error(testY, testPredict))" 392 | ] 393 | }, 394 | { 395 | "cell_type": "code", 396 | "execution_count": null, 397 | "metadata": {}, 398 | "outputs": [], 399 | "source": [] 400 | } 401 | ], 402 | "metadata": { 403 | "kernelspec": { 404 | "display_name": "Python 3", 405 | "language": "python", 406 | "name": "python3" 407 | }, 408 | "language_info": { 409 | "codemirror_mode": { 410 | "name": "ipython", 411 | "version": 3 412 | }, 413 | "file_extension": ".py", 414 | "mimetype": "text/x-python", 415 | "name": "python", 416 | "nbconvert_exporter": "python", 417 | "pygments_lexer": "ipython3", 418 | "version": "3.6.9" 419 | } 420 | }, 421 | "nbformat": 4, 422 | "nbformat_minor": 4 423 | } 424 | -------------------------------------------------------------------------------- /MRN_7Layer_ERCOT.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": {}, 7 | "outputs": [ 8 | { 9 | "name": "stderr", 10 | "output_type": "stream", 11 | "text": [ 12 | "Using TensorFlow backend.\n", 13 | "WARNING: Logging before flag parsing goes to stderr.\n", 14 | "W0309 17:19:37.706369 8124 deprecation_wrapper.py:119] From C:\\Users\\Smartgrid_ML\\Anaconda3\\envs\\tensorflow-gpu\\lib\\site-packages\\keras\\backend\\tensorflow_backend.py:74: The name tf.get_default_graph is deprecated. Please use tf.compat.v1.get_default_graph instead.\n", 15 | "\n", 16 | "W0309 17:19:37.717372 8124 deprecation_wrapper.py:119] From C:\\Users\\Smartgrid_ML\\Anaconda3\\envs\\tensorflow-gpu\\lib\\site-packages\\keras\\backend\\tensorflow_backend.py:517: The name tf.placeholder is deprecated. Please use tf.compat.v1.placeholder instead.\n", 17 | "\n", 18 | "W0309 17:19:37.721374 8124 deprecation_wrapper.py:119] From C:\\Users\\Smartgrid_ML\\Anaconda3\\envs\\tensorflow-gpu\\lib\\site-packages\\keras\\backend\\tensorflow_backend.py:4138: The name tf.random_uniform is deprecated. Please use tf.random.uniform instead.\n", 19 | "\n", 20 | "W0309 17:19:37.736377 8124 deprecation.py:323] From C:\\Users\\Smartgrid_ML\\Anaconda3\\envs\\tensorflow-gpu\\lib\\site-packages\\keras\\backend\\tensorflow_backend.py:3217: add_dispatch_support..wrapper (from tensorflow.python.ops.array_ops) is deprecated and will be removed in a future version.\n", 21 | "Instructions for updating:\n", 22 | "Use tf.where in 2.0, which has the same broadcast rule as np.where\n" 23 | ] 24 | }, 25 | { 26 | "name": "stdout", 27 | "output_type": "stream", 28 | "text": [ 29 | "(26311, 1)\n", 30 | "Dataset mean = 0.36639967284314107 var = 0.04237001272906482\n", 31 | "Maximum value = [19099.07421875]\n" 32 | ] 33 | }, 34 | { 35 | "name": "stderr", 36 | "output_type": "stream", 37 | "text": [ 38 | "W0309 17:19:39.804861 8124 deprecation_wrapper.py:119] From C:\\Users\\Smartgrid_ML\\Anaconda3\\envs\\tensorflow-gpu\\lib\\site-packages\\keras\\optimizers.py:790: The name tf.train.Optimizer is deprecated. Please use tf.compat.v1.train.Optimizer instead.\n", 39 | "\n" 40 | ] 41 | }, 42 | { 43 | "name": "stdout", 44 | "output_type": "stream", 45 | "text": [ 46 | "__________________________________________________________________________________________________\n", 47 | "Layer (type) Output Shape Param # Connected to \n", 48 | "==================================================================================================\n", 49 | "input_1 (InputLayer) (None, 24, 1) 0 \n", 50 | "__________________________________________________________________________________________________\n", 51 | "bidirectional_1 (Bidirectional) (None, 24, 32) 2304 input_1[0][0] \n", 52 | "__________________________________________________________________________________________________\n", 53 | "conv1d_1 (Conv1D) (None, 24, 32) 64 input_1[0][0] \n", 54 | "__________________________________________________________________________________________________\n", 55 | "bidirectional_2 (Bidirectional) (None, 24, 32) 6272 bidirectional_1[0][0] \n", 56 | "__________________________________________________________________________________________________\n", 57 | "activation_1 (Activation) (None, 24, 32) 0 conv1d_1[0][0] \n", 58 | "__________________________________________________________________________________________________\n", 59 | "add_1 (Add) (None, 24, 32) 0 bidirectional_2[0][0] \n", 60 | " activation_1[0][0] \n", 61 | "__________________________________________________________________________________________________\n", 62 | "bidirectional_3 (Bidirectional) (None, 24, 32) 6272 add_1[0][0] \n", 63 | "__________________________________________________________________________________________________\n", 64 | "conv1d_2 (Conv1D) (None, 24, 32) 1056 add_1[0][0] \n", 65 | "__________________________________________________________________________________________________\n", 66 | "bidirectional_4 (Bidirectional) (None, 24, 32) 6272 bidirectional_3[0][0] \n", 67 | "__________________________________________________________________________________________________\n", 68 | "activation_2 (Activation) (None, 24, 32) 0 conv1d_2[0][0] \n", 69 | "__________________________________________________________________________________________________\n", 70 | "add_2 (Add) (None, 24, 32) 0 bidirectional_4[0][0] \n", 71 | " activation_2[0][0] \n", 72 | "__________________________________________________________________________________________________\n", 73 | "bidirectional_5 (Bidirectional) (None, 24, 32) 6272 add_2[0][0] \n", 74 | "__________________________________________________________________________________________________\n", 75 | "conv1d_3 (Conv1D) (None, 24, 32) 1056 add_2[0][0] \n", 76 | "__________________________________________________________________________________________________\n", 77 | "bidirectional_6 (Bidirectional) (None, 24, 32) 6272 bidirectional_5[0][0] \n", 78 | "__________________________________________________________________________________________________\n", 79 | "activation_3 (Activation) (None, 24, 32) 0 conv1d_3[0][0] \n", 80 | "__________________________________________________________________________________________________\n", 81 | "add_3 (Add) (None, 24, 32) 0 bidirectional_6[0][0] \n", 82 | " activation_3[0][0] \n", 83 | "__________________________________________________________________________________________________\n", 84 | "bidirectional_7 (Bidirectional) (None, 64) 16640 add_3[0][0] \n", 85 | "__________________________________________________________________________________________________\n", 86 | "dense_1 (Dense) (None, 24) 1560 bidirectional_7[0][0] \n", 87 | "__________________________________________________________________________________________________\n", 88 | "dense_2 (Dense) (None, 1) 25 dense_1[0][0] \n", 89 | "==================================================================================================\n", 90 | "Total params: 54,065\n", 91 | "Trainable params: 54,065\n", 92 | "Non-trainable params: 0\n", 93 | "__________________________________________________________________________________________________\n", 94 | "None\n" 95 | ] 96 | }, 97 | { 98 | "name": "stderr", 99 | "output_type": "stream", 100 | "text": [ 101 | "W0309 17:19:45.879287 8124 deprecation_wrapper.py:119] From C:\\Users\\Smartgrid_ML\\Anaconda3\\envs\\tensorflow-gpu\\lib\\site-packages\\keras\\backend\\tensorflow_backend.py:986: The name tf.assign_add is deprecated. Please use tf.compat.v1.assign_add instead.\n", 102 | "\n", 103 | "W0309 17:19:46.496426 8124 deprecation_wrapper.py:119] From C:\\Users\\Smartgrid_ML\\Anaconda3\\envs\\tensorflow-gpu\\lib\\site-packages\\keras\\backend\\tensorflow_backend.py:973: The name tf.assign is deprecated. Please use tf.compat.v1.assign instead.\n", 104 | "\n" 105 | ] 106 | }, 107 | { 108 | "name": "stdout", 109 | "output_type": "stream", 110 | "text": [ 111 | "Train on 19975 samples, validate on 4278 samples\n", 112 | "Epoch 1/20\n", 113 | "19975/19975 [==============================] - 210s 10ms/step - loss: 0.0043 - mean_squared_error: 0.0043 - mean_absolute_error: 0.0460 - mean_absolute_percentage_error: 37121.0622 - val_loss: 0.0018 - val_mean_squared_error: 0.0018 - val_mean_absolute_error: 0.0327 - val_mean_absolute_percentage_error: 13.8555\n", 114 | "Epoch 2/20\n", 115 | "19975/19975 [==============================] - 200s 10ms/step - loss: 0.0018 - mean_squared_error: 0.0018 - mean_absolute_error: 0.0315 - mean_absolute_percentage_error: 41207.1803 - val_loss: 0.0015 - val_mean_squared_error: 0.0015 - val_mean_absolute_error: 0.0297 - val_mean_absolute_percentage_error: 11.5563\n", 116 | "Epoch 3/20\n", 117 | "19975/19975 [==============================] - 201s 10ms/step - loss: 0.0016 - mean_squared_error: 0.0016 - mean_absolute_error: 0.0289 - mean_absolute_percentage_error: 43687.3606 - val_loss: 0.0014 - val_mean_squared_error: 0.0014 - val_mean_absolute_error: 0.0287 - val_mean_absolute_percentage_error: 10.9422\n", 118 | "Epoch 4/20\n", 119 | "19975/19975 [==============================] - 202s 10ms/step - loss: 0.0013 - mean_squared_error: 0.0013 - mean_absolute_error: 0.0256 - mean_absolute_percentage_error: 44854.8482 - val_loss: 0.0013 - val_mean_squared_error: 0.0013 - val_mean_absolute_error: 0.0277 - val_mean_absolute_percentage_error: 10.2422\n", 120 | "Epoch 5/20\n", 121 | "19975/19975 [==============================] - 201s 10ms/step - loss: 0.0013 - mean_squared_error: 0.0013 - mean_absolute_error: 0.0253 - mean_absolute_percentage_error: 45464.9747 - val_loss: 0.0013 - val_mean_squared_error: 0.0013 - val_mean_absolute_error: 0.0275 - val_mean_absolute_percentage_error: 10.1602\n", 122 | "Epoch 6/20\n", 123 | "19975/19975 [==============================] - 201s 10ms/step - loss: 0.0013 - mean_squared_error: 0.0013 - mean_absolute_error: 0.0249 - mean_absolute_percentage_error: 45246.0224 - val_loss: 0.0013 - val_mean_squared_error: 0.0013 - val_mean_absolute_error: 0.0272 - val_mean_absolute_percentage_error: 9.8603\n", 124 | "Epoch 7/20\n", 125 | "19975/19975 [==============================] - 202s 10ms/step - loss: 0.0013 - mean_squared_error: 0.0013 - mean_absolute_error: 0.0250 - mean_absolute_percentage_error: 45174.1614 - val_loss: 0.0013 - val_mean_squared_error: 0.0013 - val_mean_absolute_error: 0.0271 - val_mean_absolute_percentage_error: 9.7042\n", 126 | "Epoch 8/20\n", 127 | "19975/19975 [==============================] - 201s 10ms/step - loss: 0.0013 - mean_squared_error: 0.0013 - mean_absolute_error: 0.0249 - mean_absolute_percentage_error: 45247.5953 - val_loss: 0.0013 - val_mean_squared_error: 0.0013 - val_mean_absolute_error: 0.0271 - val_mean_absolute_percentage_error: 9.6759\n", 128 | "Epoch 9/20\n", 129 | "19975/19975 [==============================] - 201s 10ms/step - loss: 0.0013 - mean_squared_error: 0.0013 - mean_absolute_error: 0.0249 - mean_absolute_percentage_error: 45255.6947 - val_loss: 0.0013 - val_mean_squared_error: 0.0013 - val_mean_absolute_error: 0.0271 - val_mean_absolute_percentage_error: 9.6739\n", 130 | "Epoch 10/20\n", 131 | "19975/19975 [==============================] - 201s 10ms/step - loss: 0.0013 - mean_squared_error: 0.0013 - mean_absolute_error: 0.0249 - mean_absolute_percentage_error: 45256.2514 - val_loss: 0.0013 - val_mean_squared_error: 0.0013 - val_mean_absolute_error: 0.0271 - val_mean_absolute_percentage_error: 9.6737\n", 132 | "Epoch 11/20\n", 133 | "19975/19975 [==============================] - 203s 10ms/step - loss: 0.0013 - mean_squared_error: 0.0013 - mean_absolute_error: 0.0249 - mean_absolute_percentage_error: 45256.2838 - val_loss: 0.0013 - val_mean_squared_error: 0.0013 - val_mean_absolute_error: 0.0271 - val_mean_absolute_percentage_error: 9.6737\n", 134 | "Epoch 12/20\n", 135 | "19975/19975 [==============================] - 206s 10ms/step - loss: 0.0013 - mean_squared_error: 0.0013 - mean_absolute_error: 0.0249 - mean_absolute_percentage_error: 45256.2833 - val_loss: 0.0013 - val_mean_squared_error: 0.0013 - val_mean_absolute_error: 0.0271 - val_mean_absolute_percentage_error: 9.6737\n", 136 | "Epoch 13/20\n", 137 | "19975/19975 [==============================] - 201s 10ms/step - loss: 0.0013 - mean_squared_error: 0.0013 - mean_absolute_error: 0.0249 - mean_absolute_percentage_error: 45256.2835 - val_loss: 0.0013 - val_mean_squared_error: 0.0013 - val_mean_absolute_error: 0.0271 - val_mean_absolute_percentage_error: 9.6737\n", 138 | "Epoch 14/20\n", 139 | "19975/19975 [==============================] - 201s 10ms/step - loss: 0.0013 - mean_squared_error: 0.0013 - mean_absolute_error: 0.0249 - mean_absolute_percentage_error: 45256.2835 - val_loss: 0.0013 - val_mean_squared_error: 0.0013 - val_mean_absolute_error: 0.0271 - val_mean_absolute_percentage_error: 9.6737\n", 140 | "Epoch 15/20\n", 141 | "19975/19975 [==============================] - 200s 10ms/step - loss: 0.0013 - mean_squared_error: 0.0013 - mean_absolute_error: 0.0249 - mean_absolute_percentage_error: 45256.2835 - val_loss: 0.0013 - val_mean_squared_error: 0.0013 - val_mean_absolute_error: 0.0271 - val_mean_absolute_percentage_error: 9.6737\n", 142 | "Epoch 16/20\n", 143 | "19975/19975 [==============================] - 202s 10ms/step - loss: 0.0013 - mean_squared_error: 0.0013 - mean_absolute_error: 0.0249 - mean_absolute_percentage_error: 45256.2835 - val_loss: 0.0013 - val_mean_squared_error: 0.0013 - val_mean_absolute_error: 0.0271 - val_mean_absolute_percentage_error: 9.6737\n", 144 | "Epoch 17/20\n", 145 | "19975/19975 [==============================] - 202s 10ms/step - loss: 0.0013 - mean_squared_error: 0.0013 - mean_absolute_error: 0.0249 - mean_absolute_percentage_error: 45256.2835 - val_loss: 0.0013 - val_mean_squared_error: 0.0013 - val_mean_absolute_error: 0.0271 - val_mean_absolute_percentage_error: 9.6737\n", 146 | "Epoch 18/20\n", 147 | "19975/19975 [==============================] - 202s 10ms/step - loss: 0.0013 - mean_squared_error: 0.0013 - mean_absolute_error: 0.0249 - mean_absolute_percentage_error: 45256.2835 - val_loss: 0.0013 - val_mean_squared_error: 0.0013 - val_mean_absolute_error: 0.0271 - val_mean_absolute_percentage_error: 9.6737\n", 148 | "Epoch 19/20\n", 149 | "19975/19975 [==============================] - 200s 10ms/step - loss: 0.0013 - mean_squared_error: 0.0013 - mean_absolute_error: 0.0249 - mean_absolute_percentage_error: 45256.2835 - val_loss: 0.0013 - val_mean_squared_error: 0.0013 - val_mean_absolute_error: 0.0271 - val_mean_absolute_percentage_error: 9.6737\n", 150 | "Epoch 20/20\n", 151 | "19975/19975 [==============================] - 201s 10ms/step - loss: 0.0013 - mean_squared_error: 0.0013 - mean_absolute_error: 0.0249 - mean_absolute_percentage_error: 45256.2835 - val_loss: 0.0013 - val_mean_squared_error: 0.0013 - val_mean_absolute_error: 0.0271 - val_mean_absolute_percentage_error: 9.6737\n", 152 | "--------------------------------------------------------\n", 153 | " history.mses(=loss) = [0.004313090406690441, 0.0017954907600344794, 0.0016052795884412747, 0.0012971232975664104, 0.0012765986539361688, 0.0012515562697656415, 0.0012535612315384762, 0.0012521156643281863, 0.0012513567564294479, 0.0012513175165544128, 0.001251315387377914, 0.0012513153667174728, 0.0012513153621424526, 0.0012513153609768424, 0.0012513153609768424, 0.0012513153609768424, 0.0012513153609768424, 0.0012513153609768424, 0.0012513153609768424, 0.0012513153609768424]\n", 154 | " history.maes = [0.04598906444145532, 0.03147964636388425, 0.02892265313343426, 0.025583325673328324, 0.025270246215472383, 0.02494871763510161, 0.024963526511669755, 0.02494925031291603, 0.024935445562005044, 0.02493464430521367, 0.02493459898861911, 0.024934598223978796, 0.02493459805613092, 0.024934598085970545, 0.024934598085970545, 0.024934598085970545, 0.024934598085970545, 0.024934598085970545, 0.024934598085970545, 0.024934598085970545]\n", 155 | " history.mapes = [37121.06218045632, 41207.18026006267, 43687.360583032205, 44854.84819405571, 45464.97466769648, 45246.022446416224, 45174.16142761895, 45247.5952544099, 45255.69471736658, 45256.251421513814, 45256.28376240241, 45256.28325954367, 45256.28350958347, 45256.28350957249, 45256.28350957249, 45256.28350957249, 45256.28350957249, 45256.28350957249, 45256.28350957249, 45256.28350957249]\n", 156 | " history.val_mses(=loss)= [0.0017850788130784993, 0.0015078271501238253, 0.0014278554853836493, 0.0013487615569025737, 0.0013277866960777027, 0.0013145915220189855, 0.0013083532363217273, 0.0013085592123072433, 0.0013085798701217425, 0.0013085808723602426, 0.0013085809984632348, 0.0013085809818635745, 0.0013085809817002993, 0.0013085809817002993, 0.0013085809817002993, 0.0013085809817002993, 0.0013085809817002993, 0.0013085809817002993, 0.0013085809817002993, 0.0013085809817002993]\n", 157 | " history.val_maes = [0.032739489201269956, 0.029697562287056094, 0.028738375216750354, 0.02771755745751995, 0.027463952294503376, 0.02721726706633784, 0.027096880381285115, 0.02709025726969301, 0.027089807620710053, 0.027089767908662656, 0.027089767804166432, 0.027089768023608497, 0.02708976803405812, 0.02708976803405812, 0.02708976803405812, 0.02708976803405812, 0.02708976803405812, 0.02708976803405812, 0.02708976803405812, 0.02708976803405812]\n", 158 | " history.val_mapes = [13.855535006511985, 11.556255008863365, 10.942156247303496, 10.24215695477914, 10.160244023705152, 9.860319533042675, 9.704202624780656, 9.675919707995144, 9.67388982179846, 9.673744153508297, 9.67374109675696, 9.673740794916139, 9.673740859564468, 9.673740859564468, 9.673740859564468, 9.673740859564468, 9.673740859564468, 9.673740859564468, 9.673740859564468, 9.673740859564468]\n", 159 | "--------------------------------------------------------\n" 160 | ] 161 | }, 162 | { 163 | "data": { 164 | "text/plain": [ 165 | "
" 166 | ] 167 | }, 168 | "metadata": {}, 169 | "output_type": "display_data" 170 | }, 171 | { 172 | "data": { 173 | "text/plain": [ 174 | "
" 175 | ] 176 | }, 177 | "metadata": {}, 178 | "output_type": "display_data" 179 | }, 180 | { 181 | "name": "stdout", 182 | "output_type": "stream", 183 | "text": [ 184 | "Test Score > MSE == 0.0012648210318922939 MAE == 0.02622036746311606 MAPE == 11.03511994792203\n" 185 | ] 186 | } 187 | ], 188 | "source": [ 189 | "import pandas as pd\n", 190 | "import tensorflow as tf\n", 191 | "import codecs\n", 192 | "import numpy as np\n", 193 | "import math\n", 194 | "import csv\n", 195 | "from sklearn.preprocessing import MinMaxScaler\n", 196 | "from sklearn.metrics import mean_squared_error\n", 197 | "from sklearn.metrics import mean_absolute_error\n", 198 | "from sklearn.metrics import recall_score, precision_score # New\n", 199 | "from sklearn.metrics import f1_score\n", 200 | "from sklearn.metrics import confusion_matrix\n", 201 | "from sklearn import preprocessing\n", 202 | "import keras\n", 203 | "import matplotlib.pyplot as plt\n", 204 | "from keras.callbacks import ModelCheckpoint, CSVLogger, EarlyStopping, LearningRateScheduler, ReduceLROnPlateau\n", 205 | "from keras.layers import merge\n", 206 | "from keras.models import Sequential, Model\n", 207 | "from keras.layers import Dense, Input, Flatten, Add\n", 208 | "from keras.layers import Activation, BatchNormalization, regularizers\n", 209 | "from keras.layers.convolutional import Conv1D\n", 210 | "from keras.layers.convolutional import MaxPooling1D\n", 211 | "from keras.layers.merge import concatenate\n", 212 | "from keras.layers import LSTM, Bidirectional\n", 213 | "from keras.utils import plot_model\n", 214 | "from keras.layers import Dropout\n", 215 | "from scipy import signal\n", 216 | "import openpyxl\n", 217 | "\n", 218 | "class LossHistory(keras.callbacks.Callback): # history = LossHistory()\n", 219 | " def init(self): # history.init()\n", 220 | " self.losses = []\n", 221 | " # self.accs = []\n", 222 | " self.val_losses = []\n", 223 | " # self.val_accs = []\n", 224 | " self.mses = []\n", 225 | " self.maes = []\n", 226 | " self.mapes = []\n", 227 | " self.val_mses = []\n", 228 | " self.val_maes = []\n", 229 | " self.val_mapes = []\n", 230 | "\n", 231 | " def on_epoch_end(self, batch, logs={}):\n", 232 | " self.losses.append(logs.get('loss'))\n", 233 | " # self.accs.append(logs.get('acc'))\n", 234 | " self.val_losses.append(logs.get('val_loss'))\n", 235 | " # self.val_accs.append(logs.get('val_accuracy\n", 236 | " self.mses.append(logs.get('mean_squared_error'))\n", 237 | " self.maes.append(logs.get('mean_absolute_error'))\n", 238 | " self.mapes.append(logs.get('mean_absolute_percentage_error'))\n", 239 | " self.val_mses.append(logs.get('val_mean_squared_error'))\n", 240 | " self.val_maes.append(logs.get('val_mean_absolute_error'))\n", 241 | " self.val_mapes.append(logs.get('val_mean_absolute_percentage_error'))\n", 242 | "\n", 243 | "def create_dataset(dataset, timesteps):\n", 244 | " dataX, dataY = [], []\n", 245 | " for i in range(len(dataset) - timesteps - 1):\n", 246 | " a = dataset[i:(i + timesteps), 0]\n", 247 | " dataX.append(a)\n", 248 | " dataY.append(dataset[i + timesteps, 0])\n", 249 | " return np.array(dataX), np.array(dataY)\n", 250 | "\n", 251 | "def mean_absolute_percentage_error(y_true, y_pred):\n", 252 | " y_true, y_pred = np.array(y_true), np.array(y_pred)\n", 253 | " return np.mean(np.abs((y_true - y_pred) / y_true)) * 100\n", 254 | "\n", 255 | "data_path = 'C:/Users/Smartgrid_ML/Desktop/KMS/ercot_2016.xlsx'\n", 256 | "data_source = pd.read_excel(data_path, sheet_name='numbers')\n", 257 | "data_source = pd.DataFrame(data_source)\n", 258 | "data_set = data_source.iloc[:, 3]\n", 259 | "wind_2016 = np.array(data_set)\n", 260 | "wind_2016 = wind_2016.reshape(-1, 1)\n", 261 | "installed_2016 = data_source.iloc[:, 4]\n", 262 | "installed_2016 = np.array(installed_2016)\n", 263 | "installed_2016 = installed_2016.reshape(-1, 1)\n", 264 | "\n", 265 | "data_path = 'C:/Users/Smartgrid_ML/Desktop/KMS/ercot_2017.xlsx'\n", 266 | "data_source = pd.read_excel(data_path, sheet_name='numbers')\n", 267 | "data_source = pd.DataFrame(data_source)\n", 268 | "data_set = data_source.iloc[:, 3]\n", 269 | "wind_2017 = np.array(data_set)\n", 270 | "wind_2017 = wind_2017.reshape(-1, 1)\n", 271 | "installed_2017 = data_source.iloc[:, 4]\n", 272 | "installed_2017 = np.array(installed_2017)\n", 273 | "installed_2017 = installed_2017.reshape(-1, 1)\n", 274 | "\n", 275 | "data_path = 'C:/Users/Smartgrid_ML/Desktop/KMS/ercot_2018.xlsx'\n", 276 | "data_source = pd.read_excel(data_path, sheet_name='numbers')\n", 277 | "data_source = pd.DataFrame(data_source)\n", 278 | "data_set = data_source.iloc[:, 3]\n", 279 | "wind_2018 = np.array(data_set)\n", 280 | "wind_2018 = wind_2018.reshape(-1, 1)\n", 281 | "installed_2018 = data_source.iloc[:, 4]\n", 282 | "installed_2018 = np.array(installed_2018)\n", 283 | "installed_2018 = installed_2018.reshape(-1, 1)\n", 284 | "\n", 285 | "wind = np.concatenate((wind_2016, wind_2017, wind_2018), axis=None)\n", 286 | "wind = wind.reshape(-1, 1)\n", 287 | "scaler = MinMaxScaler(feature_range=(0, 1))\n", 288 | "wind = scaler.fit_transform(wind)\n", 289 | "Maxvalue_1 = scaler.data_max_\n", 290 | "print(wind.shape)\n", 291 | "\n", 292 | "np.savetxt('ERCOT_WIND_DATA.txt', wind)\n", 293 | "\n", 294 | "Training_set = wind[0:20000, :]\n", 295 | "Validation_set = wind[20001:24304, :]\n", 296 | "Test_set = wind[24305:26305:, :]\n", 297 | "\n", 298 | "Tr_mean = np.nanmean(wind)\n", 299 | "Tr_var = np.nanvar(wind)\n", 300 | "\n", 301 | "print('Dataset mean = ', Tr_mean, 'var = ', Tr_var)\n", 302 | "print('Maximum value = ', Maxvalue_1)\n", 303 | "\n", 304 | "features = 1\n", 305 | "timesteps = 24\n", 306 | "trainX, trainY = create_dataset(Training_set, timesteps)\n", 307 | "validX, validY = create_dataset(Validation_set, timesteps)\n", 308 | "testX, testY = create_dataset(Test_set, timesteps)\n", 309 | "\n", 310 | "trainX = np.reshape(trainX, (trainX.shape[0], trainX.shape[1], 1))\n", 311 | "validX = np.reshape(validX, (validX.shape[0], validX.shape[1], 1))\n", 312 | "testX = np.reshape(testX, (testX.shape[0], testX.shape[1], 1))\n", 313 | "\n", 314 | "# -----------------------------------------------------------------------------------------------------------\n", 315 | "# -----------------------------------------------------------------------------------------------------------\n", 316 | "visible1 = Input(shape=(timesteps, features))\n", 317 | "con10 = Conv1D(filters=32, kernel_size=1, strides=1, padding='same')(visible1) # new\n", 318 | "con10 = Activation('selu')(con10)\n", 319 | "\n", 320 | "bi11 = (Bidirectional(LSTM(16, return_sequences=True)))(visible1) ### success\n", 321 | "bi12 = (Bidirectional(LSTM(16, return_sequences=True)))(bi11)\n", 322 | "res13 = keras.layers.Add()([bi12, con10])\n", 323 | "con11 = Conv1D(filters=32, kernel_size=1, strides=1, padding='same')(res13) # new\n", 324 | "con11 = Activation('selu')(con11)\n", 325 | "\n", 326 | "bi13 = (Bidirectional(LSTM(16, return_sequences=True)))(res13)\n", 327 | "bi14 = (Bidirectional(LSTM(16, return_sequences=True)))(bi13)\n", 328 | "res14 = keras.layers.Add()([bi14, con11])\n", 329 | "con12 = Conv1D(filters=32, kernel_size=1, strides=1, padding='same')(res14) # new\n", 330 | "con12 = Activation('selu')(con12)\n", 331 | "\n", 332 | "bi15 = (Bidirectional(LSTM(16, return_sequences=True)))(res14)\n", 333 | "bi16 = (Bidirectional(LSTM(16, return_sequences=True)))(bi15)\n", 334 | "res15 = keras.layers.Add()([bi16, con12])\n", 335 | "\n", 336 | "bi21 = (Bidirectional(LSTM(32)))(res15)\n", 337 | "\n", 338 | "dense11 = Dense(24, activation='selu')(bi21)\n", 339 | "out1 = Dense(1, activation='selu')(dense11)\n", 340 | "\n", 341 | "model = Model(inputs=[visible1], outputs=[out1]) # multi-input, multi-output\n", 342 | "\n", 343 | "#########################################\n", 344 | "\n", 345 | "print(model.summary())\n", 346 | "\n", 347 | "reducelr = ReduceLROnPlateau(monitor='val_loss', factor=0.1, patience=1) # 에포크 1동안 좋아지지 않으면 호출\n", 348 | "\n", 349 | "model.compile(loss='mean_squared_error', optimizer='adam', metrics=['mse', 'mae', 'mape'])\n", 350 | "\n", 351 | "batch_size = 40\n", 352 | "epochs = 20\n", 353 | "\n", 354 | "history = LossHistory()\n", 355 | "history.init()\n", 356 | "\n", 357 | "model.fit(trainX, trainY, epochs=epochs, batch_size=batch_size, shuffle=False, validation_data=(validX, validY), callbacks=[history, reducelr]) # , checkpoint\n", 358 | "\n", 359 | "trainPredict = model.predict(trainX, batch_size=batch_size)\n", 360 | "testPredict = model.predict(testX, batch_size=batch_size)\n", 361 | "\n", 362 | "trainPredict = trainPredict.reshape([-1])\n", 363 | "testPredict = testPredict.reshape([-1])\n", 364 | "testY = testY.reshape([-1])\n", 365 | "trainY = trainY.reshape([-1])\n", 366 | "\n", 367 | "np.savetxt('trainPredict_5.txt', trainPredict)\n", 368 | "np.savetxt('testPredict_5.txt', testPredict)\n", 369 | "np.savetxt('testY_5.txt', testY)\n", 370 | "np.savetxt('trainY_5.txt', trainY)\n", 371 | "\n", 372 | "print('--------------------------------------------------------')\n", 373 | "print(' history.mses(=loss) = ', history.mses) # loss == mse\n", 374 | "print(' history.maes = ', history.maes)\n", 375 | "print(' history.mapes = ', history.mapes)\n", 376 | "print(' history.val_mses(=loss)= ', history.val_mses) # loss == mse\n", 377 | "print(' history.val_maes = ', history.val_maes)\n", 378 | "print(' history.val_mapes = ', history.val_mapes)\n", 379 | "print('--------------------------------------------------------')\n", 380 | "\n", 381 | "plt.figure(1)\n", 382 | "plt.plot(testPredict, 'r')\n", 383 | "plt.plot(testY, 'b')\n", 384 | "plt.show()\n", 385 | "\n", 386 | "plt.figure(2)\n", 387 | "plt.plot(history.mses, 'b--')\n", 388 | "plt.plot(history.val_mses, 'b:')\n", 389 | "plt.plot(history.maes, 'ro')\n", 390 | "plt.plot(history.val_maes, 'r+')\n", 391 | "plt.ylabel('Loss and Accuracy')\n", 392 | "plt.xlabel('epoch')\n", 393 | "plt.show()\n", 394 | "\n", 395 | "print('Test Score > MSE == ', mean_squared_error(testY, testPredict), ' MAE == ', mean_absolute_error(testY, testPredict), 'MAPE == ', mean_absolute_percentage_error(testY, testPredict))" 396 | ] 397 | }, 398 | { 399 | "cell_type": "code", 400 | "execution_count": null, 401 | "metadata": {}, 402 | "outputs": [], 403 | "source": [] 404 | } 405 | ], 406 | "metadata": { 407 | "kernelspec": { 408 | "display_name": "Python 3", 409 | "language": "python", 410 | "name": "python3" 411 | }, 412 | "language_info": { 413 | "codemirror_mode": { 414 | "name": "ipython", 415 | "version": 3 416 | }, 417 | "file_extension": ".py", 418 | "mimetype": "text/x-python", 419 | "name": "python", 420 | "nbconvert_exporter": "python", 421 | "pygments_lexer": "ipython3", 422 | "version": "3.6.9" 423 | } 424 | }, 425 | "nbformat": 4, 426 | "nbformat_minor": 4 427 | } 428 | -------------------------------------------------------------------------------- /MultiResidual_ERCOT.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": {}, 7 | "outputs": [ 8 | { 9 | "name": "stderr", 10 | "output_type": "stream", 11 | "text": [ 12 | "Using TensorFlow backend.\n", 13 | "WARNING: Logging before flag parsing goes to stderr.\n", 14 | "W0829 13:29:06.017423 9248 deprecation_wrapper.py:119] From C:\\Users\\Smartgrid_ML\\Anaconda3\\envs\\tensorflow-gpu\\lib\\site-packages\\keras\\backend\\tensorflow_backend.py:74: The name tf.get_default_graph is deprecated. Please use tf.compat.v1.get_default_graph instead.\n", 15 | "\n", 16 | "W0829 13:29:06.017423 9248 deprecation_wrapper.py:119] From C:\\Users\\Smartgrid_ML\\Anaconda3\\envs\\tensorflow-gpu\\lib\\site-packages\\keras\\backend\\tensorflow_backend.py:517: The name tf.placeholder is deprecated. Please use tf.compat.v1.placeholder instead.\n", 17 | "\n", 18 | "W0829 13:29:06.020424 9248 deprecation_wrapper.py:119] From C:\\Users\\Smartgrid_ML\\Anaconda3\\envs\\tensorflow-gpu\\lib\\site-packages\\keras\\backend\\tensorflow_backend.py:4138: The name tf.random_uniform is deprecated. Please use tf.random.uniform instead.\n", 19 | "\n" 20 | ] 21 | }, 22 | { 23 | "name": "stdout", 24 | "output_type": "stream", 25 | "text": [ 26 | "(26311, 1)\n", 27 | "Dataset mean = 0.36639967284314107 var = 0.04237001272906482\n", 28 | "Maximum value = [19099.07421875]\n" 29 | ] 30 | }, 31 | { 32 | "name": "stderr", 33 | "output_type": "stream", 34 | "text": [ 35 | "W0829 13:29:07.982871 9248 deprecation.py:323] From C:\\Users\\Smartgrid_ML\\Anaconda3\\envs\\tensorflow-gpu\\lib\\site-packages\\keras\\backend\\tensorflow_backend.py:3217: add_dispatch_support..wrapper (from tensorflow.python.ops.array_ops) is deprecated and will be removed in a future version.\n", 36 | "Instructions for updating:\n", 37 | "Use tf.where in 2.0, which has the same broadcast rule as np.where\n", 38 | "W0829 13:29:07.998874 9248 deprecation_wrapper.py:119] From C:\\Users\\Smartgrid_ML\\Anaconda3\\envs\\tensorflow-gpu\\lib\\site-packages\\keras\\optimizers.py:790: The name tf.train.Optimizer is deprecated. Please use tf.compat.v1.train.Optimizer instead.\n", 39 | "\n" 40 | ] 41 | }, 42 | { 43 | "name": "stdout", 44 | "output_type": "stream", 45 | "text": [ 46 | "__________________________________________________________________________________________________\n", 47 | "Layer (type) Output Shape Param # Connected to \n", 48 | "==================================================================================================\n", 49 | "input_1 (InputLayer) (None, 24, 1) 0 \n", 50 | "__________________________________________________________________________________________________\n", 51 | "bidirectional_1 (Bidirectional) (None, 24, 32) 2304 input_1[0][0] \n", 52 | "__________________________________________________________________________________________________\n", 53 | "bidirectional_2 (Bidirectional) (None, 24, 32) 6272 bidirectional_1[0][0] \n", 54 | "__________________________________________________________________________________________________\n", 55 | "add_1 (Add) (None, 24, 32) 0 bidirectional_2[0][0] \n", 56 | " input_1[0][0] \n", 57 | "__________________________________________________________________________________________________\n", 58 | "bidirectional_3 (Bidirectional) (None, 24, 32) 6272 add_1[0][0] \n", 59 | "__________________________________________________________________________________________________\n", 60 | "bidirectional_4 (Bidirectional) (None, 24, 32) 6272 bidirectional_3[0][0] \n", 61 | "__________________________________________________________________________________________________\n", 62 | "add_2 (Add) (None, 24, 32) 0 add_1[0][0] \n", 63 | " bidirectional_4[0][0] \n", 64 | "__________________________________________________________________________________________________\n", 65 | "bidirectional_5 (Bidirectional) (None, 24, 32) 6272 add_2[0][0] \n", 66 | "__________________________________________________________________________________________________\n", 67 | "bidirectional_6 (Bidirectional) (None, 24, 32) 6272 bidirectional_5[0][0] \n", 68 | "__________________________________________________________________________________________________\n", 69 | "add_3 (Add) (None, 24, 32) 0 add_2[0][0] \n", 70 | " bidirectional_6[0][0] \n", 71 | " input_1[0][0] \n", 72 | "__________________________________________________________________________________________________\n", 73 | "bidirectional_7 (Bidirectional) (None, 64) 16640 add_3[0][0] \n", 74 | "__________________________________________________________________________________________________\n", 75 | "dense_1 (Dense) (None, 24) 1560 bidirectional_7[0][0] \n", 76 | "__________________________________________________________________________________________________\n", 77 | "dense_2 (Dense) (None, 1) 25 dense_1[0][0] \n", 78 | "==================================================================================================\n", 79 | "Total params: 51,889\n", 80 | "Trainable params: 51,889\n", 81 | "Non-trainable params: 0\n", 82 | "__________________________________________________________________________________________________\n", 83 | "None\n" 84 | ] 85 | }, 86 | { 87 | "name": "stderr", 88 | "output_type": "stream", 89 | "text": [ 90 | "W0829 13:29:13.954625 9248 deprecation_wrapper.py:119] From C:\\Users\\Smartgrid_ML\\Anaconda3\\envs\\tensorflow-gpu\\lib\\site-packages\\keras\\backend\\tensorflow_backend.py:986: The name tf.assign_add is deprecated. Please use tf.compat.v1.assign_add instead.\n", 91 | "\n", 92 | "W0829 13:29:14.504749 9248 deprecation_wrapper.py:119] From C:\\Users\\Smartgrid_ML\\Anaconda3\\envs\\tensorflow-gpu\\lib\\site-packages\\keras\\backend\\tensorflow_backend.py:973: The name tf.assign is deprecated. Please use tf.compat.v1.assign instead.\n", 93 | "\n" 94 | ] 95 | }, 96 | { 97 | "name": "stdout", 98 | "output_type": "stream", 99 | "text": [ 100 | "Train on 19975 samples, validate on 4278 samples\n", 101 | "Epoch 1/20\n", 102 | "19975/19975 [==============================] - 202s 10ms/step - loss: 0.0036 - mean_squared_error: 0.0036 - mean_absolute_error: 0.0438 - mean_absolute_percentage_error: 47434.0854 - val_loss: 0.0019 - val_mean_squared_error: 0.0019 - val_mean_absolute_error: 0.0348 - val_mean_absolute_percentage_error: 15.3546\n", 103 | "Epoch 2/20\n", 104 | "19975/19975 [==============================] - 197s 10ms/step - loss: 0.0017 - mean_squared_error: 0.0017 - mean_absolute_error: 0.0299 - mean_absolute_percentage_error: 47379.8093 - val_loss: 0.0016 - val_mean_squared_error: 0.0016 - val_mean_absolute_error: 0.0307 - val_mean_absolute_percentage_error: 11.9808\n", 105 | "Epoch 3/20\n", 106 | "19975/19975 [==============================] - 198s 10ms/step - loss: 0.0016 - mean_squared_error: 0.0016 - mean_absolute_error: 0.0295 - mean_absolute_percentage_error: 46472.1854 - val_loss: 0.0015 - val_mean_squared_error: 0.0015 - val_mean_absolute_error: 0.0300 - val_mean_absolute_percentage_error: 11.7769\n", 107 | "Epoch 4/20\n", 108 | "19975/19975 [==============================] - 198s 10ms/step - loss: 0.0012 - mean_squared_error: 0.0012 - mean_absolute_error: 0.0242 - mean_absolute_percentage_error: 46737.9109 - val_loss: 0.0013 - val_mean_squared_error: 0.0013 - val_mean_absolute_error: 0.0265 - val_mean_absolute_percentage_error: 9.6319\n", 109 | "Epoch 5/20\n", 110 | "19975/19975 [==============================] - 197s 10ms/step - loss: 0.0012 - mean_squared_error: 0.0012 - mean_absolute_error: 0.0241 - mean_absolute_percentage_error: 46702.4063 - val_loss: 0.0012 - val_mean_squared_error: 0.0012 - val_mean_absolute_error: 0.0262 - val_mean_absolute_percentage_error: 9.5057\n", 111 | "Epoch 6/20\n", 112 | "19975/19975 [==============================] - 197s 10ms/step - loss: 0.0012 - mean_squared_error: 0.0012 - mean_absolute_error: 0.0238 - mean_absolute_percentage_error: 46530.2496 - val_loss: 0.0012 - val_mean_squared_error: 0.0012 - val_mean_absolute_error: 0.0262 - val_mean_absolute_percentage_error: 9.4408\n", 113 | "Epoch 7/20\n", 114 | "19975/19975 [==============================] - 198s 10ms/step - loss: 0.0012 - mean_squared_error: 0.0012 - mean_absolute_error: 0.0239 - mean_absolute_percentage_error: 46498.1685 - val_loss: 0.0012 - val_mean_squared_error: 0.0012 - val_mean_absolute_error: 0.0261 - val_mean_absolute_percentage_error: 9.2552\n", 115 | "Epoch 8/20\n", 116 | "19975/19975 [==============================] - 198s 10ms/step - loss: 0.0012 - mean_squared_error: 0.0012 - mean_absolute_error: 0.0239 - mean_absolute_percentage_error: 46565.5966 - val_loss: 0.0012 - val_mean_squared_error: 0.0012 - val_mean_absolute_error: 0.0261 - val_mean_absolute_percentage_error: 9.2076\n", 117 | "Epoch 9/20\n", 118 | "19975/19975 [==============================] - 196s 10ms/step - loss: 0.0012 - mean_squared_error: 0.0012 - mean_absolute_error: 0.0239 - mean_absolute_percentage_error: 46574.4353 - val_loss: 0.0012 - val_mean_squared_error: 0.0012 - val_mean_absolute_error: 0.0261 - val_mean_absolute_percentage_error: 9.2054\n", 119 | "Epoch 10/20\n", 120 | "19975/19975 [==============================] - 198s 10ms/step - loss: 0.0012 - mean_squared_error: 0.0012 - mean_absolute_error: 0.0239 - mean_absolute_percentage_error: 46574.9108 - val_loss: 0.0012 - val_mean_squared_error: 0.0012 - val_mean_absolute_error: 0.0261 - val_mean_absolute_percentage_error: 9.2053\n", 121 | "Epoch 11/20\n", 122 | "19975/19975 [==============================] - 201s 10ms/step - loss: 0.0012 - mean_squared_error: 0.0012 - mean_absolute_error: 0.0239 - mean_absolute_percentage_error: 46574.9343 - val_loss: 0.0012 - val_mean_squared_error: 0.0012 - val_mean_absolute_error: 0.0261 - val_mean_absolute_percentage_error: 9.2053\n", 123 | "Epoch 12/20\n", 124 | "19975/19975 [==============================] - 199s 10ms/step - loss: 0.0012 - mean_squared_error: 0.0012 - mean_absolute_error: 0.0239 - mean_absolute_percentage_error: 46574.9273 - val_loss: 0.0012 - val_mean_squared_error: 0.0012 - val_mean_absolute_error: 0.0261 - val_mean_absolute_percentage_error: 9.2053\n", 125 | "Epoch 13/20\n", 126 | "19975/19975 [==============================] - 198s 10ms/step - loss: 0.0012 - mean_squared_error: 0.0012 - mean_absolute_error: 0.0239 - mean_absolute_percentage_error: 46574.9273 - val_loss: 0.0012 - val_mean_squared_error: 0.0012 - val_mean_absolute_error: 0.0261 - val_mean_absolute_percentage_error: 9.2053\n", 127 | "Epoch 14/20\n", 128 | "19975/19975 [==============================] - 198s 10ms/step - loss: 0.0012 - mean_squared_error: 0.0012 - mean_absolute_error: 0.0239 - mean_absolute_percentage_error: 46574.9273 - val_loss: 0.0012 - val_mean_squared_error: 0.0012 - val_mean_absolute_error: 0.0261 - val_mean_absolute_percentage_error: 9.2053\n", 129 | "Epoch 15/20\n", 130 | "19975/19975 [==============================] - 199s 10ms/step - loss: 0.0012 - mean_squared_error: 0.0012 - mean_absolute_error: 0.0239 - mean_absolute_percentage_error: 46574.9273 - val_loss: 0.0012 - val_mean_squared_error: 0.0012 - val_mean_absolute_error: 0.0261 - val_mean_absolute_percentage_error: 9.2053\n", 131 | "Epoch 16/20\n", 132 | "19975/19975 [==============================] - 199s 10ms/step - loss: 0.0012 - mean_squared_error: 0.0012 - mean_absolute_error: 0.0239 - mean_absolute_percentage_error: 46574.9273 - val_loss: 0.0012 - val_mean_squared_error: 0.0012 - val_mean_absolute_error: 0.0261 - val_mean_absolute_percentage_error: 9.2053\n", 133 | "Epoch 17/20\n", 134 | "19975/19975 [==============================] - 197s 10ms/step - loss: 0.0012 - mean_squared_error: 0.0012 - mean_absolute_error: 0.0239 - mean_absolute_percentage_error: 46574.9273 - val_loss: 0.0012 - val_mean_squared_error: 0.0012 - val_mean_absolute_error: 0.0261 - val_mean_absolute_percentage_error: 9.2053\n", 135 | "Epoch 18/20\n", 136 | "19975/19975 [==============================] - 198s 10ms/step - loss: 0.0012 - mean_squared_error: 0.0012 - mean_absolute_error: 0.0239 - mean_absolute_percentage_error: 46574.9273 - val_loss: 0.0012 - val_mean_squared_error: 0.0012 - val_mean_absolute_error: 0.0261 - val_mean_absolute_percentage_error: 9.2053\n", 137 | "Epoch 19/20\n", 138 | "19975/19975 [==============================] - 200s 10ms/step - loss: 0.0012 - mean_squared_error: 0.0012 - mean_absolute_error: 0.0239 - mean_absolute_percentage_error: 46574.9273 - val_loss: 0.0012 - val_mean_squared_error: 0.0012 - val_mean_absolute_error: 0.0261 - val_mean_absolute_percentage_error: 9.2053\n", 139 | "Epoch 20/20\n", 140 | "19975/19975 [==============================] - 199s 10ms/step - loss: 0.0012 - mean_squared_error: 0.0012 - mean_absolute_error: 0.0239 - mean_absolute_percentage_error: 46574.9273 - val_loss: 0.0012 - val_mean_squared_error: 0.0012 - val_mean_absolute_error: 0.0261 - val_mean_absolute_percentage_error: 9.2053\n", 141 | "--------------------------------------------------------\n", 142 | " history.mses(=loss) = [0.0035892611817667755, 0.001675093242110631, 0.0016094517335761922, 0.0011965026487001872, 0.001189842783771362, 0.001173889600378677, 0.001176158987782378, 0.0011757579973481539, 0.0011747556001452661, 0.0011747118870224175, 0.001174710433244197, 0.0011747104629235474, 0.001174710466740921, 0.0011747104672071651, 0.0011747104672071651, 0.0011747104672071651, 0.0011747104672071651, 0.0011747104672071651, 0.0011747104672071651, 0.0011747104672071651]\n", 143 | " history.maes = [0.04377227247470013, 0.029913646252231394, 0.029536742707702783, 0.024162484333851608, 0.0240829522860177, 0.023841892735326244, 0.02386851980256497, 0.023877668795228305, 0.023857726781944907, 0.023856780520443325, 0.023856746721010333, 0.023856746230521548, 0.02385674594331519, 0.023856745939585235, 0.023856745939585235, 0.023856745939585235, 0.023856745939585235, 0.023856745939585235, 0.023856745939585235, 0.023856745939585235]\n", 144 | " history.mapes = [47434.08544810657, 47379.80934715832, 46472.185415898515, 46737.91092164979, 46702.406316971035, 46530.24963071958, 46498.16848734192, 46565.596586091524, 46574.43530349815, 46574.910842829566, 46574.93431433062, 46574.92730442788, 46574.927304029705, 46574.927304033525, 46574.927304033525, 46574.927304033525, 46574.927304033525, 46574.927304033525, 46574.927304033525, 46574.927304033525]\n", 145 | " history.val_mses(=loss)= [0.0019012944486128038, 0.001562902556334776, 0.0015041555443237866, 0.001254159283441983, 0.001239364939972988, 0.0012358120764950104, 0.0012297483312720175, 0.0012300019881214778, 0.0012300255826607786, 0.0012300263565859194, 0.0012300263461362973, 0.0012300264056773736, 0.0012300264051331223, 0.0012300264051331223, 0.0012300264051331223, 0.0012300264051331223, 0.0012300264051331223, 0.0012300264051331223, 0.0012300264051331223, 0.0012300264051331223]\n", 146 | " history.val_maes = [0.034813146402536015, 0.030663666341936215, 0.02996613244626666, 0.026468259007672162, 0.02624897863637515, 0.02619586808344871, 0.026070524176017542, 0.026057688971304793, 0.026057370344909233, 0.026057349632016516, 0.026057348989364754, 0.02605734974173755, 0.026057349654657364, 0.026057349654657364, 0.026057349654657364, 0.026057349654657364, 0.026057349654657364, 0.026057349654657364, 0.026057349654657364, 0.026057349654657364]\n", 147 | " history.val_mapes = [15.354620539400832, 11.980772655553046, 11.77690822936598, 9.631908469804262, 9.505689297730035, 9.440761048529627, 9.255185079552293, 9.207560457209105, 9.205374336956037, 9.205271491719051, 9.205268754196702, 9.205268677064558, 9.205268650313524, 9.205268650313524, 9.205268650313524, 9.205268650313524, 9.205268650313524, 9.205268650313524, 9.205268650313524, 9.205268650313524]\n", 148 | "--------------------------------------------------------\n" 149 | ] 150 | }, 151 | { 152 | "data": { 153 | "text/plain": [ 154 | "
" 155 | ] 156 | }, 157 | "metadata": {}, 158 | "output_type": "display_data" 159 | }, 160 | { 161 | "data": { 162 | "text/plain": [ 163 | "
" 164 | ] 165 | }, 166 | "metadata": {}, 167 | "output_type": "display_data" 168 | }, 169 | { 170 | "name": "stdout", 171 | "output_type": "stream", 172 | "text": [ 173 | "Test Score > MSE == 0.001150438303555884 MAE == 0.02483306393372232 MAPE == 10.26835916266054\n" 174 | ] 175 | } 176 | ], 177 | "source": [ 178 | "import pandas as pd\n", 179 | "import tensorflow as tf\n", 180 | "import codecs\n", 181 | "import numpy as np\n", 182 | "import math\n", 183 | "import csv\n", 184 | "from sklearn.preprocessing import MinMaxScaler\n", 185 | "from sklearn.metrics import mean_squared_error\n", 186 | "from sklearn.metrics import mean_absolute_error\n", 187 | "from sklearn.metrics import recall_score, precision_score # New\n", 188 | "from sklearn.metrics import f1_score\n", 189 | "from sklearn.metrics import confusion_matrix\n", 190 | "from sklearn import preprocessing\n", 191 | "import keras\n", 192 | "import matplotlib.pyplot as plt\n", 193 | "from keras.callbacks import ModelCheckpoint, CSVLogger, EarlyStopping, LearningRateScheduler, ReduceLROnPlateau\n", 194 | "from keras.layers import merge\n", 195 | "from keras.models import Sequential, Model\n", 196 | "from keras.layers import Dense, Input, Flatten, Add\n", 197 | "from keras.layers import Activation, BatchNormalization, regularizers\n", 198 | "from keras.layers.convolutional import Conv1D\n", 199 | "from keras.layers.convolutional import MaxPooling1D\n", 200 | "from keras.layers.merge import concatenate\n", 201 | "from keras.layers import LSTM, Bidirectional\n", 202 | "from keras.utils import plot_model\n", 203 | "from keras.layers import Dropout\n", 204 | "from scipy import signal\n", 205 | "import openpyxl\n", 206 | "\n", 207 | "from keras.backend import tensorflow_backend as K\n", 208 | "config = tf.ConfigProto()\n", 209 | "config.gpu_options.allow_growth = True\n", 210 | "K.set_session(tf.Session(config=config))\n", 211 | "\n", 212 | "class LossHistory(keras.callbacks.Callback): # history = LossHistory()\n", 213 | " def init(self): # history.init()\n", 214 | " self.losses = []\n", 215 | " # self.accs = []\n", 216 | " self.val_losses = []\n", 217 | " # self.val_accs = []\n", 218 | " self.mses = []\n", 219 | " self.maes = []\n", 220 | " self.mapes = []\n", 221 | " self.val_mses = []\n", 222 | " self.val_maes = []\n", 223 | " self.val_mapes = []\n", 224 | "\n", 225 | " def on_epoch_end(self, batch, logs={}):\n", 226 | " self.losses.append(logs.get('loss'))\n", 227 | " # self.accs.append(logs.get('acc'))\n", 228 | " self.val_losses.append(logs.get('val_loss'))\n", 229 | " # self.val_accs.append(logs.get('val_accuracy\n", 230 | " self.mses.append(logs.get('mean_squared_error'))\n", 231 | " self.maes.append(logs.get('mean_absolute_error'))\n", 232 | " self.mapes.append(logs.get('mean_absolute_percentage_error'))\n", 233 | " self.val_mses.append(logs.get('val_mean_squared_error'))\n", 234 | " self.val_maes.append(logs.get('val_mean_absolute_error'))\n", 235 | " self.val_mapes.append(logs.get('val_mean_absolute_percentage_error'))\n", 236 | "\n", 237 | "def create_dataset(dataset, timesteps):\n", 238 | " dataX, dataY = [], []\n", 239 | " for i in range(len(dataset) - timesteps - 1):\n", 240 | " a = dataset[i:(i + timesteps), 0]\n", 241 | " dataX.append(a)\n", 242 | " dataY.append(dataset[i + timesteps, 0])\n", 243 | " return np.array(dataX), np.array(dataY)\n", 244 | "\n", 245 | "def mean_absolute_percentage_error(y_true, y_pred):\n", 246 | " y_true, y_pred = np.array(y_true), np.array(y_pred)\n", 247 | " return np.mean(np.abs((y_true - y_pred) / y_true)) * 100\n", 248 | "\n", 249 | "data_path = 'C:/Users/Smartgrid_ML/Desktop/KMS/ercot_2016.xlsx'\n", 250 | "data_source = pd.read_excel(data_path, sheet_name='numbers')\n", 251 | "data_source = pd.DataFrame(data_source)\n", 252 | "data_set = data_source.iloc[:, 3]\n", 253 | "wind_2016 = np.array(data_set)\n", 254 | "wind_2016 = wind_2016.reshape(-1, 1)\n", 255 | "installed_2016 = data_source.iloc[:, 4]\n", 256 | "installed_2016 = np.array(installed_2016)\n", 257 | "installed_2016 = installed_2016.reshape(-1, 1)\n", 258 | "\n", 259 | "data_path = 'C:/Users/Smartgrid_ML/Desktop/KMS/ercot_2017.xlsx'\n", 260 | "data_source = pd.read_excel(data_path, sheet_name='numbers')\n", 261 | "data_source = pd.DataFrame(data_source)\n", 262 | "data_set = data_source.iloc[:, 3]\n", 263 | "wind_2017 = np.array(data_set)\n", 264 | "wind_2017 = wind_2017.reshape(-1, 1)\n", 265 | "installed_2017 = data_source.iloc[:, 4]\n", 266 | "installed_2017 = np.array(installed_2017)\n", 267 | "installed_2017 = installed_2017.reshape(-1, 1)\n", 268 | "\n", 269 | "data_path = 'C:/Users/Smartgrid_ML/Desktop/KMS/ercot_2018.xlsx'\n", 270 | "data_source = pd.read_excel(data_path, sheet_name='numbers')\n", 271 | "data_source = pd.DataFrame(data_source)\n", 272 | "data_set = data_source.iloc[:, 3]\n", 273 | "wind_2018 = np.array(data_set)\n", 274 | "wind_2018 = wind_2018.reshape(-1, 1)\n", 275 | "installed_2018 = data_source.iloc[:, 4]\n", 276 | "installed_2018 = np.array(installed_2018)\n", 277 | "installed_2018 = installed_2018.reshape(-1, 1)\n", 278 | "\n", 279 | "\n", 280 | "wind = np.concatenate((wind_2016, wind_2017, wind_2018), axis=None)\n", 281 | "wind = wind.reshape(-1, 1)\n", 282 | "scaler = MinMaxScaler(feature_range=(0, 1))\n", 283 | "wind = scaler.fit_transform(wind)\n", 284 | "Maxvalue_1 = scaler.data_max_\n", 285 | "print(wind.shape)\n", 286 | "\n", 287 | "np.savetxt('ERCOT_WIND_DATA.txt', wind)\n", 288 | "\n", 289 | "Training_set = wind[0:20000, :]\n", 290 | "Validation_set = wind[20001:24304, :]\n", 291 | "Test_set = wind[24305:26305:, :]\n", 292 | "\n", 293 | "Tr_mean = np.nanmean(wind)\n", 294 | "Tr_var = np.nanvar(wind)\n", 295 | "\n", 296 | "print('Dataset mean = ', Tr_mean, 'var = ', Tr_var)\n", 297 | "print('Maximum value = ', Maxvalue_1)\n", 298 | "\n", 299 | "features = 1\n", 300 | "timesteps = 24\n", 301 | "trainX, trainY = create_dataset(Training_set, timesteps)\n", 302 | "validX, validY = create_dataset(Validation_set, timesteps)\n", 303 | "testX, testY = create_dataset(Test_set, timesteps)\n", 304 | "\n", 305 | "trainX = np.reshape(trainX, (trainX.shape[0], trainX.shape[1], 1))\n", 306 | "validX = np.reshape(validX, (validX.shape[0], validX.shape[1], 1))\n", 307 | "testX = np.reshape(testX, (testX.shape[0], testX.shape[1], 1))\n", 308 | "\n", 309 | "# -----------------------------------------------------------------------------------------------------------\n", 310 | "# -----------------------------------------------------------------------------------------------------------\n", 311 | "visible1 = Input(shape=(timesteps, features))\n", 312 | "\n", 313 | "bi11 = (Bidirectional(LSTM(16, return_sequences=True)))(visible1) ### success\n", 314 | "bi12 = (Bidirectional(LSTM(16, return_sequences=True)))(bi11)\n", 315 | "res13 = keras.layers.Add()([bi12, visible1])\n", 316 | "\n", 317 | "bi13 = (Bidirectional(LSTM(16, return_sequences=True)))(res13)\n", 318 | "bi14 = (Bidirectional(LSTM(16, return_sequences=True)))(bi13)\n", 319 | "res14 = keras.layers.Add()([res13, bi14])\n", 320 | "\n", 321 | "bi15 = (Bidirectional(LSTM(16, return_sequences=True)))(res14)\n", 322 | "bi16 = (Bidirectional(LSTM(16, return_sequences=True)))(bi15)\n", 323 | "res15 = keras.layers.Add()([res14, bi16, visible1])\n", 324 | "\n", 325 | "#bi17 = (Bidirectional(LSTM(16, return_sequences=True)))(bi16)\n", 326 | "#bi18 = (Bidirectional(LSTM(16, return_sequences=True)))(bi17)\n", 327 | "#res16 = keras.layers.Add()([res15, bi18])\n", 328 | "\n", 329 | "#bi19 = (Bidirectional(LSTM(16, return_sequences=True)))(res16)\n", 330 | "#bi20 = (Bidirectional(LSTM(16, return_sequences=True)))(bi19)\n", 331 | "#res17 = keras.layers.Add()([res16, bi20, visible1])\n", 332 | "\n", 333 | "bi21 = (Bidirectional(LSTM(32)))(res15)\n", 334 | "\n", 335 | "dense11 = Dense(24, activation='selu')(bi21)\n", 336 | "out1 = Dense(1, activation='selu')(dense11)\n", 337 | "\n", 338 | "model = Model(inputs=[visible1], outputs=[out1]) # multi-input, multi-output\n", 339 | "\n", 340 | "#########################################\n", 341 | "\n", 342 | "print(model.summary())\n", 343 | "\n", 344 | "reducelr = ReduceLROnPlateau(monitor='val_loss', factor=0.1, patience=1) # 에포크 1동안 좋아지지 않으면 호출\n", 345 | "\n", 346 | "model.compile(loss='mean_squared_error', optimizer='adam', metrics=['mse', 'mae', 'mape'])\n", 347 | "\n", 348 | "batch_size = 40\n", 349 | "epochs = 20\n", 350 | "\n", 351 | "history = LossHistory()\n", 352 | "history.init()\n", 353 | "\n", 354 | "model.fit(trainX, trainY, epochs=epochs, batch_size=batch_size, shuffle=False, validation_data=(validX, validY), callbacks=[history, reducelr]) # , checkpoint\n", 355 | "\n", 356 | "trainPredict = model.predict(trainX, batch_size=batch_size)\n", 357 | "testPredict = model.predict(testX, batch_size=batch_size)\n", 358 | "\n", 359 | "trainPredict = trainPredict.reshape([-1])\n", 360 | "testPredict = testPredict.reshape([-1])\n", 361 | "testY = testY.reshape([-1])\n", 362 | "trainY = trainY.reshape([-1])\n", 363 | "\n", 364 | "np.savetxt('trainPredict_5.txt', trainPredict)\n", 365 | "np.savetxt('testPredict_5.txt', testPredict)\n", 366 | "np.savetxt('testY_5.txt', testY)\n", 367 | "np.savetxt('trainY_5.txt', trainY)\n", 368 | "\n", 369 | "print('--------------------------------------------------------')\n", 370 | "print(' history.mses(=loss) = ', history.mses) # loss == mse\n", 371 | "print(' history.maes = ', history.maes)\n", 372 | "print(' history.mapes = ', history.mapes)\n", 373 | "print(' history.val_mses(=loss)= ', history.val_mses) # loss == mse\n", 374 | "print(' history.val_maes = ', history.val_maes)\n", 375 | "print(' history.val_mapes = ', history.val_mapes)\n", 376 | "print('--------------------------------------------------------')\n", 377 | "\n", 378 | "plt.figure(1)\n", 379 | "plt.plot(testPredict, 'r')\n", 380 | "plt.plot(testY, 'b')\n", 381 | "plt.show()\n", 382 | "\n", 383 | "plt.figure(2)\n", 384 | "plt.plot(history.mses, 'b--')\n", 385 | "plt.plot(history.val_mses, 'b:')\n", 386 | "plt.plot(history.maes, 'ro')\n", 387 | "plt.plot(history.val_maes, 'r+')\n", 388 | "plt.ylabel('Loss and Accuracy')\n", 389 | "plt.xlabel('epoch')\n", 390 | "plt.show()\n", 391 | "\n", 392 | "print('Test Score > MSE == ', mean_squared_error(testY, testPredict), ' MAE == ', mean_absolute_error(testY, testPredict), 'MAPE == ', mean_absolute_percentage_error(testY, testPredict))" 393 | ] 394 | }, 395 | { 396 | "cell_type": "code", 397 | "execution_count": null, 398 | "metadata": {}, 399 | "outputs": [], 400 | "source": [] 401 | } 402 | ], 403 | "metadata": { 404 | "kernelspec": { 405 | "display_name": "Python 3", 406 | "language": "python", 407 | "name": "python3" 408 | }, 409 | "language_info": { 410 | "codemirror_mode": { 411 | "name": "ipython", 412 | "version": 3 413 | }, 414 | "file_extension": ".py", 415 | "mimetype": "text/x-python", 416 | "name": "python", 417 | "nbconvert_exporter": "python", 418 | "pygments_lexer": "ipython3", 419 | "version": "3.6.9" 420 | } 421 | }, 422 | "nbformat": 4, 423 | "nbformat_minor": 4 424 | } 425 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # DRNet 2 | Codes for "Deep Concatenated Residual Network with Bidirectional LSTM for One-Hour-Ahead Wind Power Forecasting" in IEEE Transactions on Sustainable Energy. 3 | 4 | ### Authors 5 | Min-seung Ko, Kwangsuk Lee, Jae-Kyeong Kim, Chang Woo Hong, Zhao Yang Dong, and Kyeon Hur 6 | ### Paper Information 7 | https://ieeexplore.ieee.org/document/9290065 8 | ### Citation 9 | M. -s. Ko, K. Lee, J. -K. Kim, C. W. Hong, Z. Y. Dong and K. Hur, "Deep Concatenated Residual Network with Bidirectional LSTM for One-Hour-Ahead Wind Power Forecasting," in IEEE Transactions on Sustainable Energy, doi: 10.1109/TSTE.2020.3043884. 10 | 11 | ### Datset 12 | ERCOT Wind Power Dataset can be downloaded from http://www.ercot.com/gridinfo/generation 13 | Jena's Temperature Dataset can be downloaded from https://www.kaggle.com/stytch16/jena-climate-2009-2016 14 | 15 | ### Experiments 16 | Experiments for Wind Power Forecasting : ResNet_ERCOT.ipynb, MultiResidual_ERCOT.ipynb, MRN_7Layer_ERCOT.ipynb, MRN_11Layer_ERCOT.ipynb, DenseNet_7Layer_ERCOT.ipynb, DenseNet_11Layer_ERCOT.ipynb, DRNet-3_7Layer_ERCOT.ipynb, DRNet3_11Layer_ERCOT.ipynb, DRNet-4_7Layer_ERCOT.ipynb, DRNet-4_11Layer_ERCOT.ipynb, Fused_DRNet-1_ERCOT.ipynb 17 | 18 | Experiments for Attention & Weather : Weather_Fused.ipynb (w/o Attention, with Wind speed), Weather_Attention_Fused_DRNet-1.ipynb (with Attention, Wind speed), NotWeather_Fused.ipynb (w/o Attention, Wind speed), Notweather_Attention_Fused.ipynb (with Attention, w/o Wind speed) 19 | 20 | Experiments for Tempearture Forecasting : Jena_DRNet-3.ipynb, Jena_DenseNet.ipynb, Jena_FusedDRNet-1.ipynb, Jena_PureBi-LSTM.ipynb, Jena_ResNet.ipynb 21 | -------------------------------------------------------------------------------- /ResNet_ERCOT.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": {}, 7 | "outputs": [ 8 | { 9 | "name": "stderr", 10 | "output_type": "stream", 11 | "text": [ 12 | "Using TensorFlow backend.\n", 13 | "WARNING: Logging before flag parsing goes to stderr.\n", 14 | "W0902 13:11:01.689034 16028 deprecation_wrapper.py:119] From C:\\Users\\Smartgrid_ML\\Anaconda3\\envs\\tensorflow-gpu\\lib\\site-packages\\keras\\backend\\tensorflow_backend.py:74: The name tf.get_default_graph is deprecated. Please use tf.compat.v1.get_default_graph instead.\n", 15 | "\n", 16 | "W0902 13:11:01.690034 16028 deprecation_wrapper.py:119] From C:\\Users\\Smartgrid_ML\\Anaconda3\\envs\\tensorflow-gpu\\lib\\site-packages\\keras\\backend\\tensorflow_backend.py:517: The name tf.placeholder is deprecated. Please use tf.compat.v1.placeholder instead.\n", 17 | "\n", 18 | "W0902 13:11:01.693035 16028 deprecation_wrapper.py:119] From C:\\Users\\Smartgrid_ML\\Anaconda3\\envs\\tensorflow-gpu\\lib\\site-packages\\keras\\backend\\tensorflow_backend.py:4138: The name tf.random_uniform is deprecated. Please use tf.random.uniform instead.\n", 19 | "\n" 20 | ] 21 | }, 22 | { 23 | "name": "stdout", 24 | "output_type": "stream", 25 | "text": [ 26 | "(26311, 1)\n", 27 | "Dataset mean = 0.36639967284314107 var = 0.04237001272906482\n", 28 | "Maximum value = [19099.07421875]\n" 29 | ] 30 | }, 31 | { 32 | "name": "stderr", 33 | "output_type": "stream", 34 | "text": [ 35 | "W0902 13:11:03.652714 16028 deprecation.py:323] From C:\\Users\\Smartgrid_ML\\Anaconda3\\envs\\tensorflow-gpu\\lib\\site-packages\\keras\\backend\\tensorflow_backend.py:3217: add_dispatch_support..wrapper (from tensorflow.python.ops.array_ops) is deprecated and will be removed in a future version.\n", 36 | "Instructions for updating:\n", 37 | "Use tf.where in 2.0, which has the same broadcast rule as np.where\n", 38 | "W0902 13:11:03.667717 16028 deprecation_wrapper.py:119] From C:\\Users\\Smartgrid_ML\\Anaconda3\\envs\\tensorflow-gpu\\lib\\site-packages\\keras\\optimizers.py:790: The name tf.train.Optimizer is deprecated. Please use tf.compat.v1.train.Optimizer instead.\n", 39 | "\n" 40 | ] 41 | }, 42 | { 43 | "name": "stdout", 44 | "output_type": "stream", 45 | "text": [ 46 | "__________________________________________________________________________________________________\n", 47 | "Layer (type) Output Shape Param # Connected to \n", 48 | "==================================================================================================\n", 49 | "input_1 (InputLayer) (None, 24, 1) 0 \n", 50 | "__________________________________________________________________________________________________\n", 51 | "bidirectional_1 (Bidirectional) (None, 24, 32) 2304 input_1[0][0] \n", 52 | "__________________________________________________________________________________________________\n", 53 | "bidirectional_2 (Bidirectional) (None, 24, 32) 6272 bidirectional_1[0][0] \n", 54 | "__________________________________________________________________________________________________\n", 55 | "add_1 (Add) (None, 24, 32) 0 bidirectional_2[0][0] \n", 56 | " input_1[0][0] \n", 57 | "__________________________________________________________________________________________________\n", 58 | "bidirectional_3 (Bidirectional) (None, 24, 32) 6272 add_1[0][0] \n", 59 | "__________________________________________________________________________________________________\n", 60 | "bidirectional_4 (Bidirectional) (None, 24, 32) 6272 bidirectional_3[0][0] \n", 61 | "__________________________________________________________________________________________________\n", 62 | "add_2 (Add) (None, 24, 32) 0 add_1[0][0] \n", 63 | " bidirectional_4[0][0] \n", 64 | "__________________________________________________________________________________________________\n", 65 | "bidirectional_5 (Bidirectional) (None, 24, 32) 6272 add_2[0][0] \n", 66 | "__________________________________________________________________________________________________\n", 67 | "bidirectional_6 (Bidirectional) (None, 24, 32) 6272 bidirectional_5[0][0] \n", 68 | "__________________________________________________________________________________________________\n", 69 | "add_3 (Add) (None, 24, 32) 0 add_2[0][0] \n", 70 | " bidirectional_6[0][0] \n", 71 | " input_1[0][0] \n", 72 | "__________________________________________________________________________________________________\n", 73 | "bidirectional_7 (Bidirectional) (None, 64) 16640 add_3[0][0] \n", 74 | "__________________________________________________________________________________________________\n", 75 | "dense_1 (Dense) (None, 24) 1560 bidirectional_7[0][0] \n", 76 | "__________________________________________________________________________________________________\n", 77 | "dense_2 (Dense) (None, 1) 25 dense_1[0][0] \n", 78 | "==================================================================================================\n", 79 | "Total params: 51,889\n", 80 | "Trainable params: 51,889\n", 81 | "Non-trainable params: 0\n", 82 | "__________________________________________________________________________________________________\n", 83 | "None\n" 84 | ] 85 | }, 86 | { 87 | "name": "stderr", 88 | "output_type": "stream", 89 | "text": [ 90 | "W0902 13:11:09.669086 16028 deprecation_wrapper.py:119] From C:\\Users\\Smartgrid_ML\\Anaconda3\\envs\\tensorflow-gpu\\lib\\site-packages\\keras\\backend\\tensorflow_backend.py:986: The name tf.assign_add is deprecated. Please use tf.compat.v1.assign_add instead.\n", 91 | "\n", 92 | "W0902 13:11:10.233215 16028 deprecation_wrapper.py:119] From C:\\Users\\Smartgrid_ML\\Anaconda3\\envs\\tensorflow-gpu\\lib\\site-packages\\keras\\backend\\tensorflow_backend.py:973: The name tf.assign is deprecated. Please use tf.compat.v1.assign instead.\n", 93 | "\n" 94 | ] 95 | }, 96 | { 97 | "name": "stdout", 98 | "output_type": "stream", 99 | "text": [ 100 | "Train on 19975 samples, validate on 4278 samples\n", 101 | "Epoch 1/20\n", 102 | "19975/19975 [==============================] - 213s 11ms/step - loss: 0.0069 - mean_squared_error: 0.0069 - mean_absolute_error: 0.0525 - mean_absolute_percentage_error: 40875.2412 - val_loss: 0.0021 - val_mean_squared_error: 0.0021 - val_mean_absolute_error: 0.0365 - val_mean_absolute_percentage_error: 15.3689\n", 103 | "Epoch 2/20\n", 104 | "19975/19975 [==============================] - 208s 10ms/step - loss: 0.0077 - mean_squared_error: 0.0077 - mean_absolute_error: 0.0530 - mean_absolute_percentage_error: 37836.3634 - val_loss: 0.0019 - val_mean_squared_error: 0.0019 - val_mean_absolute_error: 0.0347 - val_mean_absolute_percentage_error: 16.0936\n", 105 | "Epoch 3/20\n", 106 | "19975/19975 [==============================] - 206s 10ms/step - loss: 0.0015 - mean_squared_error: 0.0015 - mean_absolute_error: 0.0283 - mean_absolute_percentage_error: 47726.5070 - val_loss: 0.0014 - val_mean_squared_error: 0.0014 - val_mean_absolute_error: 0.0294 - val_mean_absolute_percentage_error: 12.3998\n", 107 | "Epoch 4/20\n", 108 | "19975/19975 [==============================] - 207s 10ms/step - loss: 0.0014 - mean_squared_error: 0.0014 - mean_absolute_error: 0.0265 - mean_absolute_percentage_error: 49950.2543 - val_loss: 0.0013 - val_mean_squared_error: 0.0013 - val_mean_absolute_error: 0.0273 - val_mean_absolute_percentage_error: 10.3556\n", 109 | "Epoch 5/20\n", 110 | "19975/19975 [==============================] - 207s 10ms/step - loss: 0.0013 - mean_squared_error: 0.0013 - mean_absolute_error: 0.0260 - mean_absolute_percentage_error: 48794.3780 - val_loss: 0.0013 - val_mean_squared_error: 0.0013 - val_mean_absolute_error: 0.0273 - val_mean_absolute_percentage_error: 10.6039\n", 111 | "Epoch 6/20\n", 112 | "19975/19975 [==============================] - 208s 10ms/step - loss: 0.0012 - mean_squared_error: 0.0012 - mean_absolute_error: 0.0244 - mean_absolute_percentage_error: 48268.7728 - val_loss: 0.0013 - val_mean_squared_error: 0.0013 - val_mean_absolute_error: 0.0266 - val_mean_absolute_percentage_error: 9.8027\n", 113 | "Epoch 7/20\n", 114 | "19975/19975 [==============================] - 208s 10ms/step - loss: 0.0012 - mean_squared_error: 0.0012 - mean_absolute_error: 0.0243 - mean_absolute_percentage_error: 48229.6641 - val_loss: 0.0012 - val_mean_squared_error: 0.0012 - val_mean_absolute_error: 0.0264 - val_mean_absolute_percentage_error: 9.6099\n", 115 | "Epoch 8/20\n", 116 | "19975/19975 [==============================] - 208s 10ms/step - loss: 0.0012 - mean_squared_error: 0.0012 - mean_absolute_error: 0.0243 - mean_absolute_percentage_error: 48214.2490 - val_loss: 0.0012 - val_mean_squared_error: 0.0012 - val_mean_absolute_error: 0.0263 - val_mean_absolute_percentage_error: 9.3767\n", 117 | "Epoch 9/20\n", 118 | "19975/19975 [==============================] - 206s 10ms/step - loss: 0.0012 - mean_squared_error: 0.0012 - mean_absolute_error: 0.0243 - mean_absolute_percentage_error: 48257.3604 - val_loss: 0.0012 - val_mean_squared_error: 0.0012 - val_mean_absolute_error: 0.0263 - val_mean_absolute_percentage_error: 9.3565\n", 119 | "Epoch 10/20\n", 120 | "19975/19975 [==============================] - 207s 10ms/step - loss: 0.0012 - mean_squared_error: 0.0012 - mean_absolute_error: 0.0243 - mean_absolute_percentage_error: 48262.8184 - val_loss: 0.0012 - val_mean_squared_error: 0.0012 - val_mean_absolute_error: 0.0263 - val_mean_absolute_percentage_error: 9.3557\n", 121 | "Epoch 11/20\n", 122 | "19975/19975 [==============================] - 206s 10ms/step - loss: 0.0012 - mean_squared_error: 0.0012 - mean_absolute_error: 0.0243 - mean_absolute_percentage_error: 48263.0267 - val_loss: 0.0012 - val_mean_squared_error: 0.0012 - val_mean_absolute_error: 0.0263 - val_mean_absolute_percentage_error: 9.3556\n", 123 | "Epoch 12/20\n", 124 | "19975/19975 [==============================] - 207s 10ms/step - loss: 0.0012 - mean_squared_error: 0.0012 - mean_absolute_error: 0.0243 - mean_absolute_percentage_error: 48263.0531 - val_loss: 0.0012 - val_mean_squared_error: 0.0012 - val_mean_absolute_error: 0.0263 - val_mean_absolute_percentage_error: 9.3556\n", 125 | "Epoch 13/20\n", 126 | "19975/19975 [==============================] - 206s 10ms/step - loss: 0.0012 - mean_squared_error: 0.0012 - mean_absolute_error: 0.0243 - mean_absolute_percentage_error: 48263.0530 - val_loss: 0.0012 - val_mean_squared_error: 0.0012 - val_mean_absolute_error: 0.0263 - val_mean_absolute_percentage_error: 9.3556\n", 127 | "Epoch 14/20\n", 128 | "19975/19975 [==============================] - 205s 10ms/step - loss: 0.0012 - mean_squared_error: 0.0012 - mean_absolute_error: 0.0243 - mean_absolute_percentage_error: 48263.0530 - val_loss: 0.0012 - val_mean_squared_error: 0.0012 - val_mean_absolute_error: 0.0263 - val_mean_absolute_percentage_error: 9.3556\n", 129 | "Epoch 15/20\n", 130 | "19975/19975 [==============================] - 207s 10ms/step - loss: 0.0012 - mean_squared_error: 0.0012 - mean_absolute_error: 0.0243 - mean_absolute_percentage_error: 48263.0530 - val_loss: 0.0012 - val_mean_squared_error: 0.0012 - val_mean_absolute_error: 0.0263 - val_mean_absolute_percentage_error: 9.3556\n", 131 | "Epoch 16/20\n", 132 | "19975/19975 [==============================] - 208s 10ms/step - loss: 0.0012 - mean_squared_error: 0.0012 - mean_absolute_error: 0.0243 - mean_absolute_percentage_error: 48263.0530 - val_loss: 0.0012 - val_mean_squared_error: 0.0012 - val_mean_absolute_error: 0.0263 - val_mean_absolute_percentage_error: 9.3556\n", 133 | "Epoch 17/20\n", 134 | "19975/19975 [==============================] - 206s 10ms/step - loss: 0.0012 - mean_squared_error: 0.0012 - mean_absolute_error: 0.0243 - mean_absolute_percentage_error: 48263.0530 - val_loss: 0.0012 - val_mean_squared_error: 0.0012 - val_mean_absolute_error: 0.0263 - val_mean_absolute_percentage_error: 9.3556\n", 135 | "Epoch 18/20\n", 136 | "19975/19975 [==============================] - 206s 10ms/step - loss: 0.0012 - mean_squared_error: 0.0012 - mean_absolute_error: 0.0243 - mean_absolute_percentage_error: 48263.0530 - val_loss: 0.0012 - val_mean_squared_error: 0.0012 - val_mean_absolute_error: 0.0263 - val_mean_absolute_percentage_error: 9.3556\n", 137 | "Epoch 19/20\n", 138 | "19975/19975 [==============================] - 206s 10ms/step - loss: 0.0012 - mean_squared_error: 0.0012 - mean_absolute_error: 0.0243 - mean_absolute_percentage_error: 48263.0530 - val_loss: 0.0012 - val_mean_squared_error: 0.0012 - val_mean_absolute_error: 0.0263 - val_mean_absolute_percentage_error: 9.3556\n", 139 | "Epoch 20/20\n", 140 | "19975/19975 [==============================] - 206s 10ms/step - loss: 0.0012 - mean_squared_error: 0.0012 - mean_absolute_error: 0.0243 - mean_absolute_percentage_error: 48263.0530 - val_loss: 0.0012 - val_mean_squared_error: 0.0012 - val_mean_absolute_error: 0.0263 - val_mean_absolute_percentage_error: 9.3556\n", 141 | "--------------------------------------------------------\n", 142 | " history.mses(=loss) = [0.006872482068786568, 0.0077483443883236015, 0.001501621234913162, 0.0013672297038907215, 0.001338834431472914, 0.0012154225082263743, 0.001204968095761147, 0.0012071105792741984, 0.0012046101000259056, 0.0012042879121283649, 0.001204276148323669, 0.001204275611589298, 0.0012042755874320259, 0.0012042755857710314, 0.0012042755857710314, 0.0012042755857710314, 0.0012042755857710314, 0.0012042755857710314, 0.0012042755857710314, 0.0012042755857710314]\n", 143 | " history.maes = [0.052466119791804176, 0.05303965740334779, 0.02833758876315121, 0.02654672131007619, 0.026012481570486284, 0.024398082058797493, 0.024252076567301016, 0.02431484936632785, 0.024271174760369843, 0.024264431486980934, 0.02426416512219718, 0.024264151973181283, 0.024264150724579606, 0.02426415072271463, 0.02426415072271463, 0.02426415072271463, 0.02426415072271463, 0.02426415072271463, 0.02426415072271463, 0.02426415072271463]\n", 144 | " history.mapes = [40875.241249451676, 37836.36342250116, 47726.50704052774, 49950.254326678754, 48794.37796399978, 48268.772821748, 48229.664115685126, 48214.24895639915, 48257.36041102714, 48262.81842520234, 48263.0266944119, 48263.05307811825, 48263.05295213853, 48263.05295204926, 48263.05295204926, 48263.05295204926, 48263.05295204926, 48263.05295204926, 48263.05295204926, 48263.05295204926]\n", 145 | " history.val_mses(=loss)= [0.002118365975077664, 0.0019220913214588998, 0.001437794913336645, 0.0012979274414816732, 0.0012952778828010318, 0.0012584127095088627, 0.00124848501991033, 0.0012434725828713495, 0.0012437838810883974, 0.0012437924457511065, 0.0012437926298712718, 0.001243792688378271, 0.0012437926687852293, 0.0012437926687852293, 0.0012437926687852293, 0.0012437926687852293, 0.0012437926687852293, 0.0012437926687852293, 0.0012437926687852293, 0.0012437926687852293]\n", 146 | " history.val_maes = [0.03647774260781981, 0.03473447616786364, 0.02943171221151593, 0.027279887494708176, 0.027284387262235907, 0.02662468800872439, 0.026448462970028865, 0.026310390348242733, 0.02630661562078185, 0.02630642202237378, 0.026306407917125473, 0.02630640879315213, 0.026306408671239873, 0.026306408671239873, 0.026306408671239873, 0.026306408671239873, 0.026306408671239873, 0.026306408671239873, 0.026306408671239873, 0.026306408671239873]\n", 147 | " history.val_mapes = [15.368852866816153, 16.093629013550174, 12.399834102757238, 10.355642688335688, 10.603880456475913, 9.802712919780058, 9.609862767630172, 9.376698480582004, 9.356496968298329, 9.35566228881736, 9.35561418020597, 9.35561283953338, 9.35561256087679, 9.35561256087679, 9.35561256087679, 9.35561256087679, 9.35561256087679, 9.35561256087679, 9.35561256087679, 9.35561256087679]\n", 148 | "--------------------------------------------------------\n" 149 | ] 150 | }, 151 | { 152 | "data": { 153 | "text/plain": [ 154 | "
" 155 | ] 156 | }, 157 | "metadata": {}, 158 | "output_type": "display_data" 159 | }, 160 | { 161 | "data": { 162 | "text/plain": [ 163 | "
" 164 | ] 165 | }, 166 | "metadata": {}, 167 | "output_type": "display_data" 168 | }, 169 | { 170 | "name": "stdout", 171 | "output_type": "stream", 172 | "text": [ 173 | "Test Score > MSE == 0.0012397661367499044 MAE == 0.025894362685903113 MAPE == 10.591968993204157\n" 174 | ] 175 | } 176 | ], 177 | "source": [ 178 | "import pandas as pd\n", 179 | "import tensorflow as tf\n", 180 | "import codecs\n", 181 | "import numpy as np\n", 182 | "import math\n", 183 | "import csv\n", 184 | "from sklearn.preprocessing import MinMaxScaler\n", 185 | "from sklearn.metrics import mean_squared_error\n", 186 | "from sklearn.metrics import mean_absolute_error\n", 187 | "from sklearn.metrics import recall_score, precision_score # New\n", 188 | "from sklearn.metrics import f1_score\n", 189 | "from sklearn.metrics import confusion_matrix\n", 190 | "from sklearn import preprocessing\n", 191 | "import keras\n", 192 | "import matplotlib.pyplot as plt\n", 193 | "from keras.callbacks import ModelCheckpoint, CSVLogger, EarlyStopping, LearningRateScheduler, ReduceLROnPlateau\n", 194 | "from keras.layers import merge\n", 195 | "from keras.models import Sequential, Model\n", 196 | "from keras.layers import Dense, Input, Flatten, Add\n", 197 | "from keras.layers import Activation, BatchNormalization, regularizers\n", 198 | "from keras.layers.convolutional import Conv1D\n", 199 | "from keras.layers.convolutional import MaxPooling1D\n", 200 | "from keras.layers.merge import concatenate\n", 201 | "from keras.layers import LSTM, Bidirectional\n", 202 | "from keras.utils import plot_model\n", 203 | "from keras.layers import Dropout\n", 204 | "from scipy import signal\n", 205 | "import openpyxl\n", 206 | "\n", 207 | "from keras.backend import tensorflow_backend as K\n", 208 | "config = tf.ConfigProto()\n", 209 | "config.gpu_options.allow_growth = True\n", 210 | "K.set_session(tf.Session(config=config))\n", 211 | "\n", 212 | "class LossHistory(keras.callbacks.Callback): # history = LossHistory()\n", 213 | " def init(self): # history.init()\n", 214 | " self.losses = []\n", 215 | " # self.accs = []\n", 216 | " self.val_losses = []\n", 217 | " # self.val_accs = []\n", 218 | " self.mses = []\n", 219 | " self.maes = []\n", 220 | " self.mapes = []\n", 221 | " self.val_mses = []\n", 222 | " self.val_maes = []\n", 223 | " self.val_mapes = []\n", 224 | "\n", 225 | " def on_epoch_end(self, batch, logs={}):\n", 226 | " self.losses.append(logs.get('loss'))\n", 227 | " # self.accs.append(logs.get('acc'))\n", 228 | " self.val_losses.append(logs.get('val_loss'))\n", 229 | " # self.val_accs.append(logs.get('val_accuracy\n", 230 | " self.mses.append(logs.get('mean_squared_error'))\n", 231 | " self.maes.append(logs.get('mean_absolute_error'))\n", 232 | " self.mapes.append(logs.get('mean_absolute_percentage_error'))\n", 233 | " self.val_mses.append(logs.get('val_mean_squared_error'))\n", 234 | " self.val_maes.append(logs.get('val_mean_absolute_error'))\n", 235 | " self.val_mapes.append(logs.get('val_mean_absolute_percentage_error'))\n", 236 | "\n", 237 | "def create_dataset(dataset, timesteps):\n", 238 | " dataX, dataY = [], []\n", 239 | " for i in range(len(dataset) - timesteps - 1):\n", 240 | " a = dataset[i:(i + timesteps), 0]\n", 241 | " dataX.append(a)\n", 242 | " dataY.append(dataset[i + timesteps, 0])\n", 243 | " return np.array(dataX), np.array(dataY)\n", 244 | "\n", 245 | "def mean_absolute_percentage_error(y_true, y_pred):\n", 246 | " y_true, y_pred = np.array(y_true), np.array(y_pred)\n", 247 | " return np.mean(np.abs((y_true - y_pred) / y_true)) * 100\n", 248 | "\n", 249 | "data_path = 'C:/Users/Smartgrid_ML/Desktop/KMS/ercot_2016.xlsx'\n", 250 | "data_source = pd.read_excel(data_path, sheet_name='numbers')\n", 251 | "data_source = pd.DataFrame(data_source)\n", 252 | "data_set = data_source.iloc[:, 3]\n", 253 | "wind_2016 = np.array(data_set)\n", 254 | "wind_2016 = wind_2016.reshape(-1, 1)\n", 255 | "installed_2016 = data_source.iloc[:, 4]\n", 256 | "installed_2016 = np.array(installed_2016)\n", 257 | "installed_2016 = installed_2016.reshape(-1, 1)\n", 258 | "\n", 259 | "data_path = 'C:/Users/Smartgrid_ML/Desktop/KMS/ercot_2017.xlsx'\n", 260 | "data_source = pd.read_excel(data_path, sheet_name='numbers')\n", 261 | "data_source = pd.DataFrame(data_source)\n", 262 | "data_set = data_source.iloc[:, 3]\n", 263 | "wind_2017 = np.array(data_set)\n", 264 | "wind_2017 = wind_2017.reshape(-1, 1)\n", 265 | "installed_2017 = data_source.iloc[:, 4]\n", 266 | "installed_2017 = np.array(installed_2017)\n", 267 | "installed_2017 = installed_2017.reshape(-1, 1)\n", 268 | "\n", 269 | "data_path = 'C:/Users/Smartgrid_ML/Desktop/KMS/ercot_2018.xlsx'\n", 270 | "data_source = pd.read_excel(data_path, sheet_name='numbers')\n", 271 | "data_source = pd.DataFrame(data_source)\n", 272 | "data_set = data_source.iloc[:, 3]\n", 273 | "wind_2018 = np.array(data_set)\n", 274 | "wind_2018 = wind_2018.reshape(-1, 1)\n", 275 | "installed_2018 = data_source.iloc[:, 4]\n", 276 | "installed_2018 = np.array(installed_2018)\n", 277 | "installed_2018 = installed_2018.reshape(-1, 1)\n", 278 | "\n", 279 | "\n", 280 | "wind = np.concatenate((wind_2016, wind_2017, wind_2018), axis=None)\n", 281 | "wind = wind.reshape(-1, 1)\n", 282 | "scaler = MinMaxScaler(feature_range=(0, 1))\n", 283 | "wind = scaler.fit_transform(wind)\n", 284 | "Maxvalue_1 = scaler.data_max_\n", 285 | "print(wind.shape)\n", 286 | "\n", 287 | "np.savetxt('ERCOT_WIND_DATA.txt', wind)\n", 288 | "\n", 289 | "Training_set = wind[0:20000, :]\n", 290 | "Validation_set = wind[20001:24304, :]\n", 291 | "Test_set = wind[24305:26305:, :]\n", 292 | "\n", 293 | "Tr_mean = np.nanmean(wind)\n", 294 | "Tr_var = np.nanvar(wind)\n", 295 | "\n", 296 | "print('Dataset mean = ', Tr_mean, 'var = ', Tr_var)\n", 297 | "print('Maximum value = ', Maxvalue_1)\n", 298 | "\n", 299 | "features = 1\n", 300 | "timesteps = 24\n", 301 | "trainX, trainY = create_dataset(Training_set, timesteps)\n", 302 | "validX, validY = create_dataset(Validation_set, timesteps)\n", 303 | "testX, testY = create_dataset(Test_set, timesteps)\n", 304 | "\n", 305 | "trainX = np.reshape(trainX, (trainX.shape[0], trainX.shape[1], 1))\n", 306 | "validX = np.reshape(validX, (validX.shape[0], validX.shape[1], 1))\n", 307 | "testX = np.reshape(testX, (testX.shape[0], testX.shape[1], 1))\n", 308 | "\n", 309 | "# -----------------------------------------------------------------------------------------------------------\n", 310 | "# -----------------------------------------------------------------------------------------------------------\n", 311 | "visible1 = Input(shape=(timesteps, features))\n", 312 | "\n", 313 | "bi11 = (Bidirectional(LSTM(16, return_sequences=True)))(visible1) ### success\n", 314 | "bi12 = (Bidirectional(LSTM(16, return_sequences=True)))(bi11)\n", 315 | "res13 = keras.layers.Add()([bi12, visible1])\n", 316 | "\n", 317 | "bi13 = (Bidirectional(LSTM(16, return_sequences=True)))(res13)\n", 318 | "bi14 = (Bidirectional(LSTM(16, return_sequences=True)))(bi13)\n", 319 | "res14 = keras.layers.Add()([res13, bi14])\n", 320 | "\n", 321 | "bi15 = (Bidirectional(LSTM(16, return_sequences=True)))(res14)\n", 322 | "bi16 = (Bidirectional(LSTM(16, return_sequences=True)))(bi15)\n", 323 | "res15 = keras.layers.Add()([res14, bi16, visible1])\n", 324 | "\n", 325 | "#bi17 = (Bidirectional(LSTM(16, return_sequences=True)))(bi16)\n", 326 | "#bi18 = (Bidirectional(LSTM(16, return_sequences=True)))(bi17)\n", 327 | "#res16 = keras.layers.Add()([res15, bi18])\n", 328 | "\n", 329 | "#bi19 = (Bidirectional(LSTM(16, return_sequences=True)))(res16)\n", 330 | "#bi20 = (Bidirectional(LSTM(16, return_sequences=True)))(bi19)\n", 331 | "#res17 = keras.layers.Add()([res16, bi20, visible1])\n", 332 | "\n", 333 | "bi21 = (Bidirectional(LSTM(32)))(res15)\n", 334 | "\n", 335 | "dense11 = Dense(24, activation='selu')(bi21)\n", 336 | "out1 = Dense(1, activation='selu')(dense11)\n", 337 | "\n", 338 | "model = Model(inputs=[visible1], outputs=[out1]) # multi-input, multi-output\n", 339 | "\n", 340 | "#########################################\n", 341 | "\n", 342 | "print(model.summary())\n", 343 | "\n", 344 | "reducelr = ReduceLROnPlateau(monitor='val_loss', factor=0.1, patience=1) # 에포크 1동안 좋아지지 않으면 호출\n", 345 | "\n", 346 | "model.compile(loss='mean_squared_error', optimizer='adam', metrics=['mse', 'mae', 'mape'])\n", 347 | "\n", 348 | "batch_size = 40\n", 349 | "epochs = 20\n", 350 | "\n", 351 | "history = LossHistory()\n", 352 | "history.init()\n", 353 | "\n", 354 | "model.fit(trainX, trainY, epochs=epochs, batch_size=batch_size, shuffle=False, validation_data=(validX, validY), callbacks=[history, reducelr]) # , checkpoint\n", 355 | "\n", 356 | "trainPredict = model.predict(trainX, batch_size=batch_size)\n", 357 | "testPredict = model.predict(testX, batch_size=batch_size)\n", 358 | "\n", 359 | "trainPredict = trainPredict.reshape([-1])\n", 360 | "testPredict = testPredict.reshape([-1])\n", 361 | "testY = testY.reshape([-1])\n", 362 | "trainY = trainY.reshape([-1])\n", 363 | "\n", 364 | "np.savetxt('trainPredict_5.txt', trainPredict)\n", 365 | "np.savetxt('testPredict_5.txt', testPredict)\n", 366 | "np.savetxt('testY_5.txt', testY)\n", 367 | "np.savetxt('trainY_5.txt', trainY)\n", 368 | "\n", 369 | "print('--------------------------------------------------------')\n", 370 | "print(' history.mses(=loss) = ', history.mses) # loss == mse\n", 371 | "print(' history.maes = ', history.maes)\n", 372 | "print(' history.mapes = ', history.mapes)\n", 373 | "print(' history.val_mses(=loss)= ', history.val_mses) # loss == mse\n", 374 | "print(' history.val_maes = ', history.val_maes)\n", 375 | "print(' history.val_mapes = ', history.val_mapes)\n", 376 | "print('--------------------------------------------------------')\n", 377 | "\n", 378 | "plt.figure(1)\n", 379 | "plt.plot(testPredict, 'r')\n", 380 | "plt.plot(testY, 'b')\n", 381 | "plt.show()\n", 382 | "\n", 383 | "plt.figure(2)\n", 384 | "plt.plot(history.mses, 'b--')\n", 385 | "plt.plot(history.val_mses, 'b:')\n", 386 | "plt.plot(history.maes, 'ro')\n", 387 | "plt.plot(history.val_maes, 'r+')\n", 388 | "plt.ylabel('Loss and Accuracy')\n", 389 | "plt.xlabel('epoch')\n", 390 | "plt.show()\n", 391 | "\n", 392 | "print('Test Score > MSE == ', mean_squared_error(testY, testPredict), ' MAE == ', mean_absolute_error(testY, testPredict), 'MAPE == ', mean_absolute_percentage_error(testY, testPredict))" 393 | ] 394 | }, 395 | { 396 | "cell_type": "code", 397 | "execution_count": null, 398 | "metadata": {}, 399 | "outputs": [], 400 | "source": [] 401 | } 402 | ], 403 | "metadata": { 404 | "kernelspec": { 405 | "display_name": "Python 3", 406 | "language": "python", 407 | "name": "python3" 408 | }, 409 | "language_info": { 410 | "codemirror_mode": { 411 | "name": "ipython", 412 | "version": 3 413 | }, 414 | "file_extension": ".py", 415 | "mimetype": "text/x-python", 416 | "name": "python", 417 | "nbconvert_exporter": "python", 418 | "pygments_lexer": "ipython3", 419 | "version": "3.6.9" 420 | } 421 | }, 422 | "nbformat": 4, 423 | "nbformat_minor": 4 424 | } 425 | --------------------------------------------------------------------------------