关于 theano.scan函数一些简单的应用只包括fn ,sequences 和outputs_info

关于 theano.scan函数一些简单的应用只包括fn ,sequences 和outputs_info 。自己通过实验总结的不一定对 后期更正……

1)  只有一个序列 和 只有一个循环中更新的数

__author__ = 'Administrator'
import theano
import theano.tensor as T
A = T.vector(
"A")
B = T.vector(
"B")
def step(a,b):
   
return 2*b, a - b

[result_mul
,result_test],updates=theano.scan(step,sequences=[A],outputs_info = [2.,None])
result_mul = theano.function([A]
,[result_mul,result_test])
m = result_mul([
4,2,1,1])
print m
print result_mul([1,4,2,3])  ##test

输出为:(注意返回值包含两个元素)

[array([  4.,   8., 16.,  32.], dtype=float32),array([  2.,  -2., -7., -15.], dtype=float32)]

[array([  4.,   8., 16.,  32.], dtype=float32),array([ -1.,   0.,  -6., -13.], dtype=float32)]

结论:outputs_info 中的2 为step中b的初始值,sequences中每个元素一次执行 b的更新为return的第一个返回值代替b  ,step函数中第一个参数a表示sequences中的元素

 

这种情况是比较常用的

2)  多个序列 和只有一个循环中更新的数

__author__ = 'Administrator'
import theano
import theano.tensor as T
A = T.vector("A")
B = T.vector("B")
def step(a,b,c):
    return 2*b, a - c

[result_mul,result_test],updates=theano.scan(step,sequences=[A,B],outputs_info = [2.,None])
result_mul = theano.function([A,B],[result_mul,result_test])
m = result_mul([4,2,1,1],[1,2,3,4])
print m

输出为:

[array([ 2., 4.,  6.,  8.], dtype=float32), array([ 2.,  0., -3., -5.], dtype=float32)]

 

这个就比较明确了: step函数中前两个参数分别表示两个序列, outputs_info 中的2 就为初始的step中的c的值。

另外两个序列都是依次往后取元素直到一个序列取完停止。 意思是两个序列可以不等长, 但是长序列中长出来的序列不执行。 依旧是return中的第一个返回值更新c的值……

3)  单序列 多循环更新数

__author__ = 'Administrator'
import theano
import theano.tensor as T
A = T.vector("A")
B = T.vector("B")
def step(a,c,d):
    return a + c, a + d

[result_mul,result_test],updates=theano.scan(step,sequences=[A],outputs_info = [2.,1.])
result_mul = theano.function([A],[result_mul,result_test])
m = result_mul([4,2,1,1])
print m

 

输出为:[array([  6.,   8.,  9.,  10.], dtype=float32), array([5.,  7., 8.,  9.], dtype=float32)]

Outputs_info中的[2,1]分别为c,d的初始值 a为序列的元素值return的前两个表示c,d 的每次的更新值

4)  多个序列 和 多个需要更新的数

 

__author__ = 'Administrator'
import theano
import theano.tensor as T
A = T.vector("A")
B = T.vector("B")
def step(a,b,c,d):
    return a + c, b + d

[result_mul,result_test],updates=theano.scan(step,sequences=[A,B],outputs_info = [2.,1.])
result_mul = theano.function([A,B],[result_mul,result_test])
m = result_mul([4,2,1,1],[1,2,3,4])
print m

 

输出为:

[array([ 6.,   8.,   9., 10.], dtype=float32), array([  2.,   4.,  7.,  11.], dtype=float32)]

Return返回值的前两个表示更新的两个数c,d。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值