基于Python的人工智能应用案例系列(17):LSTM正弦波预测

概述

        本案例展示了如何使用LSTM(长短期记忆网络)来预测正弦波序列的未来值。由于正弦波具有周期性,传统的神经网络难以准确预测其上升或下降趋势,而LSTM则能够通过学习值的模式来进行更精准的预测。本案例将训练LSTM模型并预测正弦波的后续值,同时展示了如何使用该模型进行未来预测。

数据生成

        我们首先生成800个正弦波数据点,并定义每40个点为一个完整周期,因此有20个完整的周期。数据集的前760个点用于训练,最后40个点作为测试集。

# 创建并绘制正弦波数据点
t = torch.linspace(0,799,steps=800)
y = torch.sin(t*2*3.1416/40)plt.figure(figsize=(12,4))
plt.xlim(-10,801)
plt.grid(True)
plt.plot(y.numpy());
构建LSTM模型

        LSTM模型由一个LSTM层和一个全连接层组成。LSTM层的输入大小为1,隐藏层大小为50,输出大小为1。每次训练后,我们会使用最后一个窗口的训练数据来预测未来值。

class LSTM(nn.Module):def __init__(self, input_size=1, hidden_size=50, out_size=1):super().__init__()self.hidden_size = hidden_sizeself.lstm = nn.LSTM(input_size, hidden_size)self.linear = nn.Linear(hidden_size, out_size)self.hidden = (torch.zeros(1, 1, hidden_size), torch.zeros(1, 1, hidden_size))def forward(self, seq):lstm_out, self.hidden = self.lstm(seq.view(len(seq), 1, -1), self.hidden)pred = self.linear(lstm_out.view(len(seq), -1))return pred[-1]
模型训练与预测

        训练LSTM模型时,首先将序列分成重叠的窗口,每个窗口包含40个点,模型根据这些窗口数据进行预测。训练过程分为10个周期,并在每个周期后使用训练数据生成的最后一个窗口预测未来40个点。

epochs = 10
future = 40for i in range(epochs):for seq, y_train in train_data:optimizer.zero_grad()model.hidden = (torch.zeros(1, 1, model.hidden_size), torch.zeros(1, 1, model.hidden_size))y_pred = model(seq)loss = criterion(y_pred, y_train)loss.backward()optimizer.step()preds = train_set[-window_size:].tolist()for f in range(future):seq = torch.FloatTensor(preds[-window_size:])with torch.no_grad():model.hidden = (torch.zeros(1, 1, model.hidden_size), torch.zeros(1, 1, model.hidden_size))preds.append(model(seq).item())loss = criterion(torch.tensor(preds[-window_size:]), y[760:])plt.figure(figsize=(12,4))plt.xlim(700,801)plt.grid(True)plt.plot(y.numpy())plt.plot(np.arange(760,800), torch.tensor(preds[window_size:]))plt.show()
预测未来值

        在对整个数据集进行训练后,我们可以预测未来40个点。训练后的LSTM模型可以通过最后一个训练窗口生成的序列,逐步预测未来的正弦波值。

preds = y[-window_size:].tolist()for i in range(future):seq = torch.FloatTensor(preds[-window_size:])with torch.no_grad():model.hidden = (torch.zeros(1, 1, model.hidden_size), torch.zeros(1, 1, model.hidden_size))preds.append(model(seq).item())plt.figure(figsize=(12,4))
plt.xlim(-10,841)
plt.grid(True)
plt.plot(y.numpy())
plt.plot(range(800,800+future), preds[window_size:])
plt.show()
结语

        在本案例中,我们利用LSTM模型成功预测了正弦波的未来值。通过训练LSTM网络识别正弦波的周期性特征,模型不仅能够精确预测下一时刻的值,还可以延展预测多个未来值,展示了LSTM在处理时间序列数据方面的强大能力。相比于传统的神经网络,LSTM的长短期记忆结构使其能够学习数据中的长期依赖关系,对于具有周期性和趋势性的数据特别有效。

        LSTM不仅适用于正弦波等简单周期信号,在更复杂的时间序列数据中,如股票市场、能源消耗等具有时序性的实际应用中,LSTM同样能够发挥重要作用。通过本案例的学习,读者可以更好地理解LSTM的应用原理,并将其拓展到更多实际场景的预测任务中。

如果你觉得这篇博文对你有帮助,请点赞、收藏、关注我,并且可以打赏支持我!

欢迎关注我的后续博文,我将分享更多关于人工智能、自然语言处理和计算机视觉的精彩内容。

谢谢大家的支持!

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

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

相关文章

锂电池SOC估计 | Matlab基于BP神经网络的锂电池SOC估计

锂电池SOC估计 | Matlab基于BP神经网络的锂电池SOC估计 目录 锂电池SOC估计 | Matlab基于BP神经网络的锂电池SOC估计预测效果基本描述程序设计参考资料 预测效果 基本描述 锂电池SOC估计 | Matlab基于BP神经网络的锂电池SOC估计 运行环境Matlab2023b及以上。 要实现基于BP神…

AI驱动TDSQL-C Serverless 数据库技术实战营-与AI的碰撞

目录 一、简介 二、实验介绍 三、结果展示 四、实操指导 4.1 系统设计 4.2 环境搭建(手把手教程) 4.3 应用构建 4.4 效果展示 4.5 踩坑避雷总结 五、清理资源 5.1 删除TDSQL-C Serverless 5.2 删除 HAI 算力 六、实验总结归纳 一、简介 本…

基于RPA+BERT的文档辅助“悦读”系统 | OPENAIGC开发者大赛高校组AI创作力奖

在第二届拯救者杯OPENAIGC开发者大赛中,涌现出一批技术突出、创意卓越的作品。为了让这些优秀项目被更多人看到,我们特意开设了优秀作品报道专栏,旨在展示其独特之处和开发者的精彩故事。 无论您是技术专家还是爱好者,希望能带给…

利用【通义灵码】代码补全增强使用实践

通义灵码提供了企业代码补全增强的能力,在开发者使用通义灵码 IDE 插件的行间代码生成时,可以结合企业上传的代码库作为上下文进行行间代码补全,使代码补全更加贴合企业代码规范、业务特点。本文将分享如何构建高质量的企业代码库&#xff0c…

【MySQL】-- 数据库基础

文章目录 1. 数据库简介1.1 什么是数据库1.2 什么是关系型数据库 2. 客户端与服务器的通讯方式2.1 CS架构 3. MySQL架构 1. 数据库简介 1.1 什么是数据库 什么是数据库? 组织和保存数据的应用程序。数据库和之前学的数据结构有什么关系? 数据结构是组织数…

九月秋招总结

九月最后一天了,投了刚好一个月,做个九月总结吧。 OC: 陕飞,月之暗面,经纬恒润 百度:9-6一面,9-14二面,9-18三面,offer评估中 美团:9-20一面,9-25二面&#…

如何用ChatGPT制作一款手机游戏应用

有没有想过自己做一款手机游戏,并生成apk手机应用呢?有了人工智能,这一切就成为可能。今天,我们就使用ChatGPT来创建一个简单的井字棋游戏(Tic-Tac-Toe),其实这个过程非常轻松且高效。 通过Cha…

ubuntu安装mysql 8,mysql密码的修改

目录 1.安装mysql 82.查看当前状态3.手动给数据库设置密码mysql5mysql8 4.直接把数据库验证密码的功能关闭掉 1.安装mysql 8 apt install mysql-server-8.0敲 Y 按回车 table 选ok 2.查看当前状态 service mysql status显示active(running)证明安装成…

rtsp 协议推流接收(tcp udp)

使用两种方式进行推流,udp 和tcp,必须先理解udp 和tcp推流方式的不同 udp 推流 ./ffmpeg -re -i d:/test.mp4 -c copy -av -f rtsp rtsp://192.168.0.24/live/1 OPTIONS rtsp://192.168.0.24:554/live/1 RTSP/1.0 CSeq: 1 User-Agent: Lavf60.16.100R…

OJ在线评测系统 前端开发整合开源组件 Monaco Editor 并且开发创建题目页面

前端开发整合Monaco Editor 微软官方的 npm install monaco-editor 下载兼容版本 npm install monaco-editorlatest 代码编辑器 先把编辑器本身安装好monaco-editor 安装插件 npm install monaco-editor-webpack-plugin 这个插件的作用是把我们的代码编译器和webpack打包在…

Amazon EC2, S3 Bucket, Yaml file, Stack

Amazon EC2, S3 Bucket, Yaml file, Stack YAML 文件: YAML是一种人类可读的数据序列化格式,常用于配置文件。它比JSON或XML更简洁,常用于定义复杂的数据结构。 YAML文件是一种格式,用于编写配置数据。它易于阅读,常…

联想天逸100使用笔记

文章目录 配置整理过程锁定功能键怎么弄? 翻出好多年不用的老电脑,饱受折磨,做个笔记。 之前不是我在使用,本身配置就不高,还被装了各种流氓软件,卡的几乎动不了。 配置 老电脑配置不行: i3 5005U 4G内存…

大数据实时数仓Hologres(四):基于Flink+Hologres搭建实时数仓

文章目录 基于FlinkHologres搭建实时数仓 一、使用示例 二、方案架构 1、架构优势 2、Hologres核心优势 三、实践场景 四、项目准备 1、创建阿里云账号AccessKey 2、准备MySQL数据源 五、构建实时数仓​编辑 1、管理元数据 2、构建ODS层 2.1、创建CDAS同步作业OD…

【算法】链表:21.合并两个有序链表(easy)

系列专栏 《分治》 《模拟》 《Linux》 目录 1、题目链接 2、题目介绍 3、解法(双指针) 4、代码 1、题目链接 21. 合并两个有序链表 - 力扣(LeetCode) 2、题目介绍 3、解法(双指针) 推荐一篇题解…

华为-IPv6与IPv4网络互通的6to4自动隧道配置实验

IPv4向IPv6的过渡不是一次性的,而是逐步地分层次地。在过渡时期,为了保证IPv4和IPv6能够共存、互通,人们发明了一些IPv4/IPv6的互通技术。 本实验以6to4技术为例,阐述如何配置IPv6过渡技术。 配置参考 R1 # sysname R1 # ipv6# interface GigabitEthernet0/0/1ip address 200…

匈牙利算法模板

P3386 【模板】二分图最大匹配 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 思路:最模板的一集.还未匹配则匹配&#xff0c;否则之前一个给现在这个让位置. int n,m,e; vector<int> vct[505]; int match[505]; bool vis[505]; bool mark[505][505]; bool dfs(int s)…

[大语言模型-论文精读] 大语言模型是单样本URL分类器和解释器

[大语言模型-论文精读] 大语言模型是单样本URL分类器和解释器 目录 文章目录 [大语言模型-论文精读] 大语言模型是单样本URL分类器和解释器目录1. 论文信息2. 摘要3. 引言4. 相关工作A. 网络钓鱼URL检测B. 使用LLMs进行单样本分类 C. LLMs作为分类器的可解释性 5. 论文所提框架…

十四、磁盘的管理

1.磁盘初始化 Step1:进行低级格式化(物理格式化)&#xff0c;将磁盘的各个磁道划分为扇区。一个扇区通常可分为头、数据区域(如512B大小)、尾 三个部分组成。管理扇区所需要的各种数据结构一般存放在头、尾两个部分&#xff0c;包括扇区校验码(如奇偶校验、CRC循环几余校验码等…

Python-o365:提升办公效率的利器

&#x1f680; 引言 在数字化办公日益普及的今天&#xff0c;Python以其强大的功能和灵活性&#xff0c;在自动化办公和数据处理方面发挥着重要作用。作为最常用的办公工具之一&#xff0c;Microsoft Office套件如何通过编程提升使用效率&#xff0c;一直是开发者们关注的热点…

如何使用ChatGPT API及Bito插件

目录 本章整体说明Open AI常用API接口工具&#xff1a;Postman调用API接口演示Java和Python调用Open AI API接口基于ChatGPT-4的代码生成插件Bito使用小练习&#xff1a;3分钟搭建一个自己专属的AI聊天网站 2-1 本章整体说明 本章将详细介绍如何使用ChatGPT API以及Bito插件&…