├── doc └── results.png ├── checkpoints ├── .gitignore └── LSTM_FC_CKPT ├── LICENSE ├── utils.py ├── .gitignore ├── demo.py ├── README.md ├── run_model.py ├── layers.py ├── models.py ├── data └── demo.csv └── tutorials.ipynb /doc/results.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jfzhang95/LSTM-water-table-depth-prediction/HEAD/doc/results.png -------------------------------------------------------------------------------- /checkpoints/.gitignore: -------------------------------------------------------------------------------- 1 | # Ignore everything in this directory 2 | * 3 | !LSTM_FC_CKPT 4 | # Except this file 5 | !.gitignore 6 | -------------------------------------------------------------------------------- /checkpoints/LSTM_FC_CKPT: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jfzhang95/LSTM-water-table-depth-prediction/HEAD/checkpoints/LSTM_FC_CKPT -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 Jianfeng Zhang 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /utils.py: -------------------------------------------------------------------------------- 1 | #!usr/bin/env python 2 | #-*- coding:utf-8 -*- 3 | 4 | import numpy as np 5 | import theano 6 | import theano.tensor as T 7 | from theano.ifelse import ifelse 8 | from collections import OrderedDict 9 | 10 | 11 | def floatX(X): 12 | """ Change data to theano type """ 13 | return np.asarray(X, dtype=theano.config.floatX) 14 | 15 | 16 | def clip(X, epsilon): 17 | """ Clip gradients """ 18 | return T.maximum(T.minimum(X, epsilon), -1*epsilon) 19 | 20 | 21 | def scale(X, max_norm): 22 | """ Gradients norm scale""" 23 | curr_norm = T.sum(T.abs_(X)) 24 | return ifelse(T.lt(curr_norm, max_norm), X, max_norm * (X / curr_norm)) 25 | 26 | 27 | def get_params(layers): 28 | params = [] 29 | for layer in layers: 30 | for param in layer.get_params(): 31 | params.append(param) 32 | return params 33 | 34 | 35 | def sgd(loss, params, learning_rate, clip_at=5.0, scale_norm=5.0): 36 | """ Stochastic Gradient Descent""" 37 | updates = OrderedDict() 38 | grads = T.grad(cost=loss, wrt=params) 39 | epsilon = 1e-8 40 | 41 | for p, grad in zip(params, grads): 42 | # if clip_at > 0.0: 43 | # grad = clip(grad, clip_at) 44 | # 45 | # if scale_norm > 0.0: 46 | # grad = scale(grad, scale_norm) 47 | grad_norm = grad.norm(L=2) 48 | grad = (T.minimum(clip_at, grad_norm) / (grad_norm + epsilon)) * grad 49 | updates[p] = p - learning_rate * grad 50 | 51 | return updates, grads -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | *$py.class 5 | 6 | !doc/results.png 7 | checkpoints/* 8 | .ipynb_checkpoints 9 | 10 | # C extensions 11 | *.so 12 | 13 | # Distribution / packaging 14 | .Python 15 | env/ 16 | build/ 17 | develop-eggs/ 18 | dist/ 19 | downloads/ 20 | eggs/ 21 | .eggs/ 22 | lib/ 23 | lib64/ 24 | parts/ 25 | sdist/ 26 | var/ 27 | wheels/ 28 | *.egg-info/ 29 | .installed.cfg 30 | *.egg 31 | 32 | # PyInstaller 33 | # Usually these files are written by a python script from a template 34 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 35 | *.manifest 36 | *.spec 37 | 38 | # Installer logs 39 | pip-log.txt 40 | pip-delete-this-directory.txt 41 | 42 | # Unit test / coverage reports 43 | htmlcov/ 44 | .tox/ 45 | .coverage 46 | .coverage.* 47 | .cache 48 | nosetests.xml 49 | coverage.xml 50 | *.cover 51 | .hypothesis/ 52 | 53 | # Translations 54 | *.mo 55 | *.pot 56 | 57 | # Django stuff: 58 | *.log 59 | local_settings.py 60 | 61 | # Flask stuff: 62 | instance/ 63 | .webassets-cache 64 | 65 | # Scrapy stuff: 66 | .scrapy 67 | 68 | # Sphinx documentation 69 | docs/_build/ 70 | 71 | # PyBuilder 72 | target/ 73 | 74 | # Jupyter Notebook 75 | .ipynb_checkpoints 76 | 77 | # pyenv 78 | .python-version 79 | 80 | # celery beat schedule file 81 | celerybeat-schedule 82 | 83 | # SageMath parsed files 84 | *.sage.py 85 | 86 | # dotenv 87 | .env 88 | 89 | # virtualenv 90 | .venv 91 | venv/ 92 | ENV/ 93 | 94 | # Spyder project settings 95 | .spyderproject 96 | .spyproject 97 | 98 | # Rope project settings 99 | .ropeproject 100 | 101 | # mkdocs documentation 102 | /site 103 | 104 | # mypy 105 | .mypy_cache/ 106 | .idea 107 | -------------------------------------------------------------------------------- /demo.py: -------------------------------------------------------------------------------- 1 | import pandas as pd 2 | from sklearn.preprocessing import StandardScaler 3 | from models import * 4 | from sklearn.metrics import r2_score, mean_squared_error 5 | import matplotlib.pyplot as plt 6 | import numpy as np 7 | 8 | ss_X_dep = StandardScaler() 9 | ss_y_dep = StandardScaler() 10 | 11 | def rmse(y1, y2): 12 | return np.sqrt(mean_squared_error(y1, y2)) 13 | 14 | # Noted that the demo data are processed manually, so they are not real data, 15 | # but they still can reflect the correlation between the original data. 16 | data = pd.read_csv('data/demo.csv') 17 | 18 | Inputs = data.drop('Year', axis=1).drop('Depth', axis=1) 19 | Outputs = data['Depth'] 20 | 21 | Inputs = Inputs.as_matrix() 22 | Outputs = Outputs.as_matrix().reshape(-1, 1) 23 | 24 | # First 12 years of data 25 | X_train_dep = Inputs[0:144] 26 | y_train_dep = Outputs[0:144] 27 | 28 | # Last 2 years of data 29 | X_test_dep = Inputs[144:] 30 | 31 | print("X_train_dep shape", X_train_dep.shape) 32 | print("y_train_dep shape", y_train_dep.shape) 33 | print("X_test_dep shape", X_test_dep.shape) 34 | 35 | X = np.concatenate([X_train_dep, X_test_dep], axis=0) 36 | 37 | # Standardization 38 | X = ss_X_dep.fit_transform(X) 39 | 40 | # First 12 years of data 41 | X_train_dep_std = X[0:144] 42 | y_train_dep_std = ss_y_dep.fit_transform(y_train_dep) 43 | 44 | # All 14 years of data 45 | X_test_dep_std = X 46 | 47 | model_restore = LSTM_FC_Model(num_input=5, num_hidden=[40], num_output=1) 48 | # Loading model 49 | print('Start loading model......') 50 | model_restore.load_model_params('checkpoints/LSTM_FC_CKPT') 51 | print('Model restored.') 52 | print('Start predicting......') 53 | y_pred_dep_ = model_restore.predict(X_test_dep_std) 54 | y_pred_dep_ = ss_y_dep.inverse_transform(y_pred_dep_[144:]) 55 | print('Done.') 56 | 57 | print('the value of R-squared of Evaporation is ', r2_score(Outputs[144:], y_pred_dep_)) 58 | print('the value of Root mean squared error of Evaporation is ', rmse(Outputs[144:], y_pred_dep_)) 59 | 60 | f, ax1 = plt.subplots(1, 1, sharex=True, figsize=(6, 4)) 61 | 62 | ax1.plot(Outputs[144:], color="blue", linestyle="-", linewidth=1.5, label="Measurements") 63 | ax1.plot(y_pred_dep_, color="green", linestyle="--", linewidth=1.5, label="Proposed model") 64 | 65 | # ax1.set_title('Results', fontsize=16, fontweight='normal') 66 | 67 | 68 | plt.legend(loc='upper right') 69 | plt.xticks(fontsize=8,fontweight='normal') 70 | plt.yticks(fontsize=8,fontweight='normal') 71 | plt.xlabel('Time (Month)', fontsize=10) 72 | plt.ylabel('Water table depth (m)', fontsize=10) 73 | plt.xlim(0, 25) 74 | plt.savefig('results.png', format='png') 75 | plt.show() -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # LSTM based Model for Water Table Depth Prediction 2 | 3 | ### Introduction 4 | This is a Theano implementation of our work *Developing a Long Short-Term Memory (LSTM) based Model for Predicting Water Table Depth in Agricultural Areas*. [[Paper](https://www.sciencedirect.com/science/article/pii/S0022169418303184)] 5 | 6 | **NEW: PyTorch implementation also available: [Water-Table-Depth-Prediction-PyTorch](https://github.com/jfzhang95/Water-Table-Depth-Prediction-PyTorch)!** 7 | 8 | ### Requirements 9 | ``` 10 | Python3.x(Tested with 3.5) 11 | theano(Tested with 1.0.1) 12 | numpy 13 | pandas 14 | scikit-learn 15 | ``` 16 | ### Installation 17 | The code was tested with Python 3.5. To use this code, please do: 18 | 19 | 20 | 0. Clone the repo: 21 | ```Shell 22 | git clone https://github.com/jfzhang95/LSTM-water-table-depth-prediction.git 23 | cd LSTM-water-table-depth-prediction 24 | ``` 25 | 26 | 1. Install dependencies: 27 | ```Shell 28 | pip install theano matplotlib numpy pandas scikit-learn 29 | ``` 30 | 31 | 2. To try the demo code, please run: 32 | ```Shell 33 | python demo.py 34 | ``` 35 | 36 | If installed correctly, the result should look like this: 37 | ![results](doc/results.png) 38 | 39 | Noted that the demo data ([demo.csv](https://github.com/jfzhang95/LSTM-water-table-depth-prediction/blob/master/data/demo.csv)) are processed manually, so they are not real data, but they still can reflect the correlation between the original data. 40 | 41 | ### Tutorials 42 | A model training and testing pipeline can be defined as: 43 | 44 | ```python 45 | def LSTM_FC_prediction(X, Y, X_test=None, iters=20000, learning_rate=1e-4, dropout_prob=0.5): 46 | if dropout_prob > 1. or dropout_prob < 0.: 47 | raise Exception('Dropout level must be in interval [0, 1]') 48 | num_month = Y.shape[0] 49 | input_shathinkpe = X.shape[1] 50 | model = LSTM_FC_Model(num_input=input_shape, num_hidden=[40], num_output=1) 51 | print('Start training......') 52 | for iter in range(iters + 1): 53 | loss = model.fit(X, Y, learning_rate, dropout_prob) 54 | if iter % 1000 == 0: 55 | print("iteration: %s, loss: %s" % (iter, loss)) 56 | # Saving model 57 | model.save_model_params('checkpoints/LSTM_FC_CKPT') 58 | 59 | print('Start predicting......') 60 | Y_test = model.predict(X_test) 61 | print('Done.') 62 | return Y_test 63 | ``` 64 | For more details, please see in [tuitorials](https://github.com/jfzhang95/LSTM-water-table-depth-prediction/blob/master/tutorials.ipynb). 65 | 66 | ### Citation 67 | If you use this code, please consider citing the following paper: 68 | 69 | @article{zjf18, 70 | journal = {Journal of Hydrology}, 71 | title = {Developing a Long Short-Term Memory (LSTM) based Model for Predicting Water Table Depth in Agricultural Areas}, 72 | author = {Jianfeng Zhang, Yan Zhu, Xiaoping Zhang, Ming Ye and Jinzhong Yang}, 73 | year = {2018}, 74 | volume = {561}, 75 | pages = {918-929} 76 | } 77 | 78 | ### License 79 | [MIT](https://github.com/jfzhang95/LSTM-water-table-depth-prediction/blob/master/LICENSE) 80 | 81 | -------------------------------------------------------------------------------- /run_model.py: -------------------------------------------------------------------------------- 1 | #!usr/bin/env python 2 | #-*- coding:utf-8 -*- 3 | 4 | 5 | from models import LSTM_FC_Model, FFNN_Model, Double_LSTM_Model 6 | 7 | 8 | def LSTM_FC_prediction(X, Y, X_test=None, iters=20000, learning_rate=1e-4, dropout_prob=0.5): 9 | if dropout_prob > 1. or dropout_prob < 0.: 10 | raise Exception('Dropout level must be in interval [0, 1]') 11 | print("learning rate:", learning_rate) 12 | print("dropout:", dropout_prob) 13 | print("iterations:", iters) 14 | num_month = Y.shape[0] 15 | input_shape = X.shape[1] 16 | print('num_month:', num_month) 17 | print('variable size:', input_shape) 18 | model = LSTM_FC_Model(num_input=input_shape, num_hidden=[40], num_output=1) 19 | 20 | Loss = [] 21 | print('Start training......') 22 | for iter in range(iters + 1): 23 | loss = model.fit(X, Y, learning_rate, dropout_prob) 24 | Loss.append(loss) 25 | if iter % 1000 == 0: 26 | print("iteration: %s, loss: %s" % (iter, loss)) 27 | 28 | # Saving model 29 | model.save_model_params('checkpoints/LSTM_FC_CKPT') 30 | 31 | print('Start predicting......') 32 | Y_test = model.predict(X_test) 33 | print('Done.') 34 | return Y_test 35 | 36 | 37 | def FFNN_prediction(X, Y, X_test=None, iters=20000, learning_rate=1e-4, dropout_prob=0.5): 38 | if dropout_prob > 1. or dropout_prob < 0.: 39 | raise Exception('Dropout level must be in interval [0, 1]') 40 | print ("learning_rate:", learning_rate) 41 | print ("dropout:", dropout_prob) 42 | print ("iterations:", iters) 43 | num_month = Y.shape[0] 44 | input_shape = X.shape[1] 45 | print('num_month:', num_month) 46 | print('variable size:', input_shape) 47 | model = FFNN_Model(num_input=input_shape, num_hidden=[40], num_output=1) 48 | 49 | Loss = [] 50 | print('Start training......') 51 | for iter in range(iters + 1): 52 | loss = model.fit(X, Y, learning_rate, dropout_prob) 53 | Loss.append(loss) 54 | if iter % 1000 == 0: 55 | print("iteration: %s, loss: %s" % (iter, loss)) 56 | 57 | model.save_model_params('checkpoints/FFNN_CKPT') 58 | 59 | print('Start predicting......') 60 | Y_test = model.predict(X_test) 61 | print('Done.') 62 | return Y_test 63 | 64 | 65 | def DoubleLSTM_prediction(X, Y, X_test=None, iters=1000, learning_rate=1e-1, dropout_prob=0.5): 66 | if dropout_prob > 1. or dropout_prob < 0.: 67 | raise Exception('Dropout level must be in interval [0, 1]') 68 | print("learning_rate:", learning_rate) 69 | print("dropout:", dropout_prob) 70 | print("iterations:", iters) 71 | num_month = Y.shape[0] 72 | input_shape = X.shape[1] 73 | print('num_month:', num_month) 74 | print('variable size:', input_shape) 75 | model = Double_LSTM_Model(num_input=input_shape, num_hidden=[40], num_output=1) 76 | 77 | Loss = [] 78 | print('Start training......') 79 | for iter in range(iters + 1): 80 | loss = model.fit(X, Y, learning_rate, dropout_prob) 81 | Loss.append(loss) 82 | if iter % 1000 == 0: 83 | print("iteration: %s, loss: %s" % (iter, loss)) 84 | 85 | model.save_model_params('checkpoints/Double_LSTM_CKPT') 86 | 87 | print('Start predicting......') 88 | Y_test = model.predict(X_test) 89 | print('Done.') 90 | return Y_test 91 | 92 | -------------------------------------------------------------------------------- /layers.py: -------------------------------------------------------------------------------- 1 | #!usr/bin/env python 2 | #-*- coding:utf-8 -*- 3 | 4 | import numpy as np 5 | import theano 6 | import theano.tensor as T 7 | from theano.tensor.shared_randomstreams import RandomStreams 8 | from utils import floatX 9 | 10 | 11 | class NNLayer(object): 12 | 13 | def __init__(self): 14 | self.params = [] 15 | 16 | def get_params_names(self): 17 | return ['UNK' if p.name is None else p.name for p in self.params] 18 | 19 | def save_model(self): 20 | return 21 | 22 | def load_model(self): 23 | return 24 | 25 | def updates(self): 26 | return 27 | 28 | def reset_state(self): 29 | return 30 | 31 | 32 | class LSTMLayer(NNLayer): 33 | 34 | def __init__(self, num_input, num_hidden, input_layers=None, name="lstm"): 35 | """ 36 | LSTM layer 37 | 38 | Arguments: 39 | num_input: previous layer's size 40 | num_hidden: hidden neurons' size 41 | input_layers: previous layer 42 | """ 43 | self.name = name 44 | self.num_input = num_input 45 | self.num_hidden = num_hidden 46 | 47 | if len(input_layers) >= 2: 48 | self.X = T.concatenate([input_layer.output() for input_layer in input_layers], axis=1) 49 | else: 50 | self.X = input_layers[0].output() 51 | 52 | self.h0 = theano.shared(floatX(np.zeros(num_hidden))) 53 | self.s0 = theano.shared(floatX(np.zeros(num_hidden))) 54 | 55 | self.W_gx = self._random_weights((num_input, num_hidden), name=self.name+"W_gx") 56 | self.W_ix = self._random_weights((num_input, num_hidden), name=self.name+"W_ix") 57 | self.W_fx = self._random_weights((num_input, num_hidden), name=self.name+"W_fx") 58 | self.W_ox = self._random_weights((num_input, num_hidden), name=self.name+"W_ox") 59 | 60 | self.W_gh = self._random_weights((num_hidden, num_hidden), name=self.name+"W_gh") 61 | self.W_ih = self._random_weights((num_hidden, num_hidden), name=self.name+"W_ih") 62 | self.W_fh = self._random_weights((num_hidden, num_hidden), name=self.name+"W_fh") 63 | self.W_oh = self._random_weights((num_hidden, num_hidden), name=self.name+"W_oh") 64 | 65 | self.b_g = self._zeros(num_hidden, name=self.name+"b_g") 66 | self.b_i = self._zeros(num_hidden, name=self.name+"b_i") 67 | self.b_f = self._zeros(num_hidden, name=self.name+"b_f") 68 | self.b_o = self._zeros(num_hidden, name=self.name+"b_o") 69 | 70 | self.params = [self.W_gx, self.W_ix, self.W_ox, self.W_fx, 71 | self.W_gh, self.W_ih, self.W_oh, self.W_fh, 72 | self.b_g, self.b_i, self.b_f, self.b_o, 73 | ] 74 | 75 | self.output() 76 | 77 | def _random_weights(self, shape, name=None): 78 | # return theano.shared(floatX(np.random.randn(*shape) * 0.01), name=name) 79 | return theano.shared(floatX(np.random.uniform(size=shape, low=-1, high=1)), name=name) 80 | 81 | def _zeros(self, shape, name=""): 82 | return theano.shared(floatX(np.zeros(shape)), name=name) 83 | 84 | def get_params(self): 85 | return self.params 86 | 87 | def _one_step(self, x, h_tm1, s_tm1): 88 | """ 89 | Run the forward pass for a single time step of a LSTM layer 90 | 91 | Arguments: 92 | h_tm1: initial h 93 | s_tm1: initial s (cell state) 94 | 95 | Returns: 96 | h and s after one forward step 97 | """ 98 | g = T.tanh(T.dot(x, self.W_gx) + T.dot(h_tm1, self.W_gh) + self.b_g) 99 | i = T.nnet.sigmoid(T.dot(x, self.W_ix) + T.dot(h_tm1, self.W_ih) + self.b_i) 100 | f = T.nnet.sigmoid(T.dot(x, self.W_fx) + T.dot(h_tm1, self.W_fh) + self.b_f) 101 | o = T.nnet.sigmoid(T.dot(x, self.W_ox) + T.dot(h_tm1, self.W_oh) + self.b_o) 102 | 103 | s = i * g + s_tm1 * f 104 | h = T.tanh(s) * o 105 | return h, s 106 | 107 | 108 | def output(self, go_backwards=False): 109 | 110 | outputs_info = [self.h0, self.s0] 111 | 112 | ([outputs, _], updates) = theano.scan( 113 | fn=self._one_step, 114 | sequences=self.X, 115 | outputs_info = outputs_info, 116 | go_backwards=go_backwards 117 | ) 118 | return outputs 119 | 120 | 121 | def _reset_state(self): 122 | self.h0 = theano.shared(floatX(np.zeros(self.num_hidden))) 123 | self.s0 = theano.shared(floatX(np.zeros(self.num_hidden))) 124 | 125 | 126 | class FullyConnectedLayer(NNLayer): 127 | """ 128 | Fully-connected layer 129 | """ 130 | def __init__(self, num_input, num_output, input_layers, name=""): 131 | 132 | if len(input_layers) >= 2: 133 | self.X = T.concatenate([input_layer.output() for input_layer in input_layers], axis=1) 134 | else: 135 | self.X = input_layers[0].output() 136 | self.W_yh = self._random_weights((num_input, num_output),name="W_yh_FC") 137 | self.b_y = self._zeros(num_output, name="b_y_FC") 138 | self.params = [self.W_yh, self.b_y] 139 | 140 | def _random_weights(self, shape, name=None): 141 | # return theano.shared(floatX(np.random.randn(*shape) * 0.01), name=name) 142 | return theano.shared(floatX(np.random.uniform(size=shape, low=-1, high=1)), name=name) 143 | 144 | def _zeros(self, shape, name=""): 145 | return theano.shared(floatX(np.zeros(shape)), name=name) 146 | 147 | def output(self): 148 | return T.dot(self.X, self.W_yh) + self.b_y 149 | 150 | def get_params(self): 151 | return self.params 152 | 153 | 154 | class InputLayer(NNLayer): 155 | """ 156 | Input layer 157 | """ 158 | def __init__(self, X, name=""): 159 | self.name = name 160 | self.X = X 161 | self.params = [] 162 | 163 | def get_params(self): 164 | return self.params 165 | 166 | def output(self): 167 | return self.X 168 | 169 | 170 | class DropoutLayer(NNLayer): 171 | """ 172 | Dropout layer 173 | """ 174 | def __init__(self, input_layer, dropout_prob=0.5, name="dropout"): 175 | self.name = name 176 | self.X = input_layer.output() 177 | self.params = [] 178 | self.dropout_prob = dropout_prob 179 | 180 | def get_params(self): 181 | return self.params 182 | 183 | def output(self): 184 | return self._dropout(self.X, self.dropout_prob) 185 | 186 | def _dropout(self, X, dropout_prob=0.0): 187 | retain_prob = 1 - dropout_prob 188 | srng = RandomStreams(seed=1234) 189 | X *= srng.binomial(X.shape, p=retain_prob, dtype=theano.config.floatX) 190 | X /= retain_prob 191 | return X 192 | -------------------------------------------------------------------------------- /models.py: -------------------------------------------------------------------------------- 1 | #!usr/bin/env python 2 | #-*- coding:utf-8 -*- 3 | 4 | from layers import * 5 | from utils import * 6 | import gzip 7 | import pickle 8 | 9 | ######################################### 10 | # LSTM-FC Model architecture # 11 | ######################################### 12 | 13 | class LSTM_FC_Model: 14 | 15 | def __init__(self, num_input=5, num_hidden=[64, 64], num_output=1, clip_at=0.0, scale_norm=0.0): 16 | """ 17 | LSTM-FC Model, lstm layer contributes to learning time series data, dropout helps to prevent overfitting. 18 | 19 | Arguments: 20 | num_input: the number of input variables 21 | num_hidden: the number of neurons in each hidden layer 22 | num_output: output size (one in this study) 23 | clip_at: gradient clip 24 | scale_norm: gradient norm scale 25 | 26 | Returns: 27 | output (water table depth in this study) 28 | """ 29 | print('Build LSTM_FC Model......') 30 | 31 | X = T.fmatrix() 32 | Y = T.fmatrix() 33 | learning_rate = T.fscalar() 34 | dropout_prob = T.fscalar() 35 | 36 | self.num_input = num_input 37 | self.num_hidden = num_hidden 38 | self.num_output = num_output 39 | self.clip_at = clip_at 40 | self.scale_norm = scale_norm 41 | 42 | inputs = InputLayer(X, name='inputs') 43 | num_prev = num_input 44 | prev_layer = inputs 45 | 46 | self.layers = [inputs] 47 | 48 | for i, num_curr in enumerate(num_hidden): 49 | lstm = LSTMLayer(num_prev, num_curr, input_layers=[prev_layer], name="lstm{0}".format(i + 1)) 50 | 51 | num_prev = num_curr 52 | prev_layer = lstm 53 | self.layers.append(prev_layer) 54 | prev_layer = DropoutLayer(prev_layer, dropout_prob) 55 | self.layers.append(prev_layer) 56 | 57 | fc = FullyConnectedLayer(num_prev, num_output, input_layers=[prev_layer], name="yhat") 58 | self.layers.append(fc) 59 | Y_hat = fc.output() 60 | 61 | loss = T.sum((Y - Y_hat) ** 2) 62 | params = get_params(self.layers) 63 | 64 | updates, grads = sgd(loss, params, learning_rate) 65 | 66 | 67 | self.train_func = theano.function([X, Y, learning_rate, dropout_prob], loss, updates=updates, allow_input_downcast=True) 68 | 69 | self.predict_func = theano.function([X, dropout_prob], Y_hat, allow_input_downcast=True) 70 | 71 | 72 | def fit(self, X, Y, learning_rate, dropout_prob): 73 | return self.train_func(X, Y, learning_rate, dropout_prob) 74 | 75 | 76 | def predict(self, X): 77 | return self.predict_func(X, 0.0) 78 | 79 | 80 | def save_model_params(self, filename): 81 | to_save = {'num_input': self.num_input, 'num_hidden': self.num_hidden, 82 | 'num_output': self.num_output} 83 | 84 | for layer in self.layers: 85 | for p in layer.get_params(): 86 | assert (p.name not in to_save) 87 | to_save[p.name] = p.get_value() 88 | 89 | with gzip.open(filename, 'wb') as f: 90 | pickle.dump(to_save, f) 91 | 92 | 93 | def load_model_params(self, filename): 94 | f = gzip.open(filename, 'rb') 95 | to_load = pickle.load(f) 96 | assert (to_load['num_input'] == self.num_input) 97 | assert (to_load['num_output'] == self.num_output) 98 | 99 | for layer in self.layers: 100 | for p in layer.get_params(): 101 | p.set_value(floatX(to_load[p.name])) 102 | 103 | 104 | 105 | ########################################## 106 | # FFNN Model architecture # 107 | ########################################## 108 | 109 | class FFNN_Model: 110 | 111 | def __init__(self, num_input=256, num_hidden=[64,64], num_output=1, clip_at=0.0, scale_norm=0.0): 112 | """ 113 | FFNN Model, two hidden fully-connected layers. 114 | 115 | Arguments: 116 | num_input: the number of input variables 117 | num_hidden: the number of neurons in each hidden layer 118 | num_output: output size (one in this study) 119 | clip_at: gradient clip 120 | scale_norm: gradient norm scale 121 | 122 | Returns: 123 | output (water table depth in this study) 124 | """ 125 | print('Build FFNN Model......') 126 | 127 | X = T.fmatrix() 128 | Y = T.fmatrix() 129 | learning_rate = T.fscalar() 130 | dropout_prob = T.fscalar() 131 | 132 | self.num_input = num_input 133 | self.num_hidden = num_hidden 134 | self.num_output = num_output 135 | self.clip_at = clip_at 136 | self.scale_norm = scale_norm 137 | 138 | inputs = InputLayer(X, name='inputs') 139 | num_prev = num_input 140 | prev_layer = inputs 141 | 142 | self.layers = [inputs] 143 | fc = FullyConnectedLayer(num_prev, num_hidden, input_layers=[prev_layer], name="fc") 144 | num_prev = num_hidden 145 | prev_layer = fc 146 | self.layers.append(prev_layer) 147 | prev_layer = DropoutLayer(prev_layer, dropout_prob) 148 | self.layers.append(prev_layer) 149 | 150 | fc = FullyConnectedLayer(num_prev, num_output, input_layers=[prev_layer], name="yhat") 151 | self.layers.append(fc) 152 | Y_hat = fc.output() 153 | 154 | loss = T.sum((Y - Y_hat) ** 2) 155 | params = get_params(self.layers) 156 | 157 | updates, grads = sgd(loss, params, learning_rate) 158 | 159 | 160 | self.train_func = theano.function([X, Y, learning_rate, dropout_prob], loss, updates=updates, allow_input_downcast=True) 161 | 162 | self.predict_func = theano.function([X, dropout_prob], Y_hat, allow_input_downcast=True) 163 | 164 | 165 | def fit(self, X, Y, learning_rate, dropout_prob): 166 | return self.train_func(X, Y, learning_rate, dropout_prob) 167 | 168 | 169 | def predict(self, X): 170 | return self.predict_func(X, 0.0) # in predict time, dropout = 0 171 | 172 | 173 | def save_model_params(self, filename): 174 | to_save = {'num_input': self.num_input, 'num_hidden': self.num_hidden, 175 | 'num_output': self.num_output} 176 | 177 | for layer in self.layers: 178 | for p in layer.get_params(): 179 | assert (p.name not in to_save) 180 | to_save[p.name] = p.get_value() 181 | 182 | with gzip.open(filename, 'wb') as f: 183 | pickle.dump(to_save, f) 184 | 185 | 186 | def load_model_params(self, filename): 187 | f = gzip.open(filename, 'rb') 188 | to_load = pickle.load(f) 189 | assert (to_load['num_input'] == self.num_input) 190 | assert (to_load['num_output'] == self.num_output) 191 | 192 | for layer in self.layers: 193 | for p in layer.get_params(): 194 | p.set_value(floatX(to_load[p.name])) 195 | 196 | 197 | ######################################### 198 | # Double-LSTM Model architecture # 199 | ######################################### 200 | 201 | class Double_LSTM_Model: 202 | """ 203 | Double-LSTM Model, two hidden lstm layers. 204 | 205 | Arguments: 206 | num_input: the number of input variables 207 | num_hidden: the number of neurons in each hidden layer 208 | num_output: output size (one in this study) 209 | clip_at: gradient clip 210 | scale_norm: gradient norm scale 211 | 212 | Returns: 213 | output (water table depth in this study) 214 | """ 215 | def __init__(self, num_input=256, num_hidden=[64,64], num_output=1, clip_at=0.0, scale_norm=0.0): 216 | print('Build Double_LSTM Model......') 217 | 218 | X = T.fmatrix() 219 | Y = T.fmatrix() 220 | learning_rate = T.fscalar() 221 | dropout_prob = T.fscalar() 222 | 223 | self.num_input = num_input 224 | self.num_hidden = num_hidden 225 | self.num_output = num_output 226 | self.clip_at = clip_at 227 | self.scale_norm = scale_norm 228 | 229 | inputs = InputLayer(X, name='inputs') 230 | 231 | self.layers = [inputs] 232 | lstm = LSTMLayer(num_input, num_hidden, input_layers=[inputs], name="lstm{0}".format(1)) 233 | self.layers.append(lstm) 234 | lstm_dropout = DropoutLayer(lstm, dropout_prob) 235 | self.layers.append(lstm_dropout) 236 | 237 | lstm = LSTMLayer(num_hidden, num_output, input_layers=[lstm_dropout], name="lstm{0}".format(2)) 238 | self.layers.append(lstm) 239 | 240 | Y_hat = lstm.output() 241 | 242 | loss = T.sum((Y - Y_hat) ** 2) 243 | params = get_params(self.layers) 244 | 245 | updates, grads = sgd(loss, params, learning_rate, self.clip_at, self.scale_norm) 246 | 247 | self.train_func = theano.function([X, Y, learning_rate, dropout_prob], loss, updates=updates, 248 | allow_input_downcast=True) 249 | 250 | self.predict_func = theano.function([X, dropout_prob], Y_hat, allow_input_downcast=True) 251 | 252 | def fit(self, X, Y, learning_rate, dropout_prob): 253 | return self.train_func(X, Y, learning_rate, dropout_prob) 254 | 255 | 256 | def predict(self, X): 257 | return self.predict_func(X, 0.0) # in predict time, dropout = 0 258 | 259 | 260 | def save_model_params(self, filename): 261 | to_save = {'num_input': self.num_input, 'num_hidden': self.num_hidden, 262 | 'num_output': self.num_output} 263 | 264 | for layer in self.layers: 265 | for p in layer.get_params(): 266 | assert (p.name not in to_save) 267 | to_save[p.name] = p.get_value() 268 | 269 | with gzip.open(filename, 'wb') as f: 270 | pickle.dump(to_save, f) 271 | 272 | 273 | def load_model_params(self, filename): 274 | f = gzip.open(filename, 'rb') 275 | to_load = pickle.load(f) 276 | assert (to_load['num_input'] == self.num_input) 277 | assert (to_load['num_output'] == self.num_output) 278 | 279 | for layer in self.layers: 280 | for p in layer.get_params(): 281 | p.set_value(floatX(to_load[p.name])) -------------------------------------------------------------------------------- /data/demo.csv: -------------------------------------------------------------------------------- 1 | Year,Month,Irrigation,Rainfall,Tem,Evaporation,Depth 2 | 2000,1,1992.5083196719,314.1957169733,-19.295407758,12040.4476394335,8.972728964 3 | 2000,2,-2042.2517088609,-1633.7667748126,-38.4498364209,18045.5168256601,8.8372379517 4 | 2000,3,-1374.45069054,868.2637115245,-36.9623765139,90248.5986880446,10.7168385148 5 | 2000,4,29951.3265990933,309.8571424647,-13.1656454124,141672.950996956,8.904409599 6 | 2000,5,43748.3711548337,-291.3250047579,19.6021026569,188789.213347986,6.8581773986 7 | 2000,6,34502.6486603004,17799.0968336829,57.7370337131,149223.642080642,5.2845146329 8 | 2000,7,30296.9873863791,14179.7310546686,91.1360627559,173045.99634606,6.0969095283 9 | 2000,8,19459.0051582282,29671.9912945174,106.0619435675,125595.394087347,7.8860077628 10 | 2000,9,17758.6975818984,21215.1823079736,110.7978477205,93648.5653302581,7.9172426387 11 | 2000,10,62539.8414178833,4294.4213316051,86.9145269101,55423.3544036544,7.5450815888 12 | 2000,11,235.967332703,529.2638159455,59.7571213723,32169.4952479278,4.4325341631 13 | 2000,12,2605.7856577036,738.6209819721,14.319977756,20927.4646969387,7.3245968878 14 | 2001,1,-1446.3754864288,457.590908923,-11.6944352737,16903.9008100765,7.5467988992 15 | 2001,2,1994.960901874,78.495377589,-32.9582290949,43792.8401055522,8.8359511074 16 | 2001,3,-267.3643645519,-577.8149148489,-44.3692361598,83874.316059848,10.2077398958 17 | 2001,4,26117.1536851372,156.3112109546,-5.7425824914,131993.693718587,8.4048502044 18 | 2001,5,44438.8272441019,7482.3624327083,34.8285539136,187135.718846405,6.6102531838 19 | 2001,6,40444.5063014989,1747.6364483683,68.8225044018,184055.273477082,6.0819109676 20 | 2001,7,40209.0405479997,8124.129399824,78.5143052622,188270.500152369,7.3103318927 21 | 2001,8,23856.4602065489,26413.0362767538,100.759263918,158303.293193421,6.9534469533 22 | 2001,9,15448.5993112436,41288.3846495247,90.3775469511,90812.4456162747,7.2820627349 23 | 2001,10,64213.7344128649,36381.0620477837,77.8568838742,65292.5713181995,7.7141083027 24 | 2001,11,-1613.0641490158,382.1082475746,48.0512566729,41973.584633257,7.3394374677 25 | 2001,12,-600.5262692763,165.7094367505,19.7482066789,9449.1667292834,7.2133820599 26 | 2002,1,1014.7620170268,-214.1443198758,-15.5832115562,38770.3662096595,8.7714648667 27 | 2002,2,-756.8050526192,769.3649758967,-24.0603398165,38865.7208288432,9.0372763717 28 | 2002,3,-2182.7253705371,3454.3186301167,-2.0376116995,80372.9199556001,9.3197329858 29 | 2002,4,25396.1458187972,11157.5283660833,14.6646376991,136223.773754898,6.0079325001 30 | 2002,5,37102.9616992109,24694.2961065592,13.4495850367,131044.917270516,4.2630808858 31 | 2002,6,40234.9691689304,53415.0948522383,38.3047052931,142136.464950778,4.6419067361 32 | 2002,7,42739.5324691317,16110.2434594719,95.6419438562,140852.810807609,5.0832563496 33 | 2002,8,24747.4193208903,3222.8981484282,102.8578298589,144341.865884577,6.0206484119 34 | 2002,9,14298.2763540136,6217.5868866187,98.773476424,93394.0088531071,8.4178573982 35 | 2002,10,61894.0851518047,-190.0557246785,91.4465661896,70301.2762720597,6.7635269011 36 | 2002,11,-865.5967647891,-1050.5053853096,67.8969387849,29663.145500379,5.868084999 37 | 2002,12,3380.2264775865,2024.1566560343,26.4162820183,10924.8154850659,6.5219879718 38 | 2003,1,-386.4503653792,896.1226862132,-12.3658294534,24884.9389507601,9.100252177 39 | 2003,2,1557.7950405133,241.0719972437,-29.0865412199,30745.2287503802,9.1648896612 40 | 2003,3,650.3164758386,2658.4287558479,-28.8135959502,55239.448750046,9.718686127 41 | 2003,4,13394.0070559086,7004.2807028833,0.5013660454,137237.861044995,7.203485342 42 | 2003,5,33911.9167946654,10094.1076700016,43.8572289702,169825.01753652,6.3415744691 43 | 2003,6,21533.3530476802,1801.0880057285,72.3854747144,157660.469586514,6.1825390601 44 | 2003,7,37725.0376329477,41187.2889160595,84.1265373016,143046.516829244,7.5462799977 45 | 2003,8,13699.7352306785,10833.4909793159,89.5893857661,141965.598874551,8.2421210066 46 | 2003,9,9978.0099721629,71274.7476319909,93.952103771,107087.085814857,9.91492158 47 | 2003,10,57565.7322977106,2245.7232658376,84.7504765573,73721.7175061161,6.8986012184 48 | 2003,11,2104.3251052962,-688.0205005814,47.4993730858,42009.9453231635,6.1908231216 49 | 2003,12,-3800.045422625,-675.1317978651,3.8680187888,22007.6853877412,6.7358412773 50 | 2004,1,2086.2142577479,1014.0117373894,-18.9368128305,40137.6946586243,9.0026294949 51 | 2004,2,2602.0320557557,64.2927011031,-28.6506700652,45511.5986683673,8.9124447037 52 | 2004,3,2607.4575419277,2920.8152751269,4.3002725762,86881.0671414217,8.3773358986 53 | 2004,4,30247.7097798502,11588.2504945039,5.1650030987,126272.358305815,7.5391370342 54 | 2004,5,36500.2164145915,24567.0820912928,17.523411113,137497.901388769,5.5749822377 55 | 2004,6,40216.9582150654,53622.3914122528,31.8578154274,159777.477389197,4.7412483249 56 | 2004,7,44234.0442499885,16017.7407660594,87.9881978603,142250.302255822,5.7880415424 57 | 2004,8,26429.4837362526,3032.1676788145,109.5552108576,150812.144558594,5.6830398478 58 | 2004,9,17653.4709589239,7921.8204937788,95.1165548783,88714.1885122467,8.4739868368 59 | 2004,10,61542.4921065865,-1956.0525356638,83.2737058279,69006.5725073486,7.4165250571 60 | 2004,11,36.6134202471,375.9965101976,70.5831069354,50624.7207739744,4.8386637862 61 | 2004,12,566.8345209991,2295.0177818814,24.7191836218,25473.7540558068,7.2194637112 62 | 2005,1,-3822.7516415472,-269.118333342,-11.1668030912,34991.0142469635,10.0489238052 63 | 2005,2,-478.5741823872,-740.4862052638,-41.8258276737,36191.346610205,9.1174074249 64 | 2005,3,2799.0550332015,476.4050785832,-44.2945982171,94786.7810525021,9.4844878526 65 | 2005,4,29287.1921667186,1585.6983177999,-6.1786769353,144571.282654031,8.9805315125 66 | 2005,5,43635.8172255169,5385.6761171638,27.4260701646,179526.719378807,4.9065506861 67 | 2005,6,38767.9532063676,3074.1477008705,67.4911123598,200064.14810238,5.7893406162 68 | 2005,7,36898.2934518845,7315.0385396565,75.3836548388,183654.375943701,7.2543564682 69 | 2005,8,27775.4765135801,27297.3044460976,89.5734226638,151187.565655289,8.9121817993 70 | 2005,9,14098.3139874008,40482.8112304931,96.8313331372,85210.057303944,7.3927618458 71 | 2005,10,58558.6405662779,36067.9426784126,77.5209698405,55957.1688862193,7.396345879 72 | 2005,11,-1526.4067351494,-500.7574263379,47.9846285858,27459.3562322097,4.8347087281 73 | 2005,12,-2384.5975872833,-955.6499553698,16.434862517,5253.6811570786,7.265792525 74 | 2006,1,1567.0140135536,1151.0120327973,-20.7764078078,15208.9585318538,9.213940087 75 | 2006,2,2913.6113992749,2237.2749740479,-34.8211671529,41474.5565895835,9.4822795584 76 | 2006,3,1364.2481336267,-539.7593045133,-4.7837468176,70721.6145288348,10.4681292384 77 | 2006,4,19901.1900571259,401.7360131679,-7.4301816306,134583.034034957,8.7084561594 78 | 2006,5,47418.4063191555,17712.058979923,16.8583771074,178743.129218957,5.8765688575 79 | 2006,6,35118.3770144947,581.5465176179,71.890703121,166218.51424835,5.4374069985 80 | 2006,7,38639.1467694101,21044.8809130651,96.1165280213,147054.737379063,6.2034790388 81 | 2006,8,20824.3935742376,17345.5866955182,106.6081167304,118437.967687395,6.5392017222 82 | 2006,9,16592.3708190747,9395.8290645353,103.4509679917,100884.217353987,9.1829937693 83 | 2006,10,59893.6372421636,1075.9417619642,85.0284281428,88809.9542884777,8.1613393083 84 | 2006,11,450.6792621476,3993.0308642043,64.6761010142,54368.3063440379,4.5093902331 85 | 2006,12,1636.6951413217,-269.1058091842,21.7779008449,9427.0795085631,6.3615198295 86 | 2007,1,-1949.3823617708,-613.7695950016,-9.9274563559,11037.3165455179,9.7072859282 87 | 2007,2,-1102.7275340532,6915.6950115401,-41.5785918665,38921.433102614,9.3888818492 88 | 2007,3,-1328.6199157601,15140.5571259182,-26.1639986773,58800.46085095,8.7392711075 89 | 2007,4,22066.1764420817,4611.0302377563,-6.8326942472,131650.151883966,7.8428531611 90 | 2007,5,48294.8972788041,557.6491793652,14.0424328046,192546.753305473,7.6120575187 91 | 2007,6,38201.0941112011,61360.2621782378,54.4707773583,159112.097351731,6.5865266032 92 | 2007,7,43577.9169831785,23377.9328093385,79.0143582462,135487.718649246,5.4125839723 93 | 2007,8,22387.8184977697,17639.4606527731,95.2976035666,138453.329881849,8.0884594137 94 | 2007,9,16455.9120262078,8327.9144964874,103.6746016514,100811.637258969,7.2745707204 95 | 2007,10,69045.5356580916,12600.584343208,93.5948080771,71999.6992130972,6.7300876177 96 | 2007,11,1764.920909494,1407.5788180452,60.1161104802,39895.8722576806,3.9499619889 97 | 2007,12,-1328.6644638271,-210.5224779435,3.1001191414,30203.3060668208,6.2708627671 98 | 2008,1,-1350.0320982345,3249.250766653,-9.5890238558,21.3084869433,7.3096706004 99 | 2008,2,-1786.7360085808,273.5099143006,-32.9446339333,17702.7933414733,8.2673016384 100 | 2008,3,620.9043586546,-270.7739529231,-39.6899915103,73607.5905421309,9.5670900484 101 | 2008,4,20856.1771359163,3146.4328390487,-11.1111667718,115815.870531152,8.5797313863 102 | 2008,5,48507.6564602097,4603.5040817133,38.2975783097,184503.383801004,5.4766284548 103 | 2008,6,32320.2718047226,31213.3180879014,66.7717880508,151502.754940086,5.273589638 104 | 2008,7,37320.3390553108,50614.6737924457,85.0058001322,144649.351474712,6.95911323 105 | 2008,8,18199.504489151,48386.5761062642,90.8480076578,129316.651920114,6.708450655 106 | 2008,9,20391.6375385559,10580.62437324,92.1797829335,108635.638152625,7.3945263069 107 | 2008,10,58444.2146693381,2099.3563299519,78.6830414204,94122.764504983,6.8888233428 108 | 2008,11,3185.2189538728,1121.2413835035,78.3066422298,60397.5914525808,5.6778711418 109 | 2008,12,1817.7912010928,-305.9038928113,34.4921687043,33321.8397371101,6.8578472569 110 | 2009,1,-1239.4607399782,447.1989880709,-4.2538746605,12771.0282184424,7.9649197838 111 | 2009,2,1384.5773495339,2285.6514062288,-35.3629320795,35150.6137938001,8.5362422017 112 | 2009,3,-3694.4681882967,3538.3493277784,-23.9588452957,52207.7113327517,8.3072500889 113 | 2009,4,20362.1631904287,3023.1583772773,1.6637355677,117521.497351571,7.0187079798 114 | 2009,5,50593.6620445755,10397.6296840017,44.4562936861,178431.410097219,4.5029332386 115 | 2009,6,39496.6966297038,1103.6091603384,68.4440664534,199772.892337299,6.2849465083 116 | 2009,7,43063.2203963758,16971.7448318511,89.502913534,188137.937088275,6.9081535976 117 | 2009,8,22179.077838634,28799.5500957659,108.6809709063,156495.206904778,6.5459771819 118 | 2009,9,20277.105811496,29843.8851236642,89.2721959082,100934.093582542,7.8622919891 119 | 2009,10,67470.522894461,554.6146432594,84.5529362875,117297.542083953,7.6988466176 120 | 2009,11,5358.255415246,5440.5919569377,69.1393389741,23380.7116971716,5.1541271415 121 | 2009,12,-210.6269713507,-360.3685495956,-4.8166265881,24665.9656176214,6.5616755275 122 | 2010,1,-3342.697254843,1284.8149484832,-37.4415721765,30241.1465269572,8.2024262882 123 | 2010,2,-452.764277594,744.177282546,-57.7914762143,49211.2689722823,9.4745240103 124 | 2010,3,909.9920247126,3338.1093007488,-43.4529371602,66084.8092526247,8.7060000246 125 | 2010,4,17889.3688406509,1543.3575281812,-33.6275363251,83724.4603660708,8.0760718308 126 | 2010,5,45018.9569561923,34561.0464100109,21.8435753334,163531.079424784,4.6677119702 127 | 2010,6,29744.5416891046,9370.3123240047,49.9679099832,196893.20739719,4.7737786968 128 | 2010,7,37866.7682664827,6363.628313858,70.7218208922,190326.285888571,7.0881596334 129 | 2010,8,14851.0026421879,2103.2241861837,97.4570630129,150863.734618918,8.3356989488 130 | 2010,9,14391.0277938624,40134.8679810422,102.4820452202,89967.6839468569,8.8852705717 131 | 2010,10,62627.9895315413,1867.1358941553,83.3924029748,60433.5690272789,8.7453597732 132 | 2010,11,1415.8603595977,339.5991879025,54.6712121297,47464.8595064449,5.319094786 133 | 2010,12,-696.4824898257,-1566.5294139293,9.8216238936,36627.2931313552,6.308273918 134 | 2011,1,-983.416942065,2492.0253975684,-17.7596422889,14397.6728898769,7.6475898738 135 | 2011,2,-2008.67431919,526.2270719924,-24.4021423157,15744.9403465722,9.1615206376 136 | 2011,3,-2315.468761431,-705.1343620344,-52.9468240718,52551.880586609,10.0513610431 137 | 2011,4,16535.2059893341,387.8472438606,-15.3226199683,137014.759041677,7.8917952873 138 | 2011,5,46778.498956385,2735.0318816074,18.1755182623,189061.38480658,7.202117884 139 | 2011,6,33916.0645445093,9109.9666718717,68.5778968532,191397.405111407,7.3181654511 140 | 2011,7,40324.6320967434,12553.1054928233,94.705649525,195249.234866651,6.473298021 141 | 2011,8,15886.3752995587,12229.2728686363,108.2367538651,169191.907487504,7.3519418885 142 | 2011,9,17289.7121073133,3350.8047659506,92.9929231079,121092.696797974,7.7416124147 143 | 2011,10,64553.8805496607,5184.2156795966,73.9472321028,74807.3549096308,8.2582967962 144 | 2011,11,3099.6128648317,-693.7528249307,56.336108519,47013.9946411057,3.9749151445 145 | 2011,12,-1482.5665107684,-1490.6920639721,27.298843012,18434.8071640145,6.2398553094 146 | 2012,1,2648.9282565448,977.2033118444,-14.9177599049,10557.8926792309,9.1600318335 147 | 2012,2,-1395.3402643954,-14.47669025,-48.1206666417,32169.1793952093,8.1842023323 148 | 2012,3,744.8559974669,86.2927021337,-36.4061958197,73041.489636775,9.7357233547 149 | 2012,4,20946.7633883001,-512.8763798724,-1.7524697111,152460.562126691,8.0061040867 150 | 2012,5,44585.2222314331,15626.91276034,41.2707165624,173275.839222574,5.589704837 151 | 2012,6,33854.5303935094,30466.5672038557,60.4637337002,178672.678043996,4.6394531333 152 | 2012,7,40119.822845255,74516.3708826216,77.479703859,164117.527661127,5.7473437607 153 | 2012,8,23447.5727963349,29570.8960473694,90.6072636124,145542.540005518,6.4308159126 154 | 2012,9,15075.6051431687,14204.7957822182,88.7135554338,88696.293001768,8.7294292494 155 | 2012,10,62843.3572745977,-404.3974302493,80.6597494508,98133.7890383517,7.9329949439 156 | 2012,11,1214.3119584021,-446.4124345215,39.9731689583,40253.0140927485,5.793181429 157 | 2012,12,891.0915264901,-374.2199526424,3.2885555308,15117.6546529998,5.420527625 158 | 2013,1,-2342.067247293,-407.3789982866,-6.6294774919,14439.2247424584,8.2856885456 159 | 2013,2,-1218.9978343601,-889.7145877889,-44.1710267156,26722.278465606,9.032417103 160 | 2013,3,-1183.3063329005,479.3456347608,-29.0699469078,79055.2834668528,9.1947298699 161 | 2013,4,27964.0020483829,1246.1037720473,-0.9600276419,118632.937151314,8.9618038092 162 | 2013,5,48357.5892469551,3891.6885537972,56.2357845017,205855.274427051,5.1941795566 163 | 2013,6,37359.7170253037,22072.5297461547,69.3827486111,152549.568057488,6.7913924531 164 | 2013,7,41337.5757739085,32804.2742369428,72.5544526249,161613.873657892,6.8242571638 165 | 2013,8,19170.8498326554,1711.2395646448,92.1502631409,133324.710105294,5.3346744476 166 | 2013,9,17390.1471218854,14636.8455336336,96.1909503257,99089.0072254957,8.9661012989 167 | 2013,10,68788.714885654,-251.937762411,87.4205022764,81966.0912259647,8.8800850284 168 | 2013,11,-1052.8417731971,-243.5652595827,58.5260443976,31874.8378428709,4.6790693867 169 | 2013,12,510.8054866447,1294.5554983925,18.4621176651,11562.8268159789,5.9895643152 170 | -------------------------------------------------------------------------------- /tutorials.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": {}, 7 | "outputs": [], 8 | "source": [ 9 | "import pandas as pd\n", 10 | "from sklearn.preprocessing import StandardScaler\n", 11 | "from models import *\n", 12 | "from sklearn.metrics import r2_score, mean_squared_error\n", 13 | "import matplotlib.pyplot as plt\n", 14 | "import numpy as np\n", 15 | "\n", 16 | "ss_X_dep = StandardScaler()\n", 17 | "ss_y_dep = StandardScaler()\n", 18 | "\n", 19 | "def rmse(y1, y2):\n", 20 | " return np.sqrt(mean_squared_error(y1, y2))" 21 | ] 22 | }, 23 | { 24 | "cell_type": "code", 25 | "execution_count": 2, 26 | "metadata": {}, 27 | "outputs": [], 28 | "source": [ 29 | "def LSTM_FC_prediction(X, Y, X_test=None, iters=20000, learning_rate=1e-4, dropout_prob=0.5):\n", 30 | " if dropout_prob > 1. or dropout_prob < 0.:\n", 31 | " raise Exception('Dropout level must be in interval [0, 1]')\n", 32 | " print(\"learning rate:\", learning_rate)\n", 33 | " print(\"dropout:\", dropout_prob)\n", 34 | " print(\"iterations:\", iters)\n", 35 | " num_month = Y.shape[0]\n", 36 | " input_shape = X.shape[1]\n", 37 | " print('num_month:', num_month)\n", 38 | " print('variable size:', input_shape)\n", 39 | " model = LSTM_FC_Model(num_input=input_shape, num_hidden=[40], num_output=1)\n", 40 | "\n", 41 | " Loss = []\n", 42 | " print('Start training......')\n", 43 | " for iter in range(iters + 1):\n", 44 | " loss = model.fit(X, Y, learning_rate, dropout_prob)\n", 45 | " Loss.append(loss)\n", 46 | " if iter % 1000 == 0:\n", 47 | " print(\"iteration: %s, loss: %s\" % (iter, loss))\n", 48 | "\n", 49 | " # Saving model\n", 50 | " model.save_model_params('checkpoints/LSTM_FC_CKPT')\n", 51 | "\n", 52 | " print('Start predicting......')\n", 53 | " Y_test = model.predict(X_test)\n", 54 | " print('Done.')\n", 55 | " return Y_test" 56 | ] 57 | }, 58 | { 59 | "cell_type": "markdown", 60 | "metadata": {}, 61 | "source": [ 62 | "# Train and validate LSTM_FC Model in dataset." 63 | ] 64 | }, 65 | { 66 | "cell_type": "code", 67 | "execution_count": 3, 68 | "metadata": {}, 69 | "outputs": [ 70 | { 71 | "name": "stdout", 72 | "output_type": "stream", 73 | "text": [ 74 | "X_train_dep shape (144, 5)\n", 75 | "y_train_dep shape (144, 1)\n", 76 | "X_test_dep shape (24, 5)\n", 77 | "X_train_dep_std shape (144, 5)\n", 78 | "y_train_dep_std shape (144, 1)\n", 79 | "X_test_dep_std shape (168, 5)\n", 80 | "learning rate: 0.0001\n", 81 | "dropout: 0.5\n", 82 | "iterations: 14000\n", 83 | "num_month: 144\n", 84 | "variable size: 5\n", 85 | "Build LSTM_FC Model......\n" 86 | ] 87 | }, 88 | { 89 | "name": "stderr", 90 | "output_type": "stream", 91 | "text": [ 92 | "WARNING (theano.tensor.blas): We did not find a dynamic library in the library_dir of the library we use for blas. If you use ATLAS, make sure to compile it with dynamics library.\n", 93 | "WARNING (theano.tensor.blas): We did not find a dynamic library in the library_dir of the library we use for blas. If you use ATLAS, make sure to compile it with dynamics library.\n" 94 | ] 95 | }, 96 | { 97 | "name": "stdout", 98 | "output_type": "stream", 99 | "text": [ 100 | "Start training......\n", 101 | "iteration: 0, loss: 371.0372087489539\n", 102 | "iteration: 1000, loss: 134.1267558632824\n", 103 | "iteration: 2000, loss: 90.1222537629338\n", 104 | "iteration: 3000, loss: 77.63701763793665\n", 105 | "iteration: 4000, loss: 66.41027382549018\n", 106 | "iteration: 5000, loss: 51.01219022901203\n", 107 | "iteration: 6000, loss: 47.164085877529835\n", 108 | "iteration: 7000, loss: 51.9101562927477\n", 109 | "iteration: 8000, loss: 41.27283749506584\n", 110 | "iteration: 9000, loss: 43.21454358961822\n", 111 | "iteration: 10000, loss: 43.26276443680515\n", 112 | "iteration: 11000, loss: 38.1480625866977\n", 113 | "iteration: 12000, loss: 34.393987462582146\n", 114 | "iteration: 13000, loss: 31.22542563962359\n", 115 | "iteration: 14000, loss: 28.820937470184624\n", 116 | "Start predicting......\n", 117 | "Done!\n" 118 | ] 119 | } 120 | ], 121 | "source": [ 122 | "# Load data\n", 123 | "data = pd.read_csv('data/demo.csv')\n", 124 | "Inputs = data.drop('Year', axis=1).drop('Depth', axis=1)\n", 125 | "Outputs = data['Depth']\n", 126 | "\n", 127 | "Inputs = Inputs.as_matrix()\n", 128 | "Outputs = Outputs.as_matrix().reshape(-1, 1)\n", 129 | "\n", 130 | "# First 12 years of data\n", 131 | "X_train_dep = Inputs[0:144]\n", 132 | "y_train_dep = Outputs[0:144]\n", 133 | "\n", 134 | "# Last two years of data\n", 135 | "X_test_dep = Inputs[144:]\n", 136 | "\n", 137 | "print(\"X_train_dep shape\", X_train_dep.shape)\n", 138 | "print(\"y_train_dep shape\", y_train_dep.shape)\n", 139 | "print(\"X_test_dep shape\", X_test_dep.shape)\n", 140 | "\n", 141 | "X = np.concatenate([X_train_dep, X_test_dep], axis=0)\n", 142 | "\n", 143 | "# Standardization\n", 144 | "X = ss_X_dep.fit_transform(X)\n", 145 | "\n", 146 | "# First 12 years of data\n", 147 | "X_train_dep_std = X[0:144]\n", 148 | "y_train_dep_std = ss_y_dep.fit_transform(y_train_dep)\n", 149 | "\n", 150 | "# All 14 years of data\n", 151 | "X_test_dep_std = X\n", 152 | "\n", 153 | "print(\"X_train_dep_std shape\", X_train_dep_std.shape)\n", 154 | "print(\"y_train_dep_std shape\", y_train_dep_std.shape)\n", 155 | "print(\"X_test_dep_std shape\", X_test_dep_std.shape)\n", 156 | "\n", 157 | "y_pred_dep = LSTM_FC_prediction(X_train_dep_std, y_train_dep_std, X_test_dep_std, iters=14000, learning_rate=1e-4)\n", 158 | "y_pred_dep = ss_y_dep.inverse_transform(y_pred_dep[144:])" 159 | ] 160 | }, 161 | { 162 | "cell_type": "code", 163 | "execution_count": 4, 164 | "metadata": {}, 165 | "outputs": [ 166 | { 167 | "name": "stdout", 168 | "output_type": "stream", 169 | "text": [ 170 | "The value of R-squared of water table depth is 0.6699877233397822\n", 171 | "The value of Root mean squared error of water table depth is 0.9449295363104716\n" 172 | ] 173 | }, 174 | { 175 | "data": { 176 | "image/png": "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\n", 177 | "text/plain": [ 178 | "" 179 | ] 180 | }, 181 | "metadata": {}, 182 | "output_type": "display_data" 183 | } 184 | ], 185 | "source": [ 186 | "print('The value of R-squared of water table depth is ', r2_score(Outputs[144:], y_pred_dep))\n", 187 | "print('The value of Root mean squared error of water table depth is ', rmse(Outputs[144:], y_pred_dep))\n", 188 | "\n", 189 | "f, ax1 = plt.subplots(1, 1, sharex=True, figsize=(8, 6))\n", 190 | "\n", 191 | "ax1.plot(Outputs[144:], color=\"mediumblue\", linestyle=\"-\", marker=\"o\", linewidth=1.5, label=\"Measurements\")\n", 192 | "ax1.plot(y_pred_dep, color=\"r\", linestyle=\"-\", marker=\"s\", linewidth=1.5, label=\"Proposed model\")\n", 193 | "\n", 194 | "ax1.set_title('Results', fontsize=16, fontweight='normal')\n", 195 | "# ax1.spines['top'].set_visible(False)\n", 196 | "# ax1.spines['right'].set_visible(False)\n", 197 | "plt.legend(loc='upper right')\n", 198 | "plt.xticks(fontsize=14,fontweight='normal')\n", 199 | "plt.yticks(fontsize=14,fontweight='normal')\n", 200 | "plt.xlabel('Time (Month)', fontsize=14)\n", 201 | "plt.ylabel('Water table depth (m)', fontsize=14)\n", 202 | "plt.xlim(0, 25)\n", 203 | "\n", 204 | "plt.show()" 205 | ] 206 | }, 207 | { 208 | "cell_type": "markdown", 209 | "metadata": {}, 210 | "source": [ 211 | "# Load Model parameters from checkpoints." 212 | ] 213 | }, 214 | { 215 | "cell_type": "code", 216 | "execution_count": 5, 217 | "metadata": {}, 218 | "outputs": [ 219 | { 220 | "name": "stdout", 221 | "output_type": "stream", 222 | "text": [ 223 | "Build LSTM_FC Model......\n", 224 | "Start loading model......\n", 225 | "Model restored.\n", 226 | "Start predicting......\n", 227 | "Done.\n" 228 | ] 229 | } 230 | ], 231 | "source": [ 232 | "model_restore = LSTM_FC_Model(num_input=5, num_hidden=[40], num_output=1)\n", 233 | "# Loading model\n", 234 | "print('Start loading model......')\n", 235 | "model_restore.load_model_params('checkpoints/LSTM_FC_CKPT')\n", 236 | "print('Model restored.')\n", 237 | "print('Start predicting......')\n", 238 | "y_pred_dep_ = model_restore.predict(X_test_dep_std)\n", 239 | "y_pred_dep_ = ss_y_dep.inverse_transform(y_pred_dep_[144:])\n", 240 | "print('Done.')" 241 | ] 242 | }, 243 | { 244 | "cell_type": "code", 245 | "execution_count": 6, 246 | "metadata": {}, 247 | "outputs": [ 248 | { 249 | "name": "stdout", 250 | "output_type": "stream", 251 | "text": [ 252 | "the value of R-squared of Evaporation is 0.6699877233397822\n", 253 | "the value of Root mean squared error of Evaporation is 0.9449295363104716\n" 254 | ] 255 | }, 256 | { 257 | "data": { 258 | "image/png": "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\n", 259 | "text/plain": [ 260 | "" 261 | ] 262 | }, 263 | "metadata": {}, 264 | "output_type": "display_data" 265 | } 266 | ], 267 | "source": [ 268 | "print('the value of R-squared of Evaporation is ', r2_score(Outputs[144:], y_pred_dep_))\n", 269 | "print('the value of Root mean squared error of Evaporation is ', rmse(Outputs[144:], y_pred_dep_))\n", 270 | "\n", 271 | "\n", 272 | "f, ax1 = plt.subplots(1, 1, sharex=True, figsize=(8, 6))\n", 273 | "\n", 274 | "ax1.plot(Outputs[144:], color=\"mediumblue\", linestyle=\"-\", marker=\"o\", linewidth=1.5, label=\"Measurements\")\n", 275 | "ax1.plot(y_pred_dep_, color=\"r\", linestyle=\"-\", marker=\"s\", linewidth=1.5, label=\"Proposed model\")\n", 276 | "\n", 277 | "ax1.set_title('Results', fontsize=16, fontweight='normal')\n", 278 | "# ax1.spines['top'].set_visible(False)\n", 279 | "# ax1.spines['right'].set_visible(False)\n", 280 | "plt.legend(loc='upper right')\n", 281 | "plt.xticks(fontsize=14,fontweight='normal')\n", 282 | "plt.yticks(fontsize=14,fontweight='normal')\n", 283 | "plt.xlabel('Time (Month)', fontsize=14)\n", 284 | "plt.ylabel('Water table depth (m)', fontsize=14)\n", 285 | "plt.xlim(0, 25)\n", 286 | "\n", 287 | "plt.show()" 288 | ] 289 | } 290 | ], 291 | "metadata": { 292 | "kernelspec": { 293 | "display_name": "Python 3", 294 | "language": "python", 295 | "name": "python3" 296 | }, 297 | "language_info": { 298 | "codemirror_mode": { 299 | "name": "ipython", 300 | "version": 3 301 | }, 302 | "file_extension": ".py", 303 | "mimetype": "text/x-python", 304 | "name": "python", 305 | "nbconvert_exporter": "python", 306 | "pygments_lexer": "ipython3", 307 | "version": "3.5.2" 308 | } 309 | }, 310 | "nbformat": 4, 311 | "nbformat_minor": 2 312 | } 313 | --------------------------------------------------------------------------------