基于CNN-Lstm负荷预测(Python代码实现)

 👨‍🎓个人主页:研学社的博客 

💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

📋📋📋本文目录如下:🎁🎁🎁

目录

💥1 概述

📚2 运行结果

🎉3 参考文献

🌈4 python代码、数据


💥1 概述

利用cnn-Lstm提取深层特征,concatenate进行特征融合,进入attention机制,最终输出负荷数值

input.py为读取原始数据,输入的数据为校园综合能源系统数据

attention_model.py输入冷、热、电负荷,提取深层特征,加入attention机制,观察结果,模型流程图保存在attention_model.png

multi_attention_model.py分别利用cnn-Lstm提取冷、热、电负荷深层特征,concatenate进行特征融合,进入attention机制,最终输出负荷数值,模型流程图保存在multi_attention_model.png,bar_1.png为权重柱状图。

                     

📚2 运行结果

                               

 

 部分代码:

# # 单独训练电负荷模型,提取电负荷深层特征
# model, middle = elec_model()
# model = load_model("./elec.h5")
# model.summary()
# middle = load_model("./elec_feature.h5")
# elec_feature = middle.predict(X_test[0, :, 0].reshape((1, 24, 1)))
# print("------------------------")
# print("elec_feature.shape: ", elec_feature.shape)  # (712, 24, 48)
# print(elec_feature)
#
# # weight_Dense_1 = model.get_layer('elec_feature').get_weights()
# # weight_Dense_1 = np.array(weight_Dense_1)
# # print("weight_Dense_1[0].shape: ", weight_Dense_1[0].shape)
# # print("weight_Dense_1: ", weight_Dense_1)
# # # print("bias_Dense_1: ", bias_Dense_1)


def cool_model():
    time_steps = 24
    input_dim = 1
    lstm_units = 48
    epoch = 200
    batch_size = 48

    input_tensor = Input(shape=(time_steps, input_dim), name='cool_input')
    cnn_out = Conv1D(filters=64, kernel_size=1, activation='relu', name="cool_cnn")(input_tensor)
    hidden_1 = Dropout(0.3, name='cool_dropout1')(cnn_out)
    lstm_out = CuDNNLSTM(lstm_units, return_sequences=True, name='cool_feature')(hidden_1)
    hidden_2 = Dropout(0.3, name='cool_dropout2')(lstm_out)
    hidden_3 = Flatten(name='cool_flatten')(hidden_2)
    output = Dense(1, activation='sigmoid', name='cool_dense')(hidden_3)

    model = Model(input_tensor, output)
    model.summary()

    model.compile(loss='mae', optimizer='adam')
    # plot_model(model, to_file='model.png')
    model.fit(X_train[:, :, 1].reshape((2920, 24, 1)), y_train[:, 1], epochs=epoch, batch_size=batch_size, shuffle=False)

    middle = Model(input_tensor, model.get_layer('cool_feature').output)

    model.save("./cool.h5")
    middle.save("./cool_feature.h5")
    return model, middle

🎉3 参考文献

部分理论来源于网络,如有侵权请联系删除。

🌈4 python代码、数据

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是基于CNN-LSTM的寿命预测模型的示例代码: ```python import pandas as pd import numpy as np import tensorflow as tf from keras.models import Sequential from keras.layers import Dense, Conv1D, MaxPooling1D, Flatten, LSTM, Dropout # 读取数据 data = pd.read_csv('data.csv') # 数据预处理 x_train = [] y_train = [] for i in range(60, len(data)): x_train.append(data[i-60:i, 0]) y_train.append(data[i, 0]) x_train = np.array(x_train) y_train = np.array(y_train) x_train = np.reshape(x_train, (x_train.shape[0], x_train.shape[1], 1)) # 建立模型 model = Sequential() model.add(Conv1D(filters=64, kernel_size=3, activation='relu', input_shape=(60, 1))) model.add(Conv1D(filters=32, kernel_size=3, activation='relu')) model.add(MaxPooling1D(pool_size=2)) model.add(Dropout(0.2)) model.add(LSTM(100, return_sequences=True)) model.add(Dropout(0.2)) model.add(LSTM(100)) model.add(Dense(1)) # 编译模型 model.compile(loss='mean_squared_error', optimizer='adam') # 训练模型 model.fit(x_train, y_train, epochs=50, batch_size=64) # 预测 test_data = pd.read_csv('test_data.csv') x_test = [] for i in range(60, len(test_data)): x_test.append(test_data[i-60:i, 0]) x_test = np.array(x_test) x_test = np.reshape(x_test, (x_test.shape[0], x_test.shape[1], 1)) predictions = model.predict(x_test) # 展示结果 plt.plot(test_data['Date'], test_data['Lifespan'], label='Actual') plt.plot(test_data['Date'], predictions, label='Predicted') plt.legend() plt.show() ``` 代码中,我们首先读取并预处理数据。然后,我们建立了一个包含卷积层、最大池化层、Dropout层和LSTM层的模型,并使用均方误差作为损失函数进行编译。最后,我们使用测试数据进行预测并展示结果。 注意:这只是一个示例代码,实际应用中需要根据数据情况对模型进行调整。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荔枝科研社

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值