深度学习-循环神经网络-LSTM对序列数据进行预测

 项目简介:

使用LSTM模型, 对文本数据进行预测, 

每次截取字符20, 对第二十一个字符进行预测, 

LSTM层: units=100, activation=relu

Dense层: units=输入的文本中的字符种类, 比如我使用的文本有644个不同的字符, 那么units=64

                激活函数: 因为是多分类, 使用softmax

                因为这是最后一层, 所以输出神经元的个数也就是644

# ===================================================================
# 1.数据导入和数据预处理
# 读入数据
txt_data= open(r"C:\Users\鹰\Desktop\AI Assistant.txt", encoding='utf-8').read()
# 数据预处理# 移除换行符
txt_data=txt_data.replace('\n','').replace('\r','').replace('#', '').replace('*','').replace('=','').replace('-','')
# print(txt_data)
# 字符去重
letters = list(set(txt_data))
# print(letters)
letters_num=len(letters)
# print(letters_num)# 建立字典,让字符与数字对应
# 话说int_to_char这个字典是干嘛的, 到底没看出
int_to_char={a:b for a,b in enumerate(letters)}
# print(int_to_char)char_to_int={b:a for a,b in enumerate(letters)}
# print(char_to_int)# 设定time_step=20, 就是每次在文本中截取的字符长度为20, 然后预测第二十一个
time_step=20# 滑动窗口提取数据--对字符数据进行截取转成列表给x, 将预测数据给y
def extract_char(data, slide):x=[]y=[]for i in range(len(data)-slide):x.append([a for a in data[i:i+slide]])y.append(data[i+slide])return x, y# 批量转化--将字符转化为数字
def char_to_int_data(x, y, char_to_int_dict):x_to_int=[]y_to_int=[]for i in range(len(x)):x_to_int.append([char_to_int_dict[char] for char in x[i]])y_to_int.append(char_to_int_dict[y[i]])return x_to_int, y_to_int# 实现文章的预处理, 参数--1.要处理的字符数据, 2.每次截取的字符长度, 3.进行转化的信息交换字典
def data_preprocessing(data, slide, letters_num, char_to_int_dict):# 提取滑动窗口数据char_data = extract_char(data, slide)int_data = char_to_int_data(char_data[0], char_data[1], char_to_int_dict)input_data = int_data[0]output_data = int_data[1]# 转换成 one-hot 编码input_reshape = np.array(input_data).reshape(len(input_data), slide)new = np.zeros((input_reshape.shape[0], input_reshape.shape[1], letters_num), dtype=bool)  # 使用 boolfor i in range(input_reshape.shape[0]):new[i, :, :] = to_categorical(input_reshape[i, :], num_classes=letters_num)# 将布尔值转换为 0 和 1new = new.astype(int)return new, output_data# 调用函数
x,y= data_preprocessing(txt_data, time_step, letters_num, char_to_int)print(x.shape)
print(x[0])
print(len(y))#数据集分割
from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test=train_test_split(x, y, test_size=0.1, random_state=10)# 对训练集目标值转化为one-hot格式
y_train_category=to_categorical(y_train, letters_num)
print(y_train_category)
# ===================================================================================
# 2.模型搭建和模型训练
# 搭建模型
from keras.models import Sequential
LSTM_model=Sequential()
from keras.layers import LSTM, Dense
# 一会要不要调整一下神经元数量? 
LSTM_model.add(LSTM(units=100, input_shape=(x_train.shape[1], x_train.shape[2]), activation='relu'))
LSTM_model.add(Dense(units=letters_num, activation='softmax'))
LSTM_model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
LSTM_model.summary()# 训练模型
LSTM_model.fit(x_train, y_train_category, epochs=50, batch_size=64)# ===========================================================================
# 3.基于训练集和测试集进行预测和评估
# 训练集预测+评估
y_predict_base_train=LSTM_model.predict(x_train)
y_predict_base_train=np.argmax(y_predict_base_train, axis=1)
# 以数值类型输出预测结果
# print(y_predict_base_train)
y_predict_base_train_char=[int_to_char[i] for i in y_predict_base_train]
# 以字符类型输出结果
print(y_predict_base_test_char)
# 计算模型预测准确率
from sklearn.metrics import accuracy_score
accuracy_score=accuracy_score(y_train, y_predict_base_train)
print("accuracy is ", accuracy_score)# 测试集预测+评估
y_predict_base_test=LSTM_model.predict(x_test)
y_predict_base_test=np.argmax(y_predict_base_test, axis=1)
# 以数值类型输出预测结果
# print(y_predict_base_test)y_predict_base_test_char=[int_to_char[i] for i in y_predict_base_test]
# 以字符类型输出结果
# print(y_predict_base_test_char)# 计算模型预测准确率
from sklearn.metrics import accuracy_score
accuracy_score=accuracy_score(y_test, y_predict_base_test)
print("accuracy is ", accuracy_score)# 课外实践, ===========================================================================
# 4.实战预测: 输入"怎么样开发一个ai助手, 可以根据我提出的需求自动进行进行开发网站, 移动端app, 桌面应用程序,可以进行数据获取, 数据分析", 看看效果x_new="怎么样开发一个ai助手, 可以根据我提出的需求自动进行进行开发网站, 移动端app, 桌面应用程序,可以进行数据获取, 数据分析"
x_new, y_new= data_preprocessing(x_new, time_step, letters_num, char_to_int)
y_new_predict=LSTM_model.predict(x_new)
y_new_predict=np.argmax(y_new_predict, axis=1)
y_new_char=[int_to_char[i] for i in y_new]
print(y_new_char)
y_new_predict_char=[int_to_char[i] for i in y_new_predict]
print(y_new_predict_char)# 计算模型准确率
from sklearn.metrics import accuracy_score
accuracy_score=accuracy_score(y_new, y_new_predict)
print("accuracy is ", accuracy_score)# 注意哈, 原来的实战目标是输入"ai应用程序开发", 结果报错了, 因为这个模型之前规定time_step=20, 而"ai应用程序开发"这一串字符小于二十, 模型无法完成一次正常的截取, 当然会报错

作者的备注:

兄弟, 不是不想给你们准备数据集,

而是这个文件里面的数据对我用处很大,

原谅我

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

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

相关文章

【AI大模型】ChatGPT模型原理介绍

ChatGPT 是一种基于大规模深度学习语言模型 GPT(Generative Pre-trained Transformer)的 AI 模型。它使用自然语言处理(NLP)技术,基于大量文本数据进行训练,通过生成式模型来理解和生成自然语言对话。以下是…

微信小程序live-pusher和video同时使用,video播放声音时时大时小

一、遇到的问题 微信小程序live-pusher和video同时使用,video播放声音时有时无时大时小 二、排查流程 业务是模拟面试,每道题一个推流live-pusher和一个面试题video,一次面试有多道面试题,页面就一个live-pusher和一个video,切换面试题时给live-pusher和video重新赋值u…

gitlab 配置ssh keys

settings -- 终端配置: git config --global user.email "yxthotmail.cm" 配置gitlab 账号邮箱 git config --global user.name "xt.yao" 配置gitlab账号用户名 生成SSH key,输入命令ssh-keygen -t rsa,一直按回车…

管家婆财贸ERP BB033.查看历史销售选存货

最低适用版本: 财贸系列 21.5 插件简要功能说明: 销售单支持选择历史销售明细数据,快捷开单采购单保存后,明细存货的存货备用8更新为当前采购单制单日期更多细节描述见下方详细文档插件操作视频: 进销存类定制插件--查看历史销售选存货 插件详细功能文档: 1. 销售单增…

JavaScript 的 class 和箭头函数

在JavaScript中,class 和箭头函数(Arrow functions)是ES6(ECMAScript 2015)引入的两个重要特性,它们分别提供了更简洁和更强大的方式来定义对象和函数。下面是对这两个特性的详细解释: Class&a…

使用Vue.js构建响应式Web应用

💖 博客主页:瑕疵的CSDN主页 💻 Gitee主页:瑕疵的gitee主页 🚀 文章专栏:《热点资讯》 使用Vue.js构建响应式Web应用 1 引言 2 Vue.js简介 3 安装Vue CLI 4 创建Vue项目 5 设计应用结构 6 创建组件 7 使用…

【nnUNet v2—修改网络】——马上更新

目录 一、二级目录三级目录 参考 一、 二级目录 三级目录 参考 [1] UUNet训练自己写的网络 [2] 【nnUNet v2版本 如何训练自己设计的网络】 [3] nnUnetV2:自定义网络 [4] link [5] link

音频重采样(libresample)

https://github.com/minorninth/libresample USB audio同步问题及Jitter分析_usb mic i2s 时钟不同步-CSDN博客 是的,电脑和 USB 摄像头之间的 UAC(USB Audio Class)传输,**可能会因为两边时钟不同步而引起破音问题**。时钟不同…

windows中的tracert命令

在 Windows 操作系统中,tracert(全称 Trace Route)是一个用于确定 IP 数据包到达目标主机所经过的路径的命令行工具。它通过发送具有不同生存时间(TTL)的 ICMP(Internet Control Message Protocol&#xff…

2024“源鲁杯“高校网络安全技能大赛-Misc-WP

Round 1 hide_png 题目给了一张图片,flag就在图片上,不过不太明显,写个python脚本处理一下 from PIL import Image ​ # 打开图像并转换为RGB模式 img Image.open("./attachments.png").convert("RGB") ​ # 获取图像…

隨筆 Kafka中普通 Broker 如何收到最新的 epoch number

在 Kafka 集群中,当一个新的 Controller 当选之后,epoch number 会通过以下机制传递给其他 Broker。这个过程主要涉及 ZooKeeper 和新的 Controller 之间的交互。 1. 新的 Controller 更新 ZooKeeper 中的 epoch number: 当新的 Controller…

计算机网络中网络层发送报文时IP地址的变化,交换器的广播功能及相关设备功能

计算机网络中网络层发送报文时IP地址的变化 在计算机网络中,网络层负责数据的路由和转发,其中IP地址起着至关重要的作用。当报文在网络层发送时,目的IP地址和源IP地址的变化情况主要取决于报文所经过的网络设备和所应用的网络技术。 目的IP…

GCN+BiLSTM多特征输入时间序列预测(Pytorch)

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 GCNBiLSTM多特征输入时间序列预测(Pytorch) 可以做风电预测,光伏预测,寿命预测,浓度预测等。 Python代码,基于Pytorch编写 1.多特征输入单步预测…

【大数据学习 | kafka】kafuka的基础架构

1. kafka是什么 Kafka是由LinkedIn开发的一个分布式的消息队列。它是一款开源的、轻量级的、分布式、可分区和具有复制备份的(Replicated)、基于ZooKeeper的协调管理的分布式流平台的功能强大的消息系统。与传统的消息系统相比,KafKa能够很好…

MySQL-DQL练习题

文章目录 简介初始化表练习题 简介 本节简介: 主要是一些给出一些习题, 关于DQL查询相关的, DQL查询语句是最重要的SQL语句, 功能性最复杂, 功能也最强, 所以本节建议适合以及有了DQL查询基础的食用, 另外注意我们使用的是Navicat, SQL编辑的格式规范也是Navicat指定的默认格式…

Android 15: 探索未来的可能性

Android 15: 探索未来的可能性 随着技术的不断进步,我们的智能手机系统也在不断地进化。Android 15,作为谷歌最新推出的操作系统版本,带来了一系列令人兴奋的新特性和改进,让我们的数字生活更加丰富多彩。本文将带你一探Android 15的新特性,感受科技的魅力。 低光增强:…

鸿蒙实现相机拍照及相册选择照片

前言: 1.如果你的应用不是存储类型或者相机拍照类型,你就需要用 kit.CameraKit Api 实现相机拍照和相册选择照片功能,如果你不用这个的话,你使用 picker.PhotoViewPicker ,你就需要申请权限,那你提交应用审…

在linux上安装r-base和rpy2到conda环境

安装r-base(国外,可能需要很久>5min,或者需要多次尝试) conda install r-base 安装rpy2 pip install rpy2 在r-base下安装R包 在命令行输入R进入R语言环境,安装其他R包 R install.packages("mclust") 安装完成后退出R环…

《云原生安全攻防》-- K8s攻击案例:权限维持的攻击手法

在本节课程中,我们将一起深入了解K8s权限维持的攻击手法,通过研究这些攻击手法的技术细节,来更好地认识K8s权限维持所带来的安全风险。 在这个课程中,我们将学习以下内容: K8s权限维持:简单介绍K8s权限维持…

安装OpenResty

OpenResty OpenResty 是一个基于 Nginx的高性能 Web 平台,用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。具备下列特点: 具备Nginx的完整功能 基于Lua语言进行扩展,集成了大量精良的 Lua 库、第三方模块…