算法学习笔记:Bi-LSTM和Bi-GRU

news2024/12/23 15:11:59
这篇文章的作为前几篇RNN\LSTM\RNN的后续之作,主要就是补充一个这两个哥的变体,想详细了解RNN\LSTM\GRU的详细理论和公式推导以及代码的请前往下面链接:

算法学习笔记:循环神经网络(Recurrent Neural Network)-CSDN博客

算法学习笔记:长短期记忆网络(Long Short Term Memory Network)-CSDN博客

算法学习笔记:门控循环单元(Gate Recurrent Unit)-CSDN博客

一、Bi-LSTM

Bi-LSTM(Bidirectional Long Short Term Memory)网络是是一种基于长短期记忆网络(LSTM)的时间序列预测方法;它结合了双向模型和LSTM的门控机制,由2个独立的LSTM网络构成。当Bi-LSTM处理序列数据时,输入序列会分别以正序和逆序输入到2个LSTM网络中进行特征提取,并将将2个输出向量(即提取后的特征向量)进行拼接后形成的输出向量作为该时间步的最终输出

(其实就是两个LSTM组合在一起,具体的原理和结构和LSTM一样啦)

Bi-LSTM的模型设计理念是使t时刻所获得特征数据同时拥有过去和将来之间的信息;此外,值得一提的是,Bi-LSTM中的2个LSTM网络参数是相互独立的,它们只共享同一批序列数据。

二、Bi-GRU

Bi-GRU(Bidirectional Gated Recurrent Unit)是一种基于门控循环单元(GRU)的时间序列预测方法;它结合了双向模型和门控机制,整体结构与单元体结构与GRU一致,因此也能够有效地捕捉时间序列数据中的时序关系。Bi-GRU的整体结构由两个方向的GRU网络组成,一个网络从前向后处理时间序列数据,另一个网络从后向前处理时间序列数据;这种双向结构可以同时捕捉到过去和未来的信息,从而更全面地建模时间序列数据中的时序关系。

(也就是两个GRU组会在一起啦,结构啥的都一样!)

三、Bi-LSTM和Bi-GRU源码

import numpy as np
from numpy import savetxt
import pandas as pd
from pandas.plotting import register_matplotlib_converters
from pylab import rcParams
import matplotlib.pyplot as plt
from matplotlib import rc
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import MinMaxScaler, StandardScaler
from sklearn.metrics import r2_score
import tensorflow as tf
from tensorflow import keras
from keras.optimizers import Adam,RMSprop
import os
import tensorflow as tf
tf.config.set_visible_devices(tf.config.list_physical_devices('GPU'), 'GPU')
register_matplotlib_converters()
#plt.rcParams["font.sans-serif"] = [""]# 指定默认字体
pd.set_option('display.max_columns', None)  # 结果显示所有列
pd.set_option('display.max_rows', None)  # 结果显示所行行
#>>>>>>>>>>>>数据预处理
#1.训练集(New-train)数据处理
source = 'New-train.csv'
df_train = pd.read_csv(source, index_col=None)
df_train = df_train[['设置你的数据表头']] 
 
source = 'New-test.csv'
df_test = pd.read_csv(source, index_col=None)
df_test = df_test[['设置你的数据表头']] 
 
train_size = int(len(df_train))
test_size = int(len(df_test))
train = df_train.iloc[0:train_size]
test = df_test.iloc[0:test_size]
print(len(train), len(test))
 
def training_data(X, y, time_steps=1):
    Xs, ys = [], []
    for i in range(len(X) - time_steps):
        v = X.iloc[i:(i + time_steps)].values
        Xs.append(v)
        ys.append(y.iloc[i + time_steps])
    return np.array(Xs), np.array(ys)
 
 
time_steps = 10
X_train, y_train = training_data(train.loc[:, '设置你的数据表头'], train.*, time_steps)
x_test, y_test = training_data(test.loc[:,'设置你的数据表头'], test.*, time_steps)
 
 
#构建模型
# 单层双尾lstm
def model_BiLSTM(units):
    model = keras.Sequential()
    #Input Layer
    model.add(keras.layers.Bidirectional(
        keras.layers.LSTM(
            units=units,
            activation="relu",
            input_shape=(X_train.shape[1], X_train.shape[2])
            )))
    model.add(keras.layers.Dropout(0.2))
    #Hidden Layer
    model.add(keras.layers.Dense(1))
    model.compile(loss='mse', optimizer=Adam(learning_rate=0.001, clipvalue = 0.2))
    return model

# 单层双尾GRU
def model_BiGRU(units):
    model = keras.Sequential()
    #input
    model.add(keras.layers.Bidirectional(
        keras.layers.GRU(
            units=units,
            activation="relu",
            input_shape=(X_train.shape[1], X_train.shape[2])
        )))
    model.add(keras.layers.Dropout(0.2))
    model.add(keras.layers.Dense(1))
    model.compile(loss='mse', optimizer='adam')
    return model
 
#训练模型
def fit_model(model):
    #早停机制,防止过拟合
    early_stop = keras.callbacks.EarlyStopping(
        monitor='val_loss',
        min_delta=0.0,#min_delta=0.0 表示如果训练过程中的指标没有发生任何改善,即使改善非常微小,也会被视为没有显著改善
        patience=2000)#表示如果在连续的 2000 个 epoch 中,指标没有超过 min_delta 的改善,训练将被提前停止
        history = model.fit(  # 在调用model.fit()方法时,模型会根据训练数据进行参数更新,并在训练过程中逐渐优化模型的性能
        X_train, y_train, # 当训练完成后,模型的参数就被更新为训练过程中得到的最优值
        epochs=400,         # 此时model已经是fit之后的model,直接model.predict即可(千万不要model=model.fit(),然后再model.predict)
        validation_split=0.1,   
        batch_size=12600,
        shuffle=False,
        callbacks=[early_stop])
    return history
 
lstm_n64 = model_BiLSTM(64)
GRU = model_BiGRU(64)
#这里只是写了训练模型的代码,预测的话要根据自己的数据结构以及想要的效果来写喔

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1605933.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

udemy视频教程下载:AI和ChatGPT提示工程精通指南

欢迎来到 ChatGPT 大师班! 这个 ChatGPT 大师班:AI 和提示工程指南是您通往 AI 未来的全通道通行证。 以下是您的学习旅程: 理解和掌握 ChatGPT:您将深入了解 AI 和语言模型,重点是 ChatGPT。我们设计了这个部分&am…

前端三大件速成 01 HTML

文章目录 一、前端基础知识二、标签1、什么是标签2、标签的属性3、常用标签(1)声明(2)注释(3)html 根标签(3)head标签(4)body标签 三、特殊字符四、其他标签1…

java方法递归

简介 案例:阶乘 // 计算一个数的阶乘 public static int factorial(int n) {if (n 1) {return 1;}return n * factorial(n - 1); }案例 猴子吃桃子 // 猴子吃桃子问题 // 第一天吃了一半多一个 第十天剩一个 求第一天有多少个桃子 // 因为 f(x1) f(x)/2 - 1 // 所…

STL库 —— priority_queue 的编写

目录 一、 优先级队列的介绍 二、优先级队列的使用 2.1 建大堆 less 2.2 建小堆 greater 2.3 详解 greater 与 less 三、 priority_queue 的模拟实现 3.1 编写框架 3.2 编写简单函数 3.2 进堆 向上调整 3.3 出堆 向下调整 四、完整代码 一、 优先级队列的介绍 1.…

【Python系列】非异步方法调用异步方法

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

浅谈数据结构---红黑树、二叉树

红黑树简介 红黑树:在本质上还是二叉树,是一种高效的查找树。 特点 一边的数比另一边的数高太多时,自动旋转平衡 当数据量比较大时,层级比较多,查询效率低 如下图所示: 如果一边的数比另一边高太多时&…

AI智能电销机器人是什么?能给我们带来哪些便利?

科技的飞速发展,让很多“懒人”的幻想变成了现实,越来越多的人工智能产品被发明出来甚至完全替代日常生活中的工作。比如在电销行业,很多企业选择AI智能电销机器人进行外呼。那么你了解多少AI智能电销机器人呢?和小编kelaile520一…

前端js控制元素移动

背景 页面中有多个表格,每个表格中均有一从右到左匀速移动的元素,随着元素移动需要在表格中增减数据,由于使用css3动画无法捕捉元素移动位置,所以这里采用js控制dom的写法 解决办法 最终代码放在文章的最后,各位看官…

热塑性聚氨酯TPU的特性有哪些?UV胶水能够粘接热塑性聚氨酯TPU吗?又有哪些优势呢?

热塑性聚氨酯(Thermoplastic Polyurethane,TPU)是一种具有多种优异性能的弹性塑料,广泛用于各种应用领域。以下是TPU的一些主要特性: 弹性和柔软性: TPU具有良好的弹性和柔软性,能够在受力后迅速…

现在给政府机关医院学校部队供货的方式有哪些?

给政府机关、医院、学校和部队供货的方式主要包括以下几种: 直接采购:政府机关、医院、学校和部队通过招标或直接与供应商进行谈判,确定采购的产品和价格。这种方式常见于大宗或重要物资的采购,能够确保采购过程的透明度和公正性…

林草资源管理系统:构筑绿色长城,守护自然之美

在全球气候变化和生态环境恶化的背景下,森林和草原资源的保护、恢复和合理利用显得尤为重要。林草资源管理系统的建立,旨在通过现代信息技术手段,提升林草资源管理的效率和质量,确保自然资源的可持续发展。 项目背景 森林和草原…

Nacos—配置管理

简介: Nacos是阿里巴巴开发的,它旨在帮助用户更敏捷和容易地构建、交付和管理微服务平台。Nacos的主要功能和特性包括: 动态服务发现。Nacos支持基于DNS和RPC的服务发现,允许服务提供者和消费者之间的高效交互。动态配置管理。…

2024华中杯ABC题完1-3小问py代码+完整思路16页+后续参考论文

A题太阳能路灯光伏板朝向问题 (完整版获取在文末) 第1小问:计算每月15日的太阳直射强度和总能量 1. 理解太阳直射辐射和光伏板的关系**:光伏板接收太阳辐射并转化为电能,直射辐射对光伏板的效率影响最大。 2. 收集数…

线程互斥,线程安全和线程同步

多线程的基本代码编写步骤 1.创建线程pthread_create() 2.终止线程的三种方法。线程取消pthread_cancel(一般在主线程取消), 线程终止pthread_exit(在其他线程执行), 或者使用线程返回return 3.线程等待pthread_join 需要等待的原因是 1.已经退出的线程…

Java程序生成可执行的exe文件 详细图文教程

1.Java编辑器,如:idea、eclipse等,下载地址:IntelliJ IDEA: The Capable & Ergonomic Java IDE by JetBrainshttps://www.jetbrains.com/idea/2.exe4j,下载地址:ej-technologies - Java APM, Java Prof…

spring 集成 mybatis

spring 集成 mybatis 1、spring对junit的支持1.1、对junit4的支持1.2 对junit5的支持 2、Spring6集成MyBatis3.52.1 实现步骤2.2 实现 1、spring对junit的支持 1.1、对junit4的支持 依赖 <?xml version"1.0" encoding"UTF-8"?> <project xml…

基于XML配置bean(一)

文章目录 1.获取bean的两种方式1.通过id获取bean&#xff08;前面用过&#xff09;2.通过类型获取bean&#xff08;单例时使用&#xff09;1.案例2.代码1.beans.xml2.SpringBeanTest.java3.结果 3.注意事项 2.三种基本依赖注入方式1.通过属性配置bean&#xff08;前面用过&…

图与图搜索算法

图搜索算法是一个非常重要的概念&#xff0c;它是计算机科学中图论和算法设计的基础部分。在开始讨论图搜索算法之前&#xff0c;我们需要先理解什么是图以及图的基本结构。 什么是图&#xff1f; 图&#xff08;Graph&#xff09;是一种非线性数据结构&#xff0c;它由一组点…

通过vue完成表格数据的渲染展示和vue的生命周期及小结

案例 通过vue完成表格数据的渲染展示 把视图区展示的数据 死数据替换掉 从vue的数据模型中读取 展示在视图区 vue中的数据 模型是js中的自定义类型 形成的数组 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8">&l…

Mathorcup 甲骨文识别

本资源主要包含第2-4问&#xff0c;第一问直接使用传统图像处理即可&#xff0c;需要有很多步骤&#xff0c;这一步大家自己写就行。 2 第2问&#xff0c;甲骨文识别 2.1 先处理源文件 原文件有jpg和json文件&#xff0c;都在一个文件夹下&#xff0c;需要对json文件进行处理…