Py学习  »  机器学习算法

深度学习的时间和空间预测 | 实用贴

happy科研 • 1 年前 • 739 次点击  

机器学习和深度学习中,最关注的是气候研究方面的预测,之前学习过了时间序列预测的内容,基本上搞清楚了数据的输入和输出,但是那些都仅仅是一维度的时间序列预测,并没有涉及空间尺度上的预测。深度学习作为机器学习范畴下的一个分支,在气候变化预测研究方面具有巨大的潜力。相比于物理化学传输模型那些复杂的公式,深度学习不用从幼儿园开始,直接从高中开始学习,不需要前期的物理化学基础就可能获得较好的结果。其实除了一维的时间序列预测,我们更加关注的是时空预测问题,具体到真实的地理环境中来,比如预测极端高温天气,特别是最近几天,中国北方地区持续的高温预测。又比如空气污染的时空预测,如果还是单维的预测,那么就会忽视掉地理事物演化的空间异质性。So,我们需要研究时空预测,这对于现实的社会具有重要的意义。


现在可以用convLSTM模型来做时空预测,关于这个模型的提出详细内容可以去下载原文看,现在的引用都5k多了【https://arxiv.org/abs/1506.04214v1】,可见其重要性,所以要把做出具有影响力的研究作为目标,否则有的做出来一个人都不读那就失去了研究的意义了。


这个模型原本设计用来做雷达降水预测的,但是其运用很广泛,涉及时空预测问题的都可以用来尝试,比如下面这个用来预测北美和欧洲的空气污染物的时空分布的。



这个模型从名字上convLSTM就可以知道是卷积和长短期记忆网络联合的,卷积复杂空间特征的提取,长短期用于时间序列处理。


关于这个convLSTM模型的教程目前比较少,但是仍然可以从网上或文献中学习到一些东西以帮助我们实现它。这个模型和LSTM的区别可以在网上搜索到,可以从公式上看看那些位置被换成了卷积操作,虽然看了公式也不一定额能写出来,但是看了之后肯定会加深对模型的理解的。


首先考虑到的当然是keras官网的例子了,convLSTM2D 这个class是实现的关键,官网提供的例子是关于视频帧预测的,每一帧就是一张图片,有宽度和高度,有多少分辨率。那么放到我们地学研究中来,很多数据也是这个样子的,比如SST是空间场吧,有多少个经度,有多少个维度,有多少个时间等等

内容都具有相同的特征。所以可以先从视频帧预测中获得对convLSTM模型的实现认知,包括数据是怎么预处理的。



convLSTM模型要求的输入数据必须是5D的tensor(张量)

So,实现这个模型,现在面临的问题就是如何将手里的数据重塑为5维的。这个模型当然还可以配置成时间序列预测,但是这里不关心。



手里的数据就是image,有tiff格式的,png格式的,或者netCDF这样的网格数据。


模型的构造很容易,直接从keras call出来就行了,但是如果input shape不正确的话是绝对不行的。下图是我昨天构造的一个简单的,模型看起来不是很复杂,就三个学习层,其他的卷积核啊,过滤器啊那些的加起来最后超过400万个参数,由于我的电脑的显存不够,所有用的是CPU来测试训练,训练20个epoch花了两个小时,所以要真的做起来的话还是考虑用GPU来吧、一般较大的卷积核能偶捕捉到复杂的特征,换到我们人类来说,眼关八方你可以发现更多东西,眼界太小的话是发现不了复杂的东西的。



由于GPU显存不够,所以这是用CPU来测试的,虽然模型简单,但是最大的成果在于成功测试了这个模型,从数据塑造到最后没有报错这个过程中,这个测试是有价值的



不过这里看到了一篇文献可以帮助我们更好地理解和运用这个模型。这是一篇关于SST预测的,如果想阅读的话可以看题目去下载来看看,其中对于模型和数据的准备部分还是说的比较详细的,我准备多读几遍。


在这篇文献中,数据集介绍部分,使用的是OISST数据集,每天的,就像netCDF数据打开后可以看到有很多的时间层。共计有1.3万张左右的SST图像,我猜测是把nc文件的每一个时间层的数据都写出去了,分辨率是22 by 16这个就是在输入convLSTM模型中的宽度和高度了(samples,time_steps,width,height,channels),channels的话就是特征,这篇文章是的特征就一个,不像其他的是这样的:考虑了环流因素啊,交通灯因素的来预测,多个预测一个。

实现这个模型,最大的难点和关键点还是在数据集的塑造上,以及预测问题的设计上,更多详细的可以去下载这篇文献来阅读一下。


OK,以上仅作学习记录,个人理解,更多内容请搜索相关的文献进行阅读,有的文献多读几遍就会有新的认识,然后再通过代码进行简单数据的测试,如果测试成功了,那么迁移运用起来就没有多大困难了,不建议一来就去看那些复杂的公式,一是可能看不懂,我相信我们大多数人都是很普通的,二是看了也不一定能够用代码实现,但是我们最大的想法是实现它,比如要预测这几天的高温天气,你如果觉得看公式可以解决问题的话那就去看。从代码中学习,那里不会点那里哈哈,最关键的就两个问题,一是如何重塑数据,二是如何涉及预测问题。



往 期 推 荐
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/138403
 
739 次点击