人间最美的四月天已经过去,
朋友圈专属“五月,请对我好一点”,
然而,晴有时风阴有时雨的五月,
对!就是那个“五月天孩子脸,说变就变”的五月
孩子脸说的五月还是六月来着?
算了,反正大家自求多福吧!
据观察,
“明天穿什么”的哲学难度已经远超越了“明天吃什么”,
成为脑细胞的新晋“杀手”!
要解决这个问题,
一般需要两个层面的思考:
款式和天气
款式?时下“潮人”,比比皆是;
但知晓天气的智者难寻,凤毛麟角。
(天气 APP 不能算啊)
要是再能精准预测未来一秒、一小时、一天的天气,
那简直是凤毛麟角里的独角兽啊!
随之而来就是
升职加薪,当上总经理,出任 CEO,
迎娶白富美,走上人生巅峰,
想想还有点小激动
试问各位技术咖,
谁不想拥有这样一个 buff?
别着急,
听小姐姐小哥哥慢慢和你说。
好,那么我们的目标就明确了:
自行开发一个能预测天气的系统
适用人群:熟悉物联网和机器学习的开发者
应用场景:利用物联网和机器学习算法预测气温
掌握难度:★★★★☆
本期专家
朱人杰
云计算架构师
Azure 资深架构师,为企业客户,以及合作伙伴提供智能云上解决方案。主要关注机器学习,物联网,企业数字化转型方案等。
想化身为神机妙算的诸葛亮吗?我门今天通过结合目前最火的两个议题:物联网与机器学习,在 Azure 上轻松实现如何预测温度,让你分分钟化身为可预测东风的诸葛亮!
先说一下本次动手的内容,首先我们需要一个传感器把温度,湿度等信息采集下来;之后,将数据上传到云上,进行流式的处理,然后把处理完的数据收集沉淀下来;拿到数据之后,根据机器学习的方法,挑选一个合适的算法来做简单的预测气温。好了,整体的思路就是这么简单,接下来我们来看看怎么实现。
首先你需要有一个传感器,并且能够上传到 Azure 云端。这次我们选择微软提供的 MXChip DevKit 物联网开发板,好处是能够无缝连接到 Azure 的 IoT Hub。
MXChip DevKit 物联网开发板,简单来说是一种包含了各种传感器(例如我们本次需要的温度传感器)的电路板,可用于物联网技术的学习和试验。如果你也有志于物联网开发,希望将其应用在自己的工作中,或者纯粹出于个人兴趣想要学习相关技能,那么这类开发板也是必不可少的。
这电路板长这样:
*MXChip DevKit 物联网开发板购买地址以及文中提到的相关补丁、安装包等下载链接,可点击阅读原文到原始文章中获取哦~
好了,开始我们的表演。
一、在 Azure 上开通一个 IoT Hub
现在在物联网领域有很多开源的 IoT 框架,比如 OpenIoT 之类的,其本质是在云上建立一个处理消息的网关,可以兼容 MQTT,AMQT 等协议。当然我们可以选择在云上也用一个开源项目搭载在虚机之上,不过其实 Azure 已经为你准备好了一个 IoT Hub,省去了搭建管理的烦恼,而且也不用考虑单点和高可用的问题。那么既然这么好用,我们就建一个,来快速实现我们的想法吧。
1. 让我们来新建一个 IoT Hub,因为我们这次是一个小批量的测试,所以我们选择免费的就行(是不是觉得 Azure 很厚道,还可以给你免费测试)。
2. 在刚才建立的这个 IoT Hub 下我们来新建一个 IoT Device,其实对应的就是我们那块开发板。
3. 打开刚刚建立的这个 IoT Device,可以看到里面有一个连接字符串,记录下来这个内容,随后需要用这个连接串在 MXChip 这块开发板上做配对。
4. 创建一个使用者组,为之后我们创建的流分析作业而做准备。
5. 创建一个访问策略,为了方便测试我门这里选择赋予所有的权限。当然在正式生产的时候你可以选择你想要的权限。
二、配置 MXChip DevKit 开发板
1. 首先需要下载最新的 DevKit 安装包,按照文档手动或者自动安装需要的软件,包括 VS Code、Arduino 等软件。
2. 然后需要下载针对中国 Azure 环境开发的补丁,并按照说明文档打上补丁。
3. 打开 VS Code,选择已经有的 example 的项目,GetStarted。
4. 把 DevKit 开发板连接到电脑的 USB 接口。按 Ctrl+P, 键入“ task device-upload”,按照提示烧入新的 ROM。重启后,再按 Ctrl+P, 键入”task config-wifi”,按照提示开发板所处环境的 WiFi 名字以及密码。
5. 按 Ctrl+P, 键入“task configure-device-connetion”, 按照提示,选择刚刚建立的 IoT Hub 的名字,并输入之前记录下来的链接串和密码。
6. 重启板子后,开发板显示连接到 IoT Hub,开始上传传感器的数据。并且看到 IoT Hub 页面不断有新的消息输入。
三、配置 Stream Analytics
1. 首先创建一个流分析作业,作用就是用来接收 IoT Hub 的数据,并且实时分类沉淀需要的数据到对象存储上。
2. 配置输入,用 IoT Hub 接收数据。填写之前创建的 IoT Hub 的信息,并且在使用者组填入刚刚创建的消费组,以及之前创建的策略信息。
3. 配置输出,把实时处理的数据最后存储到对象存储上,之后我们将用 TensorFlow 来处理。填入已有的存储账号,以及对应的容器(还没有的话,可以先创建一个),同时输出文件选择 CSV,以后用 TF 处理起来方便一些。
4. 现在我们来配置一下实时计算需要得到的结果,其实你可以通过 Stream 快速的运用 SQL 语句去选择你想要的数据,这次我们不做特殊的加工,一口气把所有的数据都记录下来。这样符合大数据一口气全要的原则。
5. 我们把输入,输出,以及实时计算的部分都配置好了,就可以回去开启这个任务啦。
6. 当任务进行一段时间后,其实开发板已经通过 IoT Hub 和 Steam Analytics 上传了很多数据了。我们来到存储账户,把这个 CSV 下载下来,看看是否数据都已经存在在里面了。
四、使用 TensorFlow 进行气温预测
1. 首先你需要一台装了 python,Jupyter Notebook,TensorFlow 的机器,你可以选在用微软的 Data Science Virtual Machine, 或者计算量小的话直接就用个人电脑也行。
2. 本次气温预测主要就用了 RNN(Recurrent Neural Network), 主要的作用就是做一个时序数据的预测。那么对于气温的预测为什么要选择 RNN 呢?主要的原因在于,气温的变化是基于时间点的。从短时间来说你可以预测每个小时的气温,从长时间来说你可以预测基于天的预测,更长时间是可以根据季节变换。其实古人归纳的节气就是源自于太阳和地球位置的变换,比如什么时候是大寒,什么时候是春分,这些都可以从以前观察的气温结果来预测,本质上也是利用人脑的时序深度学习计算达成古人自我学习的结果。那么回到这次使用的 RNN,我们的时序输入是之前通过 MXChip 板子每过 5 秒收集下来的数据形成的一组时序结合温度的数据,随后我们把这组数据输入到 RNN 网络,进行模型训练,输出的将是下一个 5 秒的一组时序结合温度的数据。具体看一下模型的图例。
3. 现在我们打开 Jupyter Notebook,我们从之前得到的温度 CSV 报表来读取数据,利用 Pandas 库将其读出,以便之后可直观地展现数据。其中 Temp 这一列将是我们比较感兴趣的一列。
4. 由于我本人比较喜欢用 numpy 的方式,所以我通过 genfromtxt 库把 CSV 转换成了 numpy 的矩阵。
5. 接下来我门通过图表直观地展现这些数据的分布。对于机器学习的过程当中,这一步其实是比较重要的,因为通过图表的展现能让你更快地对数据质量与属性做出判断,同时也有助于你选择什么样的训练方式、模型、以及对后台的参数调优。从图上大家可以看到这段时间的温度变化并不是很大,主要集中在了 10 几度的范围内。
6. 我们对数据进行操作,取得我们想要的温度那一列。
7. 接下来我们将请出机器学习框架的大神 TensorFlow(当然你也可以用另一座大神 CNTK,也是相当的好用)。我们会用 20 个温度值作为一次学习的数据输入,输入和输出都是使用一个温度数值,神经元这次定位 100 个。
8. 接下来定义 Loss 函数,本次项目里应该就是预测的输出和正式温度的差值,学习的步长定义为 0.001。
9. 好了,我们来开始一个 TensorFlow 的训练吧,因为我们大概有 5000 多个温度数据,那么我就定义迭代次数是 5000 次,每次取 20 个温度数据,每次训练完数据集会往前迭代一个时间序列。每 100 次迭代,我们输出一次 MSE 的结果,最后的训练结果还是比较令人满意的。最后我们把训练好的模型保存下来。
………………………………..
10. 有了训练好的模型之后,我们就来验证一下预测的效果。首先我们从 CSV 里拿出 20 个一组的温度数据,输入到模型中。
11. 我们得到了预测数据后,把数据图形化后来对比一下原始数据和预测数据,发现预测基本都比较准确,并且我们得到了一个未来的数据,就是第 21 个数据。
12. 读出最后的一个温度数值是 11.36, 对比 CSV 上面第 21 个数值是 11.3, 预测看起来还是挺准确哒。至此一个简单的温度预测就完成啦。
~~~~~~『 小结 』~~~~~
这次小小的实验,其实是利用了云的便利性,可以快速的使用 PaaS 化的 IoT,流计算,对象存储平台。并且有必要的话可以直接使用云计算资源里的机器学习镜像,实现快速分布式的计算。关于这个温度的预测,本次其实是对每 5 秒一次的序列进行预测,预测是一个比较短的未来。当然你也可以选取跨度比较长的温度序列,比如说小时,那么就可以预测下一小时,甚至是明天的气温了。
当然 RNN 的时序预测可以用到更广泛的应用场景里,比如股票价格的预测,当然你的输入维度会增加,会包括股票的实时价格,交易量等。从文化艺术上看,你可以输入几首邓丽君的曲子,也许 RNN 可以给你输出一首新的听起来就像是邓丽君在唱的曲子。这里我就不一一赘述啦,祝愿大家好好利用云资源,发现有意思的应用场景。
还想进一步了解:
Azure 在物联网以及人工智能等新兴领域
有什么新奇有趣的应用?
欢迎戳【阅读原文】,
领略前瞻技术的魅力。
最后的最后,希望每一个知冷暖的天,都是好天儿!
在此送上一首:《五月天》~
专家来“搞”
这是一档基于近期热门云技术,邀请 IT 和开发领域的资深专家,来给大家分享不同领域的云技术操作环境及开发过程中经常遇到的痛点和解决方案,与实战紧密相连,帮助大家学习知识点,顺利解决工作中可能遇到的问题的栏目。另外还有专家们悉心原创的各种基于微软智能云技术的黑科技,不要错过哦!
专家招募计划:当然,如果你有内容、有实力,也欢迎来自荐投稿,说不定我们的下一位专家就是你哦!