LSTM预测电力消耗:
如果有不清楚LSTM的,可以看下我的这张珍藏了多年的老图,简单明了!
今天看到了深度学习课程期末大作业要求,要提交一个RNN预测电力消耗的程序,作为一个攻克生,下意识地百度了一下,发现要不就是版本太老,要不就是代码有问题。。。于是今天动手写了一个,以解大家燃眉之急!仅给刚接触的小白参考用,大神勿喷,时间仓促,写的时候没有做注释,谅解~~
作业的要求是基于20个已知的数据,预测1个未知的数据,数据CSV的格式为第一列为时间,第二列为温度,第三列为电力消耗,电力预测下需要用到时间参数,温度参数,以及历史电力消耗
用的tensorflow版本为1.8.0, python版本为3.6
转载请注明出处哦~
这里把tensorflow程序分成了3部分,第一部分为PP_inference (LSTM模型), 第二部分为PP_train(训练程序),第三部分为PP_eval(测试程序),这样把程序分成3部分可以使程序可读性大大提高~
1.PP_inference :
定义神经网络结构,这里采用2层LSTM的简单结构+1层全链接(relu)+1个输出,HIDDEN_SIZE大小为500,这里设置了dropout,在训练过程中,dropout概率设置为0.9,测试时dropout概率设置为1(需在PP_train和eval中设置)
具体代码如下:
import tensorflow as tf HIDDEN_SIZE = 500 NUM_LAYERS = 2 def lstm_model(x,dropout_keep_prob): lstm_cells = [ tf.nn.rnn_cell.DropoutWrapper( tf.nn.rnn_cell.BasicLSTMCell(HIDDEN_SIZE), output_keep_prob=dropout_keep_prob) for _ in range(NUM_LAYERS)] cell = tf.nn.rnn_cell.MultiRNNCell(lstm_cells) print("cell_created") outputs, _ = tf.nn.dynamic_rnn(cell, x, dtype=tf.float32) output = outputs[:,-1,:] predictions01 = tf.contrib.layers.fully_connected(output, 100,activation_fn= tf.nn.relu) predictions = tf.contrib.layers.fully_connected(predictions01, 1, activation_fn=None) return predictions
2.PP_train :
下为训练程序。 这里首先设置了一些参数,
比如由于用20个点预测1个点,这里timestep为20
batchsize我调了好久。。。最终感觉100的时候loss比较稳定,收敛值也可以接受
inputsize为输入值的维度,这里为3
学习率设置为0.01,decay为0.9
用了50000个样本进行训练
具体代码如下:
import numpy as np import tensorflow as tf import pandas as pd import PP_inference TIMESTEPS = 20 TRAINING_STEPS = 10000 BATCH_SIZE = 100 INPUT_SIZE = 3 LEARNING_RATE_BASE = 0.01 LEARNING_RATE_DECAY = 0.9 NUM_EXAMPLES = 50000 f=open('BSE.csv') df=pd.read_csv(f) dat