Python用CNN+LSTM+Attention对新闻文本分类、锂离子电池健康、寿命数据预测

news/2024/9/21 10:55:00/文章来源:https://www.cnblogs.com/tecdat/p/18393736

全文链接:https://tecdat.cn/?p=37561

原文出处:拓端数据部落公众号

 分析师:Weiqiao Jue

在当今的数字化时代,数据的爆炸式增长既带来了机遇,也带来了挑战。如何从海量的数据中高效地提取有价值的信息,并进行准确的分类和预测,成为了众多领域亟待解决的关键问题。

本研究通过CNN+LSTM+Attention模型提高新闻文本分类的精确性的案例,结合Attention+CNN+BiLSTM锂离子电池健康、寿命预测的代码数据,深入探讨 Python 在不同领域的应用以及深度学习技术在数据处理和预测中的强大潜力,为推动相关领域的发展提供有益的参考和借鉴。

CNN+LSTM+Attention模型提高新闻文本分类的精确性

新闻文本分类,准确地将海量新闻文本划分到不同类别中,有助于信息的高效检索和利用。为了实现更高的分类精确性,我们引入了 CNN+LSTM+Attention 模型。该模型利用大规模的训练集和测试集数据,经过精心的数据处理和复杂的模型架构设计,能够有效地捕捉新闻文本中的语义特征和上下文关系,从而显著提高分类的准确性,减少误差。

 

任务/目标

使用CNN+LSTM+Attention模型提高新闻文本分类的准确性,减少误差

数据源准备

训练集为20w条样本,测试集为10w条样本。将训练集分为10份,前9份为训练集,最后1份为验证集。定义并创建vacab。Vacab有两份,一份是自创建的,另一份是外部加载的。得到词与字典对应的embedding。

模型构建

按照vacab将文本转换为对应的索引,最后返回的数据是list,里面的每一个元素是tuple。进而将每一个batch转换成tensor,生成训练数据。

词向量输入CNN中,CNN中分别定义了3个大小不同的卷积核,经过卷积+池化后将3个向量拼接输入双向LSTM中。接着,经过Attention,在Attention中经过线性变化得到key,再将key与query相乘得到output,表示每个句子所分配到的权重,再进行softmax。最后进入FC层得到分类概率的向量。

最后测试集得分为74.10。相较于单一模型的文本分类其效果有显著提升。

Attention+CNN+BiLSTM锂离子电池健康、寿命预测

锂离子电池的健康状态(State of Health,SOH)和剩余使用寿命(Remaining Useful Life,RUL)是电池化学的重要方面,从不同角度描述了电池的当前老化程度。为提高电池健康评估模型的有效性和准确性,本文实现了一种利用卷积神经网络(Convolutional Neural Networks,CNN)、双向长短期记忆网络(Bidirectional Long Short-Term Memory,BiLSTM)和注意力机制(Attention Mechanism,AM)对锂离子电池的 SOH 和 RUL 进行估计的方法,构建了用于锂离子电池容量估计的混合网络模型,并计算 SOH 和 RUL。

引言

锂离子电池在现代社会中有着广泛的应用,准确评估其健康状态和剩余使用寿命对于确保设备的可靠运行至关重要。传统的电池健康评估方法存在一定的局限性,而深度学习方法在处理复杂数据和挖掘潜在特征方面具有优势。因此,本文提出了一种基于注意力机制的 CNN-BiLSTM 混合网络模型,以提高锂离子电池健康状态预测的准确性。

数据来源

本文使用的锂离子电池数据来自美国国家航空航天局艾姆斯预测数据存储库(NASA Ames Prognostics Data Repository)[1]。此外,还包括一个用于对该数据集进行初步数据探索的笔记本以及一个用于荷电状态(State of Charge,SOC)预测的支持向量机(Support Vector Machine,SVM)模型。

模型概述

该模型首先使用卷积神经网络(CNN)进行特征提取和数据降维。这些特征作为双向长短期记忆网络(BiLSTM)的输入。BiLSTM 用于双向学习输入时间序列局部特征中的时间相关性信息。注意力机制通过为重要特征分配权重,更加关注对输出结果影响最大的输入关键特征,并进行电池 SOH 的多步预测。总体而言,卷积层提取时间序列数据的内在特征,BiLSTM 可以基于提取的特征预测电池容量,而注意力机制为这些特征分配权重。混合神经网络模型的结构示意图如下图 [2] 所示。

 

结果与分析

不同电池的容量绘制。

绘制不同电池的容量曲线,如下所示:

 
  1.  
     
  2.  
    ax.plot(B0005_capacity[0], B0005_capacity[1], color='blue', label='Battery-05')
  3.  
    ax.plot(B0006_capacity[0], B0006_capacity[1], color='green', label='Battery-06')
  4.  
    ax.plot(B0007_capacity[0], B0007_capacity[1], color='red', label='Battery-07')
 

 

充电数据绘制

针对充电数据进行绘制,代码如下:

 
  1.  
    indx = 1
  2.  
    for label in charging_labels:
  3.  
    fig, ax = plt.subplots(1, figsize=(20, 7))
  4.  
    fig1, ax1 = plt.subplots(1, figsize=(20, 7))
  5.  
    fig2, ax2 = plt.subplots(1, figsize=(20, 7))
  6.  
    fig3, ax3=plt.subplots(1, figsize=(20, 7))
  7.  
     
  8.  
    ax.plot(B0005_charging[5], B0005_charging[indx], color='red' ,label="B0005")
  9.  
    ax1.plot(B0006_charging[5], B0006_charging[indx], color='orange', label="B0006")
 

 

放电数据绘制

对于放电数据进行绘制,代码如下:

 
  1.  
    indx = 1
  2.  
    for label in charging_labels:
  3.  
    fig, ax = plt.subplots(1, figsize=(20, 7))
  4.  
    fig1, ax1 = plt.subplots(1, figsize=(20, 7))
  5.  
    fig2, ax2 = plt.subplots(1, figsize=(20, 7))
  6.  
     
  7.  
    ax.plot(B0005_discharging[5], B0005_discharging[indx], color='red' ,label="B0005")
  8.  
    ax1.plot(B0006_discharging[5], B0006_discharging[indx], color='orange', label="B0006")
  9.  
    ax2.plot(B0007_discharging[5], B0007_discharging[indx], color='blue' ,label="B0007")
 

SVM

 SVM 模型应用

  1. 获取 B0005 的数据框并绘制残差图:
 
  1.  
    dfB0005 = getDataframe(B0005)
  2.  
    sns.residplot(dfB0005['cycle'], dfB0005['capacity'])
 

 

使用最佳支持向量回归(Support Vector Regression,SVR)进行预测 

y_pred = best_svr.predict(X.values.reshape(-1, 1))

 

电池 SOC 的 CNN-BiLSTM-Attention 模型

定义模型参数:INPUT_DIMS = 4TIME_STEPS = 10lstm_units = 64。对数据进行归一化处理 

 
  1.  
    INPUT_DIMS = 4
  2.  
    TIME_STEPS = 10
  3.  
    lstm_units = 64
  4.  
    #Normalized
  5.  
    data,normalize = NormalizeMult(dfB0007)
  6.  
    capacity_data = data[:,0].reshape(len(dfB0007),1)
 

 打印数据集形状并构建注意力模型

 
  1.  
    train_X, _ = create_dataset(data,TIME_STEPS)
  2.  
    _ , train_Y = create_dataset(capacity_data,TIME_STEPS)
  3.  
     
  4.  
    print(train_X.shape,train_Y.shape)
  5.  
     
  6.  
    m = attention_model()
  7.  
    m.summary()
 

 
  1.  
    print(train_X.shape,train_Y.shape)
  2.  
     
  3.  
    m = attention_model()
  4.  
    m.summary()
 

 

绘制模型平均绝对误差(Mean Absolute Error,MAE)曲线和真实值与预测值对比曲线 

 
  1.  
    plt.plot(history.history['mae'])
  2.  
    plt.plot(history.history['val_mae'])
  3.  
    plt.title('model MAE')
  4.  
    plt.ylabel('MAE')
  5.  
    plt.xlabel('epoch')
  6.  
    plt.legend(['train', 'validation'], loc='upper left')
  7.  
    plt.show()
 

 

 

 
  1.  
    plt.plot(test_Y[:100])
  2.  
    plt.title('real vs pred')
  3.  
    plt.ylabel('value')
  4.  
    plt.xlabel('epoch')
  5.  
    plt.legend(['pred', 'real'], loc='upper left')
 

 

 

结论

本文提出的基于注意力机制的 CNN-BiLSTM 混合网络模型在锂离子电池健康状态预测方面表现出了较好的性能。通过对来自 NASA 数据存储库的锂离子电池数据进行实验,验证了该模型在特征提取、时间相关性学习和关键特征关注方面的有效性。未来,可以进一步优化模型结构和参数,提高预测的准确性和稳定性,并将该模型应用于实际的电池管理系统中,为电池的安全运行和维护提供有力支持。

 

参考文献 

[1] B. Saha and K. Goebel (2007). "Battery Data Set", NASA Ames Prognostics Data Repository (https://ti.arc.nasa.gov/tech/dash/groups/pcoe/prognostic-data-repository/#battery), NASA Ames Research Center, Moffett Field, CA

[2] Zhu Z, Yang Q, Liu X, Gao D. Attention-based CNN-BiLSTM for  SOH and RUL estimation of  lithium-ion batteries. Journal of Algorithms & Computational Technology. 2022;16. doi:10.1177/17483026221130598

关于分析师 

在此对 Weiqiao Jue 对本文所作的贡献表示诚挚感谢,他完成了计算机科学与技术专业的硕士学位,专注深度学习、NLP、图像处理领域。擅长使用 PyCharm、Pytorch 框架。

 

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【专题】2024年企业数字化人才实践研究报告合集PDF分享(附原数据表)

原文链接:https://tecdat.cn/?p=37556 在当今时代,数字化转型已然成为不可逆转的变革趋势。经过多年的持续发展,中国企业的数字化转型已然迈进了 “深水区”。对于众多企业来说,当下在数字化转型过程中最为迫切需要解决的问题,便是如何在已有的数字化成果基础上进行再度创…

博客内容规范

之前虽然用GitHub Pages建立了个静态博客,但是由于访问速度的问题,我便把内容迁移到了Gitee Pages上,谁能想它直接跑路了,至今还没有发一个字的公告。一波操作,我又迁回了GitHub,但是又想到一个人孤独写博客,还把内容放到GitHub上,访问慢、没人看,更没法和别人交流,感…

platformIO安装过程中速度慢、卡住的解决方法

资源管理器定位到 C:\Users\VSCode安装用户名\.platformio\penv打开pip.conf文件添加如下内容# 超时时间,可自行调整timeout = 6000# 源地址,这里使用阿里云镜像index-url = http://mirrors.aliyun.com/pypi/simple/# 添加源主机为可信主机trusted-host = mirrors.aliyun.com…

C#自定义控件—流动管道

C#用户控件之流动管道 如何绘制一个动态的流动管道(FlowPipe)?分两步绘制定义属性; 画布重绘;主要技能:管道的绘制(渐变色矩形)/// <summary>/// 画渐变色矩形的方法/// </summary>/// <param name="g">画布</param>/// <param n…

swing

数学教材推荐: 中学PDF课本介绍和下载:https://www.zhihu.com/question/517213170/answer/3430923272 swing swing基础 1、容器与控件 1.1)、类介绍JFrame 表示一个窗口JPanel ,表示一个容器,也称为面板JButton,表示一个按钮控件JLabel ,标签控件,用于显示文本1.2)、 使…

2分钟搞懂如何计算uart速率

一、前言 1960年代,DEC(Digital Equipment Corp)公司的Gordon Bell采用大约50个分离元件设计了一个电路板,发明了UART。时至今日,已经60多年,虽然在个人消费类电子产品中,UART已近乎绝迹;但在工业、科研、国防、航空/航天等领域,UART却无处不在。 很多从事多年嵌入式开…

JVM/垃圾回收

Java的垃圾回收模型 一、介绍分为栈、堆、本地方法栈、程序计数器、方法区栈区:主要用来存储局部变量和对象地址栈区不仅存储局部变量和对象地址,还存储方法调用的上下文信息。堆区:分为很多个区域,可以存储对象的具体数据等Java 虚拟机中内存最大的一块,是被所有线程共享的…

NetSarang Xshell 8.0 beta

一、概述NetSarang Xshell 8.0 beta发布啦! 二、新功能 2.1 身份验证配置文件 2.2 触发器2.3 快速命令 2.4 RDP支持 2.5 快速启动 2.6 自定义会话图标 ◀.zstitle { width: 280px; text-align: center; font-size: 26px } .zsimgweixin { width: 280px } .zsimgali { width…

【Spring Boot配置数据源问题】Spring Boot配置数据源时遇到错误:jdbcUrl is required with driverClassName​

报错如图,需要修改数据源连接配置:修改前配置如图:将spring.datasource.url修改为spring.datasource.jdbc-url即可:寻找了网上其他解释: spring.datasource.url 数据库的 JDBC URL。 spring.datasource.jdbc-url 用来创建连接的 JDBC URL。

mssql windows 账户登录不了 要登录sa创建出来 才可以本地登录

SQL SERVER 登陆错误:18456SQL Windows身份登录失败,错误码:18456 先用sa进入 EXEC xp_instance_regread NHKEY_LOCAL_MACHINE, NSOFTWARE\Microsoft\Microsoft SQL Server\MSSQLServer, NLoginMode -- 启用TCP/IP协议EXEC xp_instance_regwrite NHKEY_LOCAL_MACHINE, NSOFTWA…

2024软件工程(第一次作业)

这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzu/SE2024这个作业要求在哪里 https://edu.cnblogs.com/campus/fzu/SE2024/homework/13243这个作业的目标 适应后续使用博客园完成任务,初步体会AIGC的方便学号 1022014251.个人logo文生图任务设计理念:天上的白云体现…

三次剩余特征

三次剩余特征及其性质今天推点史: Laur - Symphony Op.1 -CHAOS ZAQUVA - Speculation DJ Noriken & DJ Genki - Dream Away feat. Yukacco (Hylen Remix) 史歌后边还有史笑话: 祭丁过,两广文①争一猪大脏,各执其脏之一头。一广文稍强,尽掣得其脏,争者只两手撸得脏中…