BP人工神经网络寻找相似路径历史台风

2022-12-27 11:32何迪陆德辉韦翠刘海华甘婷
广东气象 2022年6期
关键词:人工神经网络台风向量

何迪,陆德辉,韦翠,刘海华,甘婷

(清远市气象局,广东 清远 511510)

清远市的清城佛冈是广东省3大暴雨中心之一[1],每年受台风、暴雨及其引发的山洪、泥石流地质灾害尤为严重[2-3]。台风路径和台风直接影响地区和范围有很大关联[4]。各业务部门虽有很多台风查询系统,但绝大多数系统基本上只能查看台风路径、强度、影响范围、云图、雷达图,很难找到相似路径历史台风查找功能。该功能对于台风天气过程风雨预报尤为重要,可以了解历史实况,预测相似风雨,为更好地做好气象防灾减灾服务提供参考[5-6]。

近年来,无论从理论上、开发工具上、硬件支持上人工智能技术都得到了飞速发展,在各个方面应用效果突出。本研究将介绍运用BP人工神经网络分类模型[7],对经过或登陆广东及邻近省份的历史台风路径数据进行学习与训练,获得最优人工神经网络节点权重。再利用训练好的模型,用最优神经节点权重计算并寻找与新生台风实况和预报路径相似的若干历史台风。同时将寻找相似路径历史台风这项功能新增到“清远市历史台风查询系统”中。

1 模型建立

人工神经网络有多种模型,如CNN(卷积)型、LSTM(长短期记忆)型、BP(前馈)型等等。BP型是最基础的一种模型,常常作用于整个神经网络模型的最后一层,作为前几层特征提取后的最后输入和标签分类输出。BP神经网络是一种按照误差逆向传播算法训练的多层前馈神经网络,分为输入层、中间层、输出层,其中输入层节点数固定为特征向量个数,中间层可以有多层,中间层每层节点数不固定,输出层节点数固定为标签类别个数。人工神经网络项目实施通常遵循以下步骤[8-9]:一是数据整理;二是定义各层次及其神经元个数;三是对模型进行训练和学习;四是对模型进行验证和优化。

1.1 数据整理

整理出1949至2019年经过或登陆广东省及附近省份的历史台风共526个,利用.NET编程进行数据格式转换,将原始数据转为向量数据。先将原始路径数据按6 h为间隔取一次台风经纬度并连成线,再确定一个以广东省清远市为中心具有一定范围的矩形边界。每个历史台风画一张50×50像素白底黑线图片,黑线代表台风路径,如图1所示。

图1 台风路径图片示意图

每个台风路径图下方为台风实际编号,如“T0005”,“T”为台风英语单词Typhoon第1个字母,“0005”为2000年第05号。然后再将图片按宽度和高度展开为1×2 500的数值向量,其中用1表示图片黑点,0表示图片白点。该1×2 500的数值向量为某个台风的属性,也就是神经网络的输入。再将所有历史台风从0开始编号,将编号转为one hot型向量,即为该编号台风的类别标签,也就是神经网络的输出。例如有3个历史台风,编号分别为0、1、2,其中0号台风标签为[1,0,0],1号台风为[0,1,0],2号台风为[0,0,1]。将所有历史台风的属性和标签形成一个EXCEL文件。每行1至2 500列为台风路径图片属性,2 501至3 026列为台风one hot编码标签。整个EXCEL文件共526行数据。数据整理过程和数据格式如图2所示。

图2 数据整理过程和格式

1.2 模型搭建

利用python和人工智能框架TensorFlow编程实现BP人工神经网络。定义神经网络的输入层、中间隐含层和输出层,以及学习率、激活函数、损失函数,实现信号的向前传播以及误差的反向传播。该模型输入层为1×2 500的向量。中间隐含层只有1层,节点数为1 000。输出层为1×526的向量,526为历史台风个数。激活函数为sigmoid,学习率0.001。神经网络分类模型的损失函数一般情况下为交叉熵softmax_cross_entropy_with_logits,一般情况下每1类会有多个历史样本。但该模型比较特殊,将每1个历史台风都作为单独1类,共526类,即每1类只有1个历史台风样本。可先将分类模型看成数值回归模型,在最后输出1×526向量数值中挑取最大值所在的位置作为样本标签,即再分类。因此该模型的损失函数选用均方差mean_squared_error替代。

1.3 模型学习

读取EXCEL文件,利用格式化向量数据对BP人工神经网络进行训练学习,通过多次迭代不断调整节点权重,获取最小计算误差。模型学习过程就是用神经网络节点权重矩阵根据每个台风的路径属性不断区分出每个台风编号的one hot标签。当输入为某个台风路径属性向量时,使这个台风的计算结果不断向数值1靠近,而其他台风向数值0靠近,计算结果和实际结果的均方差不断减少。最后这个台风计算结果并不需要为数值1,而是在所有台风计算结果中最大即为区分成功。例如有3个历史台风要区分,0号台风one hot标签为[1,0,0]。若根据0号台风路径属性输入得到最后计算结果为[0.005,0.002,0.001],由于最大值均出现在第一个位置,模型对0号台风区分成功。理想的模型应该具有较高的区分准确率,可以较好地区分所有历史样本。该模型经过第1 000次迭代,准确率61.21%;第4 000次迭代,准确率已达100%,但仍然可以继续进行学习,直到达到设定迭代次数或损失减少到几乎没变化。模型学习完毕保存神经网络各层权重和整个模型,形成pb文件,以供其他应用程序调用。

1.4 模型验证

以202002号台风“鹦鹉”验证,该台风没有作为历史台风样本参加到模型学习。验证结果如图3所示。图3右侧列表单数行是台风实际编号,偶数行是模型用“鹦鹉”计算出来的数值,是“鹦鹉”和各历史台风路径相似度排行前10名。即在模型计算输出的526个数值中最大的10个,该数值意义为台风“鹦鹉”很可能是526个历史台风之中的这10个,可能程度就是计算所得数值,数值越大路径越相似。例如有3个历史台风已被模型学习区分和记忆,根据新生3号台风路径属性输入得到最后计算结果为[0.003,0.004,0.001],那么模型就认为新生3号台风路径和1号台风最相似,和0号台风较相似,和2号台风最不相似。10个是人为设定,也可以设为10个以上。但一般情况下相似路径台风不会多于10个,或者超过10个以后认为路径肯定会不相似,因此设定10个。图3的台风路径图“T7525(Flossie)”、“T8703(Ruth)”、“T8404(Betty)”则是前10名中人工再挑取的相似度高的台风。其中“T8703(Ruth)”是预报员人工翻查历史资料逐个台风苦苦寻找的结果,也被人工神经网络模型成功找到!排名第1的“T8510(未命名)”虽然台风后期路径完全不一样,但台风前期的路径也是很相似的。

2 模型的成功和不足

从模型数据整理方法上看,是将实际经纬度路径截取一定经纬度范围的台风路径再转化为50×50的图片。该图片每个像素转换为实际经纬度约为0.3°,即约30 km。因此在实际地图上如果两条路径某点距离差距在30 km范围内,在图片上是同一点表示,并不能显示出两点。该方法保证了两条台风路径在靠近段的拟合。即线路越靠近,靠近的距离越长,就越相似。另一种情况是若两路径中在30 km范围内的点很少,甚至没有,但若两条路径有很多交点,即使两条路径在某段走向不一致,但从整条路径来看趋势是一致的。即线路交点越多,就越相似。两种情况如图4所示。

图4 路径靠近和多交点示意图

从模型运行过程上看,路径用数值1来表示,非路径部分用数值0表示,在参与计算过程中,由于神经网络经过学习后用神经节点权重矩阵记忆了所有历史台风路径属性,如果新生台风路径属性输入向量为1和0分布位置,就和某个历史台风路径属性向量1和0分布位置越相同,那么属性输入经过神经节点权重矩阵计算最后输出结果必然越大和越接近1,模型识别该新生台风很可能是某个历史台风类。因模型搭建时将每一个台风都作为一类,该类就是该台风,即和该历史台风路径越相似。但这也会造成模型的一个不足:若某小段路径极其相似,其他路径段极其不相似,计算结果也会很大。该情况就像图4中的202002号“鹦鹉”的最相似路径台风为“T8510(未命名)”。为弥补模型这个不足,同时相似路径台风可能存在多个,因此需要对最后计算结果进行降序排列,再人工挑选。尽管最后需要人工挑取,但挑取范围已经从几百条大大减少至10条。

虽然寻找结果存在一些干扰项,但模型总能找到一条或以上相似台风路径,参考2020和2021年新生台风验证结果,总体上模型还是相当成功的。如图5所示,图5a-b为202117号台风“狮子山”寻找结果“T1508(鲸鱼)”和“T5615(未命名)”;图5c-d为202007号台风“海高斯”,寻找结果“T8309(Ellen)”和“T0813(鹦鹉)”。

图5 台风“狮子山”和“海高斯”相似路径寻找结果

另外,如果新生台风路径“怪异”,在历史上没有出现,模型学习不到,输出的10个相似台风列表就没有一条路径相似,必须将新路径作为学习样本让模型重新学习,再次出现相似路径时寻找才能成功。

3 模型应用

模型是由python和TensorFlow开发。对于非程序员的普通用户而言人机交互体验较差,需要将模型运行在常用操作系统上,如windows,并开发用户操作界面。OpenCvSharp是一个基于.NET框架可以运行模型的动态连接库,而且OpenCvSharp并不依赖python和TensorFlow。在windows平台上,可以直接安装并引用其下深度神经网络类库OpenCvSharp.Dnn,再调用类库对象实现功能。只需按向量形状输入数据,读取TensorFlow训练完成后保存的模型pb文件,OpenCvSharp就能直接逐层计算,并输出最后结果。此外也可以不依靠OpenCvSharp,手写编程实现矩阵的相乘和相加方法。再按矩阵形状输入数据,逐层调用矩阵相乘和相加方法。在此基础上将寻找相似路径功能增加到Web版“清远市历史台风信息查询系统”。当有新台风生成并且实况路径或者预测路径经过划定的经纬度范围时,打开Web台风信息查询系统,加载时先读取广东省气象局探测数据中心一体化数据接口IDEA获取最新台风编号[10],通过下拉框选择编号获取台风路径实况和路径预报数据,拼接为一条完整的路径用于检索,并按照模型数据整理方法根据划定的经纬度范围和拼接的路径形成一张50×50的白底黑线台风路径图。按图片像素先行后列方法展开1×2 500向量作为模型的输入。C#编程引用OpenCvSharp.dll,读取向量输入,经过模型运算就能直接输出最后结果526个数值。主要程序代码如下:

OpenCvSharp.Mat tensor=new OpenCvSharp.Mat(1,2500,MatType.CV_32FC1);

//定义1×2500输入向量和数据类型

for(int i=0;i<=2500-1;i++)

{tensor.Set(0,i,Convert.ToSingle(value[i]));}

//设置输入向量数值

Stringmodel_path =@"F:\tf\frozen_tf.pb";

//学习完毕保存的整个模型文件

OpenCvSharp.Dnn.Net net=OpenCvSharp.Dnn.CvDnn.ReadNetFromTensorflow(model_path);

//根据路径加载模型

net.SetInput(tensor);

//向模型输入向量

Mat result=net.Forward();

//模型逐层次向前计算得出最后输出向量

for(int i=0;i<=526-1;i++)

{float result_score=result.Get<float>(0,i);

resstr=resstr+result_score.ToString()+",";}

//获取输出向量的每个数据

最后从输出向量的每个数据中挑取最大10个,即为相似度排名前10历史台风列表。点击历史台风列表某个台风可查询路径、雨量、极大风、受灾情况等信息[11-13]。气象历史数据包括有整个台风生命周期国家站和区域站的日雨量、日极大风、最大小时雨量、逐小时雨量。历史灾情数据包括受灾区域、农田和建筑损毁情况、直接经济损失等。图6是系统运行界面及202118号台风“圆规”寻找结果。中间线框为划定经纬度路径寻找范围。

图6 系统运行界面

该模型虽然只是针对途经广东省及附近的台风路径进行了学习与记忆,但建立模型的方式和过程同样适应于其他地区,可以预见该模型在其他地区的应用也会表现优良。训练好的整个模型pb文件也可以拷贝到其他系统运行。另外,该模型建立方法对于如路径、轨迹等单线型黑白图片识别与匹配也有一定的参考价值。但需要特别注意在数据整理时不宜将图片宽和高设置太大。若图片太大按行列展开为向量时维度会特别大。维度越多干扰也必然越大,模型学习的时间会大大增加。同时若图片宽和高设置太大时,由于每个像素点表示的经纬度过于精细,路径在靠近段的拟合也会失效,此时模型只会学习和记忆路径相交这一种情况,反而寻找相似路径效果不理想。

猜你喜欢
人工神经网络台风向量
台风过韩
向量的分解
聚焦“向量与三角”创新题
台风来了
利用人工神经网络快速计算木星系磁坐标
人工神经网络实现简单字母的识别
台风爱捣乱
滑动电接触摩擦力的BP与RBF人工神经网络建模
向量垂直在解析几何中的应用
向量五种“变身” 玩转圆锥曲线