keras搭建双向lstm

# -*- coding: utf-8 -*-
# 导入库pip install openpyxl -i https://pypi.tuna.tsinghua.edu.cn/simple
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn import metrics
from sklearn.metrics import mean_squared_error  # 评价指标
import matplotlib.pyplot as plt
from keras.models import Sequential
from keras.layers import Dense
from keras.layers import LSTM, GRU
from keras.layers import Dense,LSTM,Bidirectional
from keras import optimizers
import keras
import tensorflow as tf
#  mse rmse mae rmape
#  adam sgd

plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
import warnings
warnings.filterwarnings("ignore")  # 忽略一些警告 不影响运行
# from data_read import data_process
from vmd_data_read import data_process
train_x,train_y=data_process()
# 序列长度
int_sequence_len = train_x.shape[1]
# 每个序列的长度
int_a = train_x.shape[2]

# 输出几个元素 几步:
out_len = train_y.shape[1]

# 划分验证集和测试集
x_train, x_test, y_train, y_test = train_test_split(np.array(train_x), np.array(train_y), test_size=0.2, random_state=1)

print(x_train.shape)
print(len(x_train), len(x_test))  # 1243 311
x_train = x_train.reshape(len(x_train),int_sequence_len, int_a) # 三维度数据 全部数据长度 序列长度 每个序列维度
y_train = y_train.reshape(len(x_train),out_len)

print(x_train.shape)
print(y_train.shape)
x_test = x_test.reshape(len(x_test),int_sequence_len, int_a)
y_test = y_test.reshape(len(x_test),out_len)

print(x_test.shape)
print(y_test.shape)

model1=Sequential()
lstm=LSTM(200, activation='relu', input_shape=(int_sequence_len, int_a))  #返回最后一个节点的输出
model1.add(Bidirectional(lstm))  #双向LSTM
model1.add(Dense(512,activation='relu'))
model1.add(Dense(128,activation='relu'))
model1.add(Dense(out_len))
op = optimizers.adam_v2.Adam(lr=0.005)
model1.compile(loss='mean_absolute_error', optimizer=op)  # 回归损失函数和优化器 Adam SGD

# model1 = create_model_1()
# model1.summary()
history=model1.fit(x_train, y_train, validation_data=(x_train, y_train), epochs=50, batch_size=256, shuffle=True)
#                                                                训练世代      batch
model1.save_weights('lstmmoxing')  # 模型保存

import matplotlib.pyplot as plt
training_loss = history.history['loss']
test_loss = history.history['val_loss']
# 创建迭代数量
epoch_count = range(1, len(training_loss) + 1)
# 可视化损失历史
plt.plot(epoch_count, training_loss, 'r--')
plt.plot(epoch_count, test_loss, 'b-')
plt.legend(['Training Loss', 'Test Loss'])
plt.title("train loss and test loss")
plt.xlabel('Epoch')
plt.ylabel('Loss')
plt.show()


from sklearn.metrics import mean_squared_error  # 均方误差
from sklearn.metrics import mean_absolute_error  # 平方绝对误差
from sklearn.metrics import r2_score  # R square

# 调用
# 引用上边的模型实例
# model_jiazai_1 = create_model_1()
# 加载保存好的模型
# model_jiazai_1.load_weights('lstmmoxing')

y1_pred_lstm = model1.predict(x_test)

y_true=[]
y_pred=[]
for i in range(len(y1_pred_lstm)):
    print("真实:", y_test[i])
    y_true.extend(y_test[i])
    print("预测:", y1_pred_lstm[i])
    y_pred.extend(y1_pred_lstm[i])
    print("-----------------------")
from metra import metric
mae, mse, rmse, mape, mspe,r2=metric(np.array(y_pred),np.array(y_true))
print('mae, mse, rmse, mape, mspe,r2')
print(mae, mse, rmse, mape, mspe,r2)

y_pred=y_pred/max(y_pred)
y_true=y_true/max(y_true)
# 所有画图
len_ = [i for i in range(len(y_true))]
plt.xlabel('标签', fontsize=8)
plt.ylabel('均值', fontsize=8)
plt.plot(len_, y_true, label='y_true', color="blue")
plt.plot(len_, y_pred, label='y_pred', color="yellow")
plt.title("预测走势图")
plt.legend()
plt.show()
plt.clf()

# # 输出到excle
# name = ['真实值', '预测值']
# test = pd.DataFrame(columns=name, data=result)
# test.to_excel('result_天气.xlsx')
# # 输出 。。。excle表

  • 10
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值