我刚刚开始使用 TensorFlow,正在尝试实现一个非常简单的 RNN。 RNN 有x
作为输入,y
作为输出,仅由一个层组成,该层需要x
并将之前的输出作为输入。这是我想到的事情的图片:
问题是,我看不到任何通过 TensorFlow API 构建包含循环的图的方法。每当我定义一个张量时,我都必须指定它的输入是什么,这意味着我必须已经定义了它的输入。所以这就存在先有鸡还是先有蛋的问题。
我什至不知道想要定义一个带有循环的图是否有意义(首先计算什么?我必须定义 softmax 节点的初始值吗?)。我尝试使用变量来表示先前的输出,然后手动获取值y
并在每次输入训练样本后将其存储在变量中。但这会非常慢,除非有一种方法可以在图表本身中表示这个过程(?)。
我知道 TensorFlow 教程展示了 RNN 的示例实现,但他们作弊并从已经包含循环的库中提取了 LSTM 模块。总的来说,这些教程非常适合指导您如何构建某些东西,但它们可以更好地解释这个野兽的真正工作原理。
那么,TensorFlow 专家们,有没有办法构建这个东西呢?我该怎么做呢?
事实上,所有机器学习框架中的前向和后向传递都假设您的网络没有循环。实现循环网络的一种常见方法是及时将其展开几个步骤(例如 50 个步骤),从而将具有循环的网络转换为没有循环的网络。
例如,在您引用的文档中:
https://www.tensorflow.org/versions/r0.7/tutorials/recurrent/index.html https://www.tensorflow.org/versions/r0.7/tutorials/recurrent/index.html
他们提到
为了使学习过程易于处理,通常的做法是将反向传播的梯度截断为固定数量 (num_steps) 的展开步骤。
它实际上意味着他们将创造num_steps
LSTM 单元,其中每个单元都将值作为输入x
对于当前时间步长,以及输出previousLSTM 模块。
The BasicLSTMCell
他们使用的并且您认为有循环的实际上没有循环。 LSTM 单元只是单个 LSTM 步骤(具有两个输入 [输入和内存] 和两个输出 [输出和内存] 的块,并使用门根据输入计算输出)的实现,而不是整个 LSTM 网络。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)