LSTM电力预测 ~期末大作业~

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
  • 9
    点赞
  • 82
    收藏
    觉得还不错? 一键收藏
  • 23
    评论
LSTM(长短期记忆网络)是一种循环神经网络(RNN)的变体,它在序列数据建模中表现出色。在电力负荷预测中,LSTM可以用于根据历史负荷数据来预测未来一段时间的负荷情况。 以下是使用Python进行LSTM电力负荷预测的示例代码: ```python import numpy as np import pandas as pd from sklearn.preprocessing import MinMaxScaler from keras.models import Sequential from keras.layers import LSTM, Dense # 读取负荷数据 data = pd.read_csv('load_data.csv') # 数据预处理 scaler = MinMaxScaler(feature_range=(0, 1)) scaled_data = scaler.fit_transform(data['load'].values.reshape(-1, 1)) # 划分训练集和测试集 train_size = int(len(scaled_data) * 0.8) train_data = scaled_data[:train_size, :] test_data = scaled_data[train_size:, :] # 创建训练集和测试集 def create_dataset(dataset, look_back=1): X, Y = [], [] for i in range(len(dataset) - look_back): X.append(dataset[i:(i + look_back), 0]) Y.append(dataset[i + look_back, 0]) return np.array(X), np.array(Y) look_back = 7 # 使用过去7天的负荷数据作为输入特征 train_X, train_Y = create_dataset(train_data, look_back) test_X, test_Y = create_dataset(test_data, look_back) # 调整输入数据的形状 train_X = np.reshape(train_X, (train_X.shape[0], train_X.shape[1], 1)) test_X = np.reshape(test_X, (test_X.shape[0], test_X.shape[1], 1)) # 构建LSTM模型 model = Sequential() model.add(LSTM(units=50, return_sequences=True, input_shape=(look_back, 1))) model.add(LSTM(units=50)) model.add(Dense(units=1)) model.compile(optimizer='adam', loss='mean_squared_error') # 训练模型 model.fit(train_X, train_Y, epochs=100, batch_size=32) # 预测未来负荷 predicted_data = model.predict(test_X) predicted_data = scaler.inverse_transform(predicted_data) # 可视化预测结果 import matplotlib.pyplot as plt plt.plot(data['date'][train_size + look_back:], data['load'][train_size + look_back:], label='Actual') plt.plot(data['date'][train_size + look_back:], predicted_data, label='Predicted') plt.xlabel('Date') plt.ylabel('Load') plt.legend() plt.show() ``` 注意,上述代码中的`load_data.csv`是包含期和负荷数据的CSV文件。你需要将其替换为你自己的负荷数据文件

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 23
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值