TensorFlow:简单的循环神经网络

Posted

技术标签:

【中文标题】TensorFlow:简单的循环神经网络【英文标题】:TensorFlow: simple recurrent neural network 【发布时间】:2016-08-18 06:17:04 【问题描述】:

我已经使用 TensorFlow 构建了一些神经网络,例如基本的 MLP 和卷积神经网络。现在我想继续讨论循环神经网络。但是,我在自然语言处理方面没有经验。因此,RNN 的 TensorFlow NLP 教程对我来说并不容易阅读(也不是很有趣)。

基本上我想从简单的东西开始,而不是 LSTM。

如何在 TensorFlow 中构建简单的循环神经网络,例如 Elman 网络?

我只能找到用于 TensorFlow 的 GRU 或 LSTM RNN 示例,主要用于 NLP。有谁知道 TensorFlow 的一些简单的循环神经网络教程或示例?

此图显示了一个基本的 Elman 网络,通常简称为 SRN(简单循环网络):

【问题讨论】:

【参考方案1】:

一种选择是使用位于tensorflow/python/ops/rnn_cell.py 的内置RNNCell。

如果您不想这样做,您可以制作自己的 RNN。 RNN 将使用反向传播随着时间的推移进行训练。尝试将网络展开固定数量的步骤,例如考虑长度为 10 的输入序列。然后,您可以在 python 中编写一个循环来为网络的每个步骤执行所有矩阵乘法。每次您都可以获取上一步的输出并将其与该步骤的输入连接起来。完成这项工作不会有太多的代码行。

【讨论】:

我尝试使用 RNN Cell 构建一些东西,但并没有真正成功。当我提供一个 numpy 数组或列表时,我总是以 raise TypeError("inputs must be a list")TypeError: unhashable type: 'list' 结尾。此外,state 到底是干什么用的?我认为它是上下文层之外的最新向量,但是为什么这需要一个明确的2D Tensor with shape [batch_size x self.state_size] 然后(根据文档)?你能举个例子吗? 是的,状态是最近的上下文向量。通常,您会批量处理多个序列。所以二维张量是批次中每个序列的状态向量。 github.com/rajarsheem/playing-with-RNNs/blob/master/… 看看这个。如果您需要解释,请在此处创建问题。

以上是关于TensorFlow:简单的循环神经网络的主要内容,如果未能解决你的问题,请参考以下文章

深度学习(08)_RNN-LSTM循环神经网络-03-Tensorflow进阶实现

在 tensorflow 中创建多层循环神经网络

双向循环神经网络及TensorFlow实现

机器学习与Tensorflow——循环神经网络长短时记忆网络

循环神经网络系列Tensorflow中dynamic_rnn

Torch 或 Tensorflow 中的通用循环神经网络