深度学习Theano中scan的使用方法

版权声明:本文为原创文章:http://blog.csdn.net/programmer_wei/article/details/51002379

深度学习python库Theano中的函数scan是一种迭代形式,所以可以用于类似循环(looping)的场景。需要注意的是scan在计算的时候,可以访问以前n步的输出结果,所以比较适合RNN网络。


首先我们来看地一个例子1:



import theano
import theano.tensor as T

k = T.iscalar("k")
A = T.vector("A")

# Symbolic description of the result
result, updates = theano.scan(fn=lambda prior_result, A: prior_result * A,
                              outputs_info=T.ones_like(A),
                              non_sequences=A,
                              n_steps=k)

# We only care about A**k, but scan has provided us with A**1 through A**k.
# Discard the values that we don't care about. Scan is smart enough to
# notice this and not waste memory saving them.
final_result = result[-1]

# compiled function that returns A**k
power = theano.function(inputs=[A,k], outputs=final_result, updates=updates)

print(power(range(10),2))
print(power(range(10),4))

输出:

[ 0. 1. 4. 9. 16. 25. 36. 49. 64. 81.]

[ 0.00000000e+00 1.00000000e+00 1.60000000e+01 8.10000000e+01
2.56000000e+02 6.25000000e+02 1.29600000e+03 2.40100000e+03
4.09600000e+03 6.56100000e+03]

上述算法等同于:

result = 1
for i in range(k):
    result = result * A

在上述例子1中:
fn:定义了一个lamuda函数,实现累乘的功能 Ak
outputs_info:是scan输出在起始的状态。为result设置的初值,由outputs_info指定。这里为1,shape大小和A保持一致,这样才能实现累乘的目的。
non_sequences:描述了非序列的输入,即A是一个固定的输入&

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值