Theano.scan() 来自http://blog.sina.com.cn/s/blog_6553da670102wi98.html

theano.scan()
result,updates = theano.scan(fn lambda y, p, x_2, x_1,A: y+p+x_2+x_1+A, sequences=[Y, P], outputs_info=[dict(initial=X, taps=[-2, -1])]), non_sequences=A,no_steps=n)
  • 参数fn是一个你需要计算的函数,函数可以在外部定义好,也可以在内部再定义.在内部在定义的fn一般用lambda来定义需要用到的参数,在外部就def好的函数,fn直接函数名即可。
  • sequences就是需要迭代的序列(输入序列),它的值将会传给fn作为前面的参数。如果在output_info里有initial,那这个参数可以省略。
  • outputs_info描述了需要用到的初始化值,以及是否需要用到前几次迭代输出的结果,dict(initial=X, taps=[-2, -1])表示使用序列x作为初始化值,taps表示会用到前一次和前两次输出的结果。如果当前迭代输出为x(t),则计算中使用了(x(t-1)和x(t-2)。 官网解释为:Initialization occurs in outputs_info。(输出在起始的状态)
  • non_sequences描述了非序列的输入(参数),它的值传给fn后面的参数,且每次迭代的A都是不变的。官网解释为:Unchanging variables are passed to scan as non_sequences。
  • n_steps描述了迭代的次数。

scan是Theano中迭代的一般形式,所以可以用于类似循环(looping)的场景。 函数scan的输入也是一些序列(一维数组,或者多维数组,以第一维为leading dimension),将某个函数作用于输入序列上,得到每一步输出的结果。
Reduction和map都是scan的特殊形式,即将某函数依次作用一个序列的每个元素上。但scan在计算的时候,可以访问以前n步的输出结果,所以比较适合RNN网络。

 

例1:计算tanh(wx+b)


sequences的值传给fn作为第一个参数


例2:计算A**k


进一步理解output_info的作用,它其实是将值传递给了fn的前面的参数(根据值的个数决定了传给了fn前几个参数,本例为第一个参数),fn后续的参数就用的non_sequences的值。


例3:x(t)=x(t-1)*y(t)





用到上一次结果的简单例子。outputs_info需要好好理解。RNN全看它了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值