发布于 2014-06-26 17:57:21
我不会说它是自动“展开”的--相反,Theano有一个概念,那就是什么变量是相互关联的,并且可以沿着这条链传递更新。如果这就是你所说的展开,那么也许我们是在谈论同样的事情。
我也是这样做的,但是使用拉斯文·帕斯卡努()的rnn.py代码(来自这条线)作为参考。作为一个学习的例子,这似乎要简单得多。
您可以从教程中可视化/绘制图形中获得一些价值。还有一组带有简单绘图的在线幻灯片,它显示了RNN的1层“展开”的图表,您在文章中将对此进行讨论。
具体来说,请看一下step函数:
def step(u_t, h_tm1, W, W_in, W_out):
h_t = TT.tanh(TT.dot(u_t, W_in) + TT.dot(h_tm1, W))
y_t = TT.dot(h_t, W_out)
return h_t, y_t此函数表示这些幻灯片,pg 10中显示的“简单递归网”。在进行更新时,只需传递梯度w.r.t。分别是W、W_in和W_out (请记住,y是通过step函数连接到这三者的!这就是梯度魔法的工作原理)。
如果您有多个W层(或索引到一个大W中,我相信gwtaylor正这样做),那么这将创建多个“展开”层。据我所知,这个网络只在时间上倒退了一步。如果有帮助,仙人掌在Theano中也有一个RNN实现。
另外,用BPTT训练RNN是很困难的。Ilya Sutskever博士论文对此进行了详细的讨论--如果可以的话,尝试将其绑定到免费优化器,这里还有一个参考RNN实现中。Theanet也是这样做的,并且可能是一个很好的参考。
https://stackoverflow.com/questions/24431621
复制相似问题