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

毕设分享 LSTM天气预测算法系统

0 简介今天学长向大家介绍一个机器视觉的毕设项目使用LSTM实现天气时间序列预测项目运行效果毕业设计 lstm天气预测 项目分享:见文末!1. 数据集介绍数据集包含14个不同的特征例如气温大气压力和湿度。从2003年开始每10分钟收集一次。为了提高效率本文仅使用2009年至2016年之间收集的数据。** 加载数据集**如上所示每10分钟记录一次观测值一个小时内有6个观测值一天有1446x24个观测值。给定一个特定的时间假设要预测未来6小时的温度。为了做出此预测选择使用5天的观察时间。因此创建一个包含最后7205x144个观测值的窗口以训练模型。下面的函数返回上述时间窗以供模型训练。参数history_size是过去信息的滑动窗口大小。target_size是模型需要学习预测的未来时间步也作为需要被预测的标签。下面使用数据的前300,000行当做训练数据集其余的作为验证数据集。总计约2100天的训练数据。2. 单变量单步输出预测首先使用一个特征温度训练模型并在使用该模型做预测。1.从数据集中提取温度uni_datadf[T (degC)]uni_data.indexdf[Date Time]uni_data.head()2.观察一下这些数据随时间变化的情况​uni_data.plot(subplotsTrue)2.1 数据标准化在训练神经网络之前缩放特征很重要。标准化是通过减去平均值并除以每个特征的标准偏差来进行缩放的一种常用方法。也可以使用tf.keras.utils.normalize将值缩放到[0,1]范围内。uni_datauni_data.values uni_train_meanuni_data[:TRAIN_SPLIT].mean()uni_train_stduni_data[:TRAIN_SPLIT].std()uni_data(uni_data-uni_train_mean)/uni_train_std2.2 样本划分现在为单变量模型创建数据。本部分为模型提供最后20个温度观测值预测下一个时间步长的温度。univariate_past_history20univariate_future_target0# shape 分别为(299980, 20, 1)(299980,)x_train_uni,y_train_uniunivariate_data(uni_data,0,TRAIN_SPLIT,univariate_past_history,univariate_future_target)x_val_uni,y_val_uniunivariate_data(uni_data,TRAIN_SPLIT,None,univariate_past_history,univariate_future_target)输出​​ Single window of past history​ [[-1.99766294]​ [-2.04281897]​ [-2.05439744]​ [-2.0312405 ]​ [-2.02660912]​ [-2.00113649]​ [-1.95134907]​ [-1.95134907]​ [-1.98492663]​ [-2.04513467]​ [-2.08334362]​ [-2.09723778]​ [-2.09376424]​ [-2.09144854]​ [-2.07176515]​ [-2.07176515]​ [-2.07639653]​ [-2.08913285]​ [-2.09260639]​ [-2.10418486]]​Target temperature to predict-2.10418485981008762.3 绘制曲线现在已经创建了数据看一个例子。提供给网络的信息以蓝色表示并且它必须预测红叉处的值。defcreate_time_steps(length):returnlist(range(-length,0))defshow_plot(plot_data,delta,title):labels[History,True Future,Model Prediction]marker[.-,rx,go]time_stepscreate_time_steps(plot_data[0].shape[0])# 横轴刻度ifdelta:futuredeltaelse:future0plt.title(title)fori,xinenumerate(plot_data):ifi:plt.plot(future,plot_data[i],marker[i],markersize10,labellabels[i])else:plt.plot(time_steps,plot_data[i].flatten(),marker[i],labellabels[i])plt.legend()plt.xlim([time_steps[0],(future5)*2])plt.xlabel(Time-Step)returnplt2.4 基准测试在继续训练模型之前先设置一个简单的基准。在给定输入点的情况下基线方法将查看所有历史记录并预测下一个点是最近20个观测值的平均值。defbaseline(history):returnnp.mean(history)show_plot([x_train_uni[0],y_train_uni[0],baseline(x_train_uni[0])],0,Baseline Prediction Example)2.5 LSTM 建模递归神经网络RNN是一种非常适合时间序列数据的神经网络。RNN分步处理时间序列维护内部状态以汇总所见信息。使用tf.data来随机整理批处理和缓存数据集。BATCH_SIZE256BUFFER_SIZE10000train_univariatetf.data.Dataset.from_tensor_slices((x_train_uni,y_train_uni))train_univariatetrain_univariate.cache().shuffle(BUFFER_SIZE).batch(BATCH_SIZE).repeat()val_univariatetf.data.Dataset.from_tensor_slices((x_val_uni,y_val_uni))val_univariateval_univariate.batch(BATCH_SIZE).repeat()批处理后的数据shape​simple_lstm_modeltf.keras.models.Sequential([tf.keras.layers.LSTM(8,input_shapex_train_uni.shape[-2:]),tf.keras.layers.Dense(1)])simple_lstm_model.compile(optimizeradam,lossmae)让我们现在训练模型。由于数据集的大小很大为了节省时间每个epoch将仅使用200个stepbatch_size256所以一个epoch使用 200* 256 个数据而不是像通常那样遍历完整的训练数据。EVALUATION_INTERVAL200EPOCHS10simple_lstm_model.fit(train_univariate,epochsEPOCHS,steps_per_epochEVALUATION_INTERVAL,validation_dataval_univariate,validation_steps50)预测由以上可知看起来比基线更好。既然已经了解了基础知识继续第二部分使用多元时间序列预测。3. 多变量多步输出预测原始数据集包含十四个特征。为简单起见本节仅考虑原始的十四个中的三个。使用的功能是气温大气压力和空气密度。要使用更多特征将其名称添加到此列表中即可。​​ features_considered [‘p (mbar)’, ‘T (degC)’, ‘rho (g/m**3)’]查看数据​​ features df[features_considered]​ features.index df[‘Date Time’]​ features.head()查看特征随时间的变化​​ features.plot(subplotsTrue)3.1 数据标准化​datasetfeatures.values data_meandataset[:TRAIN_SPLIT].mean(axis0)data_stddataset[:TRAIN_SPLIT].std(axis0)dataset(dataset-data_mean)/data_std3.2 单步预测模型单步预测任务中模型将根据提供的某些历史记录来学习预测未来的单个点。下面的函数实现了滑动窗口截取数据它根据给定的窗口宽度对过去的观测值进行采样。defmultivariate_data(dataset,target,start_index,end_index,history_size,target_size,step,single_stepFalse):data[]labels[]start_indexstart_indexhistory_sizeifend_indexisNone:end_indexlen(dataset)-target_sizeforiinrange(start_index,end_index):indicesrange(i-history_size,i,step)# step表示间隔采样步长6表示每个小时只使用一个采样值原数据集每10分钟采集一次data.append(dataset[indices])ifsingle_step:labels.append(target[itarget_size])else:labels.append(target[i:itarget_size])returnnp.array(data),np.array(labels)在本教程中输入给网络最近五天的数据即720个观测值。每隔一小时进行一次重采样因为60分钟内不会发生剧烈变化。因此120个重采样值表示最近五天的温度状况。对于单步预测模型数据点的标签是未来12小时的温度。所以使用之后72126个观测值作为标签。past_history720future_target72STEP6x_train_single,y_train_singlemultivariate_data(dataset,dataset[:,1],0,TRAIN_SPLIT,past_history,future_target,STEP,single_stepTrue)x_val_single,y_val_singlemultivariate_data(dataset,dataset[:,1],TRAIN_SPLIT,None,past_history,future_target,STEP,single_stepTrue)划分数据集​train_data_singletf.data.Dataset.from_tensor_slices((x_train_single,y_train_single))train_data_singletrain_data_single.cache().shuffle(BUFFER_SIZE).batch(BATCH_SIZE).repeat()val_data_singletf.data.Dataset.from_tensor_slices((x_val_single,y_val_single))val_data_singleval_data_single.batch(BATCH_SIZE).repeat()训练single_step_modeltf.keras.models.Sequential()single_step_model.add(tf.keras.layers.LSTM(32,input_shapex_train_single.shape[-2:]))single_step_model.add(tf.keras.layers.Dense(1))single_step_model.compile(optimizertf.keras.optimizers.RMSprop(),lossmae)single_step_historysingle_step_model.fit(train_data_single,epochsEPOCHS,steps_per_epochEVALUATION_INTERVAL,validation_dataval_data_single,validation_steps50)绘制损失曲线defplot_train_history(history,title):losshistory.history[loss]val_losshistory.history[val_loss]epochsrange(len(loss))plt.figure()plt.plot(epochs,loss,b,labelTraining loss)plt.plot(epochs,val_loss,r,labelValidation loss)plt.title(title)plt.legend()plt.show()测试该模型具有每小时过去5天采样的三个特征的历史记录120个数据点因为目标是预测温度所以该图仅显示过去的温度。预测是在未来一天进行的因此历史记录和预测之间存在差距。forx,yinval_data_single.take(3):plotshow_plot([x[0][:,1].numpy(),y[0].numpy(),single_step_model.predict(x)[0]],12,Single Step Prediction)plot.show()3.3 多步预测模型在多步骤预测模型中给定过去的采样值预测未来一系列的值。对于多步骤模型训练数据再次包括每小时采样的过去五天的记录。但是这里的模型需要学习预测接下来12小时的温度。由于每10分钟采样一次数据因此输出为72个预测值。future_target72x_train_multi,y_train_multimultivariate_data(dataset,dataset[:,1],0,TRAIN_SPLIT,past_history,future_target,STEP)x_val_multi,y_val_multimultivariate_data(dataset,dataset[:,1],TRAIN_SPLIT,None,past_history,future_target,STEP)划分数据集train_data_multitf.data.Dataset.from_tensor_slices((x_train_multi,y_train_multi))train_data_multitrain_data_multi.cache().shuffle(BUFFER_SIZE).batch(BATCH_SIZE).repeat()val_data_multitf.data.Dataset.from_tensor_slices((x_val_multi,y_val_multi))val_data_multival_data_multi.batch(BATCH_SIZE).repeat()绘制样本点数据defmulti_step_plot(history,true_future,prediction):plt.figure(figsize(12,6))num_increate_time_steps(len(history))num_outlen(true_future)plt.plot(num_in,np.array(history[:,1]),labelHistory)plt.plot(np.arange(num_out)/STEP,np.array(true_future),bo,labelTrue Future)ifprediction.any():plt.plot(np.arange(num_out)/STEP,np.array(prediction),ro,labelPredicted Future)plt.legend(locupper left)plt.show()forx,yintrain_data_multi.take(1):multi_step_plot(x[0],y[0],np.array([0]))由于此处的任务比先前的任务复杂一些因此该模型现在由两个LSTM层组成。最后由于需要预测之后12个小时的数据因此Dense层将输出为72。multi_step_modeltf.keras.models.Sequential()multi_step_model.add(tf.keras.layers.LSTM(32,return_sequencesTrue,input_shapex_train_multi.shape[-2:]))multi_step_model.add(tf.keras.layers.LSTM(16,activationrelu))multi_step_model.add(tf.keras.layers.Dense(72))multi_step_model.compile(optimizertf.keras.optimizers.RMSprop(clipvalue1.0),lossmae)训练multi_step_historymulti_step_model.fit(train_data_multi,epochsEPOCHS,steps_per_epochEVALUATION_INTERVAL,validation_dataval_data_multi,validation_steps50)训练日志​​ Epoch 1/10​ 200/200 [] - 73s 363ms/step - loss: 0.5750 - val_loss: 0.3137​ Epoch 2/10​ 200/200 [] - 73s 367ms/step - loss: 0.4429 - val_loss: 0.2951​ Epoch 3/10​ 200/200 [] - 79s 393ms/step - loss: 0.3839 - val_loss: 0.2793​ Epoch 4/10​ 200/200 [] - 85s 426ms/step - loss: 0.3062 - val_loss: 0.2240​ Epoch 5/10​ 200/200 [] - 98s 488ms/step - loss: 0.2162 - val_loss: 0.2058​ Epoch 6/10​ 200/200 [] - 103s 514ms/step - loss: 0.2185 - val_loss: 0.2108​ Epoch 7/10​ 200/200 [] - 107s 537ms/step - loss: 0.2061 - val_loss: 0.2055​ Epoch 8/10​ 200/200 [] - 108s 539ms/step - loss: 0.2016 - val_loss: 0.1971​ Epoch 9/10​ 200/200 [] - 92s 462ms/step - loss: 0.2047 - val_loss: 0.1969​ Epoch 10/10​ 200/200 [] - 98s 490ms/step - loss: 0.1937 - val_loss: 0.1833绘制损失曲线预测 项目分享:见文末!

相关文章:

毕设分享 LSTM天气预测算法系统

0 简介 今天学长向大家介绍一个机器视觉的毕设项目 使用LSTM实现天气时间序列预测 项目运行效果: 毕业设计 lstm天气预测🧿 项目分享:见文末! 1. 数据集介绍 数据集包含14个不同的特征,例如气温,大气压力和湿度。从2003年开始…...

ESP32+W5500嵌入式以太网Web服务器开发指南

1. 项目概述WebServer_ESP32_W5500 是一个专为 ESP32 平台设计的、面向工业级以太网应用的轻量级 Web 服务框架。它并非简单地将 WiFi 协议栈移植到有线网络,而是深度集成 LwIP 协议栈与 W5500 硬件 TCP/IP 加速器,构建出一套兼具高可靠性、低资源占用和…...

Rocky9+ Docker + 容器内Linux桌面环境 + Web远程

一、整体架构设计Rocky9(宿主机,无GUI) │ ├── Docker │ ├── 容器1:Rocky9 XFCE noVNC ToDesk │ ├── 容器2:Rocky9 XFCE noVNC ToDesk │ └── 容器3:Rocky9 XFCE noVNC ToDes…...

天龙八部GM工具:释放单机版游戏无限潜能的终极指南

天龙八部GM工具:释放单机版游戏无限潜能的终极指南 【免费下载链接】TlbbGmTool 某网络游戏的单机版本GM工具 项目地址: https://gitcode.com/gh_mirrors/tl/TlbbGmTool 你是否厌倦了在天龙八部单机版中反复刷怪升级?是否想要体验顶级装备和技能却…...

用tao-8k构建智能搜索:基于Xinference的文本向量化实战教程

用tao-8k构建智能搜索:基于Xinference的文本向量化实战教程 1. 理解tao-8k文本嵌入模型 1.1 什么是文本向量化 文本向量化是将自然语言文本转换为数值向量的过程。想象一下,就像把一本书的内容浓缩成一个独特的数字指纹,这个指纹能够捕捉书…...

情绪支持对话革命:AFlow 让大模型从一轮共情升级为长期治愈!

❝ 一句话概括,这篇论文把情绪支持对话当成一个“情绪动力学控制问题”,用 Affective Flow 约束每轮回复对下一轮情绪的影响,核心诉求是让安慰不是“好听”,而是“长期有效”。 第一阶段:识别核心概念 论文的Motivati…...

lychee-rerank-mm保姆级教程:如何用lychee debug模式调试自定义指令

lychee-rerank-mm保姆级教程:如何用lychee debug模式调试自定义指令 1. 快速了解lychee-rerank-mm lychee-rerank-mm是一个轻量级的多模态重排序工具,它能同时理解文本和图像内容,帮你把最相关的信息排到最前面。 想象一下这样的场景&…...

在线生成工具(画图类)

最近挖到一个超实用的宝藏AI网站,简直是做毕业设计、课程设计的神器!它可以免费绘制ER图、用例图、功能结构图、流程图等多种图表,操作简单不用复杂排版,一键就能快速生成。最厉害的是支持图表之间互相转化,还自带智能…...

Win11Debloat:系统深度优化实现Windows性能与隐私双重提升

Win11Debloat:系统深度优化实现Windows性能与隐私双重提升 【免费下载链接】Win11Debloat 一个简单的PowerShell脚本,用于从Windows中移除预装的无用软件,禁用遥测,从Windows搜索中移除Bing,以及执行各种其他更改以简化…...

如何通过Win11Debloat实现Windows系统终极优化:隐私保护与性能提升完整指南

如何通过Win11Debloat实现Windows系统终极优化:隐私保护与性能提升完整指南 【免费下载链接】Win11Debloat 一个简单的PowerShell脚本,用于从Windows中移除预装的无用软件,禁用遥测,从Windows搜索中移除Bing,以及执行各…...

EcomGPT-中英文-7B电商模型与YOLOv8联动:视频带货中的实时商品检测与描述生成

EcomGPT-中英文-7B电商模型与YOLOv8联动:视频带货中的实时商品检测与描述生成 最近在琢磨一个挺有意思的事儿:怎么让AI在直播或者短视频里,自己“看见”商品,然后“张嘴”就把卖点给讲出来。听起来有点像科幻片里的场景&#xff…...

高清高透窗纱网厂家推荐与高透窗纱网产品特点分析

高清高透窗纱网的市场前景与应用分析随着生活质量不断提高,消费者对家居环境的要求也逐步上升。高清高透窗纱网以其优异的透气性和防蚊虫性能,正日益受到欢迎。我们的市场研究表明,该产品不仅适合家庭使用,还是办公室及农业领域中…...

Realistic Vision V5.1虚拟摄影棚实操:多轮迭代生成——从草图到精修人像

Realistic Vision V5.1虚拟摄影棚实操:多轮迭代生成——从草图到精修人像 1. 项目概述 Realistic Vision V5.1虚拟摄影棚是一款基于Stable Diffusion 1.5生态顶级写实模型开发的本地化工具,专为摄影级人像生成而设计。这个工具解决了普通用户在尝试使用…...

做企业级数据库权限管理,工具应该怎么选?为什么 NineData 值得作为核心选型参考

一旦团队开始认真治理数据库权限,市面上的可选方案会一下子变多:数据管理平台、数据库 DevOps 平台、堡垒机、工单系统、甚至自建审批表单都可能被拿来比。但“谁都能做一点权限管理”和“谁更适配企业级数据库权限治理”不是一回事。如果你的目标是把申…...

AIGlasses OS Pro Java面试题解析:视觉相关算法实现

AIGlasses OS Pro Java面试题解析:视觉相关算法实现 最近有不少朋友在准备技术面试,特别是那些涉及智能硬件和视觉算法的岗位。我发现很多面试官喜欢问一些结合了实际产品场景的算法题,比如“如果让你为AIGlasses OS Pro这样的智能眼镜实现一…...

如何通过TMSpeech实现本地化语音交互:突破实时性与隐私性的技术方案

如何通过TMSpeech实现本地化语音交互:突破实时性与隐私性的技术方案 【免费下载链接】TMSpeech 腾讯会议摸鱼工具 项目地址: https://gitcode.com/gh_mirrors/tm/TMSpeech 引言:重新定义本地化语音处理的价值边界 在数字化浪潮席卷各行各业的今天…...

收藏!AI抢人大战杀疯了:应届博士年薪500万,程序员/小白必看上车指南

2026年的AI行业,最炸裂的新闻从来不是某款新模型发布,也不是某项技术突破,而是一句足以让所有从业者震惊的消息:应届博士生年薪500万 💰 没错,就是500万!而且这绝非个例,已经成为AI…...

Step3-VL-10B效果展示:同一张图不同温度参数下——确定性OCR vs 创意描述对比

Step3-VL-10B效果展示:同一张图不同温度参数下——确定性OCR vs 创意描述对比 1. 引言:温度参数如何影响你的视觉模型体验 如果你用过Step3-VL-10B这个视觉语言模型,可能会注意到一个叫“温度”的参数。这个参数看起来有点神秘,…...

YOLOv10全网首发:CVPR2026 MixerCSeg | DEGConv方向引导边缘门控,破解细长裂缝检测难题

DEGConv模块引入YOLO的核心优势及解决的问题 💡💡💡问题点:YOLO在裂缝检测中面临的核心问题 1)感受野局限:标准卷积核难以捕捉裂缝的长程连续性与不规则分支结构。 2)方向性特征缺失:裂缝常沿多方向延伸,普通卷积缺乏对方向敏感的特征提取能力。 3)纹理与边缘…...

Swin2SR部署避坑指南:OpenEuler系统兼容性全解析

Swin2SR部署避坑指南:OpenEuler系统兼容性全解析 1. 为什么选择Swin2SR进行图像超分辨率重建 在数字图像处理领域,分辨率提升一直是个棘手的问题。传统方法如双线性插值或Lanczos重采样,本质上只是通过数学算法"猜测"缺失像素&am…...

基于改进自适应蚁群算法的路径规划研究

(顶刊复现)基于改进自适应蚁群算法MAACO的机器人,无人船,无人机,无人车,自动驾驶的路径规划算法,MATLAB编写,可以修改地图信息 输出如下图所示,只有一条轨迹的那张。 包括源代码和参考文献&…...

鸡尾酒排序 vs 冒泡排序:哪个更适合你的项目?(附性能对比测试)

鸡尾酒排序与冒泡排序的深度性能对比与实战选型指南 排序算法是每个开发者工具箱中的基础工具,但在实际项目中如何选择合适的排序算法却常常让人纠结。本文将深入分析两种经典排序算法——鸡尾酒排序和冒泡排序的核心差异,通过实测数据揭示它们的性能特点…...

JrkG2 Arduino库:嵌入式电机控制器的标准化通信接口

1. JrkG2 库概述:面向嵌入式电机控制的标准化通信接口JrkG2 是 Pololu 公司为其 Jrk G2 系列 USB 电机控制器(带反馈)配套开发的 Arduino 兼容库,核心目标是为嵌入式系统提供稳定、可复用、跨平台的底层通信抽象层。该库并非简单封…...

Windows服务器安全自查:3种隐藏账号检测与清理实战(附注册表操作截图)

Windows服务器安全自查:3种隐藏账号检测与清理实战指南 在服务器运维的日常工作中,安全巡检往往是最容易被忽视却又至关重要的环节。想象一下,当你负责的Windows服务器突然出现异常登录行为,或者关键数据被不明身份者访问&#xf…...

Selenium EdgeOptions参数问题终极解决指南,Android实现RecyclerView粘性头部效果,模拟微信账单列表的月份标题平移。

解决 Selenium EdgeOptions addArguments 不受支持问题 当使用 Selenium WebDriver 进行 Edge 浏览器自动化测试时,可能会遇到 EdgeOptions.addArguments 方法不受支持的问题。这通常是由于版本不兼容或配置错误导致。以下是解决此问题的几种方法: 检查 …...

ClawdBot进阶技巧:配置文件修改,自定义模型接入指南

ClawdBot进阶技巧:配置文件修改,自定义模型接入指南 1. 理解ClawdBot的架构与模型管理 ClawdBot是一个基于vLLM后端的个人AI助手,它的核心优势在于允许用户完全自定义模型接入。与大多数预封装AI应用不同,ClawdBot将模型管理与应…...

【稀缺首发】工信部《工业边缘智能网关白皮书》未公开的Python实现范式:动态协议插件热加载、设备影子同步、断网续传原子性保障(含Gitee星标开源库链接)

第一章:工业物联网 Python 数据采集网关开发在工业物联网(IIoT)场景中,数据采集网关是连接现场设备(如PLC、传感器、RTU)与云平台的关键枢纽。Python 凭借其丰富的生态库(如 pyModbus、pymodbus…...

09 - 《Genesis资料处理》- 高效文件导出技巧与实战

1. Genesis文件导出基础操作指南 第一次接触Genesis软件的文件导出功能时,我也被那一堆参数选项搞得头晕眼花。经过几个项目的实战,我发现只要掌握几个关键步骤,就能轻松搞定各种导出需求。咱们先从最基础的电路层导出说起。 打开Genesis后&a…...

智能简历筛选系统:如何用 AI 技术让招聘效率快速提升?

在 2026 年的招聘市场中,一个中等规模企业发布一个热门岗位,72 小时内收到 500 份简历已是常态。HR 团队面对海量简历,逐份查看、手动比对、反复沟通——这套传统流程正在吞噬大量本该用于人才评估和战略决策的宝贵时间。智能简历筛选系统的出…...

Dify + LLM网关 + 向量库三级链路超时 cascading failure?(全链路Trace追踪图谱+OpenTelemetry注入实操)

第一章:Dify Multi-Agent 协同工作流 性能调优指南Dify 的 Multi-Agent 协同工作流在复杂业务场景中展现出强大扩展性,但默认配置下易因 Agent 间高频通信、重复推理与上下文冗余导致延迟上升与资源争用。性能调优需聚焦于消息路由效率、LLM 调用粒度控制…...