Tensorflow RNN_LSTM实例

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。

您可以将此预测模型视为一个黑盒,并使用真实世界的时间数据对其进行测试。

© 版权声明
THE END
喜欢就支持一下吧
点赞13赞赏 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容