Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Neural network 如何在TensorFlow中构建一个图中有一个循环的简单RNN?_Neural Network_Tensorflow - Fatal编程技术网

Neural network 如何在TensorFlow中构建一个图中有一个循环的简单RNN?

Neural network 如何在TensorFlow中构建一个图中有一个循环的简单RNN?,neural-network,tensorflow,Neural Network,Tensorflow,我刚刚开始使用TensorFlow,我正在尝试实现一个非常简单的RNN。RNN将x作为输入,将y作为输出,并且仅由一个层组成,该层将x及其以前的输出作为输入。这是我脑海中的一幅画面: 问题是,我无法通过TensorFlow API构造包含循环的图。每当我定义张量时,我必须指定它的输入是什么,这意味着我必须已经定义了它的输入。所以这里有鸡和蛋的问题 我甚至不知道用一个循环定义一个图是否有意义(首先计算的是什么?我是否必须定义softmax节点的初始值?)。我的想法是使用一个变量来表示以前的输出,

我刚刚开始使用TensorFlow,我正在尝试实现一个非常简单的RNN。RNN将
x
作为输入,将
y
作为输出,并且仅由一个层组成,该层将
x
及其以前的输出作为输入。这是我脑海中的一幅画面:

问题是,我无法通过TensorFlow API构造包含循环的图。每当我定义张量时,我必须指定它的输入是什么,这意味着我必须已经定义了它的输入。所以这里有鸡和蛋的问题

我甚至不知道用一个循环定义一个图是否有意义(首先计算的是什么?我是否必须定义softmax节点的初始值?)。我的想法是使用一个变量来表示以前的输出,然后手动获取
y
的值,并在每次输入训练样本后将其存储在变量中。但这将是非常缓慢的,除非有一种方法在图形本身中表示这个过程(?)

我知道TensorFlow教程展示了RNN的示例实现,但它们欺骗并从已经有循环的库中拉出了一个LSTM模块。总的来说,这些教程有助于引导您了解如何构建某些东西,但它们可以更好地解释这种野兽是如何工作的


那么,TensorFlow的专家们,有没有办法建造这个东西?我该怎么做呢?

事实上,所有机器学习框架中的向前和向后传递都假设您的网络没有周期。实现循环网络的一种常见方法是将其及时展开几个步骤(例如50),从而将具有循环的网络转换为没有循环的网络

例如,在您所指的文档中:

他们提到

为了使学习过程易于处理,通常的做法是将反向传播的梯度截断为固定数量(num_步骤)的展开步骤

它的有效含义是,它们将创建
num_steps
LSTM单元格,其中每个单元格都将当前时间步长的值
x
和前一个LSTM模块的输出作为输入


他们使用的并且您认为有循环的
BasicLSTMCell
实际上没有循环。LSTM单元只是单个LSTM步骤(一个有两个输入[输入和内存]和两个输出[输出和内存]的块,并使用门计算输入输出)的实现,而不是整个LSTM网络。

您的可变想法似乎是一条路要走,如果您使用TensorFlow变量/assign Ops,速度应该不会太慢,但我是否需要调用
sess.run(y\u prev.assign(y))
并一次运行一个样本?或者你的意思是我应该结合@Ishamael描述的展开策略?