2014-11-03 33 views
9

theano.scan() işlevinin davranışını tam olarak anlayamıyorum. Ben -2 -1 dokunun endeksi geçiş halinde, ancakPython - Theano scan() işlevi

[ 3 3 5 5 7 7 9 9 11 11] 

yani:

import numpy as np 
import theano 
import theano.tensor as T 


def addf(a1,a2): 
     return a1+a2 

i = T.iscalar('i') 
x0 = T.ivector('x0') 
step= T.iscalar('step') 

results, updates = theano.scan(fn=addf, 
        outputs_info=[{'initial':x0, 'taps':[-2]}], 
        non_sequences=step, 
        n_steps=i) 

f=theano.function([x0,i,step],results) 

print f([1,1],10,2) 

yukarıda pasajı mükemmel mantıklı olan, aşağıdaki sekansa yazdırır: Burada

bir örnek

outputs_info=[{'initial':x0, 'taps':[-1]}] 

sonucu olur:

yerine bana mantıklıgörünecek ne
[[ 3 3] 
[ 5 5] 
[ 7 7] 
[ 9 9] 
[11 11] 
[13 13] 
[15 15] 
[17 17] 
[19 19] 
[21 21]] 

(sadece Dizinin son değerini alır ve 2 ekleyin): Herhangi bir yardım çok

[ 3 5 7 9 11 13 15 17 19 21] 

mutluluk duyacağız.

Teşekkürler!

cevap

10

Musluklar = [- 1] kullandığınızda, çıktı bilgisindeki bilgilerin olduğu gibi kullanıldığını varsayalım. Bu, addf fonksiyonunun bir vektör ve girdi olarak non_sequence ile çağrılacağı anlamına gelir. Eğer bir sayısal için x0 dönüştürmek, o beklediğiniz gibi çalışır:

import numpy as np 
import theano 
import theano.tensor as T 


def addf(a1,a2): 
     print a1.type 
     print a2.type 
     return a1+a2 

i = T.iscalar('i') 
x0 = T.iscalar('x0') 
step= T.iscalar('step') 

results, updates = theano.scan(fn=addf, 
        outputs_info=[{'initial':x0, 'taps':[-1]}], 
        non_sequences=step, 
        n_steps=i) 

f=theano.function([x0,i,step],results) 

print f(1,10,2) 

Bu, bu çıktıyı vermek: Bu addf (vektör, skaler) yapmak gibi durumda

TensorType(int32, scalar) 
TensorType(int32, scalar) 
[ 3 5 7 9 11 13 15 17 19 21] 

, bu yayın elemwise değeri.

Başka bir şekilde açıklanırsa, musluklar [-1] ise, x0 iç işleve "olduğu gibi" geçirilir. Musluklar başka bir şey içeriyorsa, iç işleve iletilenin x0'dan daha az 1 boyutu olacaktır, çünkü x0 birçok başlangıç ​​adımı değerini (-2 ve -1) sağlamalıdır.