深度学习神经网络实践:基于LSTM的电离层预报
Posted GLASSY_杨某人
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深度学习神经网络实践:基于LSTM的电离层预报相关的知识,希望对你有一定的参考价值。
1 引言
在本科的毕业设计中,我的题目就是基于深度学习的电离层预报,在初期的测试了中,试了挺多的网络,也试了挺多的预报方法和输出的方式,多步预测和单步预测也都试了,最后选择了用LSTM网络进行预报,从0基础到最后写完毕设的论文,也不算容易。所以这里写篇文章记录一下,中间涉及到一些文件数据的读取处理及转换这边就不说了,毕竟主要想讲一讲我怎么跑通LSTM网络。
代码参考的就是Keras官方提供的文档,还是比较通俗易懂的。
2 环境配置
Python 3.8 + TensorFlow 2.3 + Keras 2.4,keras还是比较适合小白的,上手简单,网络只需要暴力叠加。
对于tensorflow,我当时分别配了两个环境,一个是windows10我自己的电脑上的,另一个是在Linux超算服务器上配置的环境。
当时因为我做的是全球的电离层预报,里面涉及到的数据比较多,经常几千个程序一起运行,数据量也很大,所以我拿自己的电脑进行调代码,做测试,代码写好后就拿服务器来进行结果的运算。配环境的过程我都记录了一下,参考下面:
-
windows10 配置 TensorFlow 环境:
https://blog.csdn.net/qq_40185784/article/details/111165906?spm=1001.2014.3001.5501 -
超算平台/服务器配置 TensorFlow 环境:
https://blog.csdn.net/qq_40185784/article/details/119113802?spm=1001.2014.3001.5501
3 数据和方法
我选了两年多的数据,2018.1.1-2020.3.1。训练和验证时候用的2018和2019两年的数据,而2020年两个月的数据用来最后结果的评估分析。具体我在做的时候还用了几种不同方法来对全球的电离层进行建模,来对比同一个深度学习网络预报不同的东西得到最后全球的电离层结果的差异,这里就不展开说了。
评估的指标选的是比较常用的几个公式:(di 为网络输出的预报值,^di 为真值,n 代表统计天数)
{
r
e
l
a
t
i
v
e
e
r
r
o
r
=
1
n
∑
i
=
1
n
∣
d
i
−
d
^
i
∣
d
^
i
×
100
%
M
A
D
=
1
n
∑
i
=
1
n
∣
d
i
−
d
^
i
∣
b
i
a
s
=
1
n
∑
i
=
1
n
(
d
i
−
d
^
i
)
S
T
D
=
∑
i
=
1
n
(
d
i
−
d
^
i
−
b
i
a
s
)
2
n
R
M
S
=
∑
i
=
1
n
(
d
i
−
d
^
i
)
2
n
\\left\\{ \\begin{array}{l} \\begin{array}{l} \\begin{array}{l} relative\\ error=\\frac{1}{n}\\sum_{i=1}^n{\\frac{|d_i-\\hat{d}_i|}{\\hat{d}_i}}\\times 100\\%\\\\ MAD=\\frac{1}{n}\\sum_{i=1}^n{|d_i-\\hat{d}_i|}\\\\ bias=\\frac{1}{n}\\sum_{i=1}^n{\\left( d_i-\\hat{d}_i \\right)}\\\\ \\end{array}\\\\ STD=\\sqrt{\\frac{\\sum_{i=1}^n{\\left( d_i-\\hat{d}_i-bias \\right) ^2}}{n}}\\\\ \\end{array}\\\\ RMS=\\sqrt{\\frac{\\sum_{i=1}^n{\\left( d_i-\\hat{d}_i \\right) ^2}}{n}}\\\\ \\end{array} \\right.
⎩⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎧relative error=n1∑i=1nd^i∣di−d^i∣×100%MAD=n1∑i=1n∣di−d^i∣bias=n1∑i=1n(di−d^i)STD=n∑i=1n(di−d^i−bias)2RMS=n∑i=1n(di−d^i)2
4 网络结构和一些公式
介绍一些LSTM的内部结构和我搭建的网络
LSTM内部结构
LSTM神经网络是循环神经网络(RNN)的改进网络,是为了解决RNN模型梯度弥散的问题而提出的。该网络可基于输入的时间序列、通过内在遗忘的方式来学习历史数据并输出预测数据,其内部结构如图4-1所示。
LSTM内部中共有三个控制门:输入门、输出门、遗忘门。细胞内通过这三个控制门选择性的记忆反馈实现时间上的记忆功能,并运用于进行预测。输入门确定需要在细胞状态中要保存的信息和待更新的信息:
Γ
t
i
=
σ
(
W
i
⋅
[
h
t
−
1
,
X
t
]
+
b
i
)
C
~
t
=
tan
h
(
W
C
⋅
[
h
t
−
1
,
X
t
]
+
b
C
)
\\varGamma _{t}^{i}=\\sigma \\left( W_i\\cdot \\left[ h_{t-1},X_t \\right] +b_i \\right) \\\\ \\tilde{C}_t=\\tan\\text{h}\\left( W_C\\cdot \\left[ h_{t-1},X_t \\right] +b_C \\right)
Γti=σ(Wi⋅[ht−1,Xt]+bi)C~t=tanh(WC⋅[ht−1,Xt]+bC)
式中输入的是上一个细胞元的计算结果(上一次的隐向量) 和新一次的训练数据 。第一部分得到 确定哪些信息需要更新,第二部分通过一个tanh单元构建备选向量 ,用来添加至细胞状态中。为了得到细胞状态保存信息的 矩阵,引入sigmoid单元。
sigmoid单元的作用是将结果输出归算至0至1之间,表达对数据的更新信息。其中σ函数是sigmoid单元的形式,首先计算输入的线性组合,其次通过σ函数作为阈值单元来输出结果。σ函数的形式如下:
σ
(
y
)
=
1
1
+
e
−
y
\\sigma \\left( y \\right) =\\frac{1}{1+e^{-y}}
σ(y)=1+以上是关于深度学习神经网络实践:基于LSTM的电离层预报的主要内容,如果未能解决你的问题,请参考以下文章
深度学习与图神经网络核心技术实践应用高级研修班-Day3基于深度学习的视频行为识别(action_recognition)
Keras深度学习实战(33)——基于LSTM的序列预测模型