RNN 的一种模型称为长短期记忆网络 (LSTM)。我认为这是一个有趣的名字。听起来也是这样:从长远来看,短期模式不会被遗忘。
LSTM 的精确实现细节超出了本文的范围。相信我,只学习 LSTM 模型会分散我们的注意力,因为它没有既定标准
我们现在开始我们的教程。让我们从编写代码开始,创建一个名为 .py 的新文件。导入相关库,如步骤 1 所示。
第一步:导入相关库
numpy 作为 np
作为 tf
来自.rnn
接下来,定义一个名为 .如第2步所示,在构造函数中设置模型超参数、权重和成本函数。
第 2 步:定义一个类及其构造函数
类:
def (self, , , =10):
自我。 = //#A
自我。 = //#A
自我。 = //#A
self.W_out = tf.(tf.([, 1]),name=’W_out’) //#B
self.b_out = tf.(tf.([1]), name=’b_out’) //#B
self.x = tf.(tf., [None, , ]) //#B
self.y = tf.(tf., [None, ]) //#B
self.cost = tf.(tf.(self.model() – self.y)) //#C
自我。 = tf.train.().(self.cost) //#C
self.saver = tf.train.Saver() //#D
#A 超参数。
#B 权重变量和输入占位符。
#C 成本优化器(成本)。
#D辅助操作
接下来,我们使用内置的 RNN 模型,命名为 . LSTM 单元的隐藏维度是隐藏状态随时间变化的维度。我们可以使用 rnn 处理这个单元格数据。函数来检索输出。第 3 步详细介绍了如何使用 LSTM 实现预测模型。
第 3 步:定义 RNN 模型
定义模型(自我):
“””
:param x: 大小为 [T, , ]
:param W: 全层
:param b: 全层
“””
cell = rnn.(self.) #A
, = tf.nn.(cell, self.x, dtype=tf.) #B
= tf.shape(self.x)[0]
= tf.tile(tf.(self.W_out, 0), [, 1, 1])#C
out = tf.(, ) + self.b_out
out = tf.(out)
出来
#A 创建一个 LSTM 单元。
#B 运行输入单元,获取输出和状态张量。
#C 将输出层计算为全连接线性函数。
通过定义模型和成本函数,我们现在可以实现一个训练函数,该函数在给定示例输入/输出对的情况下学习 LSTM 权重。如第 4 步所示,您打开会话并重复运行优化器。
或者,您可以使用交叉验证来确定训练模型的迭代次数。这里我们假设 epoc 的数量是固定的。
训练后,将模型保存到文件中以供以后加载。
第 4 步:在数据集上训练模型
def train(self, , ):
使用 tf.() 作为 sess:
tf.().()
sess.run(tf.())
for i in range(1000): #A
mse = sess.run([self., self.cost], ={self.x: , self.y: })
如果我 % 100 == 0:
打印(i,mse)
= self.saver.save(sess, ‘model.ckpt’)
print(‘模型保存到{}’.())
#A训练1000次
我们的模型已经成功学习了参数。接下来,我们想使用其他数据评估以下预测模型的性能。第 5 步加载保存的模型并通过提供一些测试数据来运行模型。如果学习的模型在测试数据上表现不佳,那么我们可以尝试调整 LSTM 单元的隐藏维度
第 5 步:测试学习模型
def test(self, ):
使用 tf.() 作为 sess:
tf.().()
self.saver.(sess, ‘./model.ckpt’)
= sess.run(self.model(), ={self.x: })
打印()
但是为了完成我们的工作,让我们组合一些数据并尝试训练一个预测模型。在第 6 步中,我们将创建输入序列,称为 ,以及相应的输出序列,称为 。
第 6 步训练和测试一些虚拟数据
如果 == ”:
= (=1, =4, =10)
= [[[1], [2], [5], [6]],
[[5], [7], [7], [8]],
[[3], [4], [5], [7]]]
= [[1, 3, 7, 11],
[5, 12, 14, 15],
[3, 7, 9, 12]]
.train(, )
= [[[1], [2], [3], [4]], #A
[[4], [5], [6], [7]]] #B
.test()
#A 预测结果应该是1,3,5,7。
#B 预测结果应该是4、9、11、13。
您可以将此预测模型视为一个黑盒,并使用真实世界的时间数据对其进行测试。
暂无评论内容