当前位置: 首页 > news >正文

基于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.lryc.cn/news/451256.html

相关文章:

  • Python空间地表联动贝叶斯地震风险计算模型
  • 虚幻引擎-设置UI自适应屏幕大小
  • C++继承的三种方式[ACCESS]
  • idea 同一个项目不同模块如何设置不同的jdk版本
  • 1-仙灵之谜(区块链游戏详情介绍)
  • 基于51单片机的温湿度上下限监测预警proteus仿真
  • 考核总结.
  • 后端学习路线
  • 车辆重识别(注意力 U-Net:学习在哪些区域寻找胰腺)论文阅读2024/10/01
  • 【区别】git restore --staged <文件> 和 git reset HEAD <文件> 都可以用于取消已暂存的文件
  • void类型
  • 10/1 力扣 49.字母异位词分组
  • ✨机器学习笔记(六)—— ReLU、多分类问题、Softmax、Adam、反向传播
  • Xshell7下载及服务器连接
  • SQL Server—的数据类型
  • WaterCloud:一套基于.NET 8.0 + LayUI的快速开发框架,完全开源免费!
  • 数据结构-LRU缓存(C语言实现)
  • javacv FFmpegFrameGrabber 阻塞重连解决方法汇总
  • 自然语言处理问答系统技术
  • 交换机和路由器的区别
  • JavaScript Array(数组)
  • 示例说明:elasticsearch实战应用
  • 暴力匹配算法和 KMP 算法的优缺点分别是什么?
  • web笔记
  • 【网络安全】-访问控制-burp(1~6)
  • iOS 项目中的多主题颜色设计与实现
  • Android Camera2 与 Camera API技术探究和RAW数据采集
  • [python][pipenv]pipenv的使用
  • SpringSession微服务
  • 强化学习:通过试错学习最优策略---示例:使用Q-Learning解决迷宫问题