from theano import function, config, shared, sandbox
import theano
import theano.tensor as T
import numpy as np
import time
Using gpu device 0: GeForce GT 620
fx2=lambda prior,n: prior * 2
-- 関数を畳み込んでいった結果を出力
-- 引数non_sequensesを指定
-- 関数をtensorの各要素に適用したものを出力
-- 引数sequencesを指定
--theano.mapで同等のことができる。
[fn(x), fn(fn(x))...]
n = T.iscalar('n')
v = T.ivector('v')
result, updates = theano.scan(fx2,
sequences=None,
outputs_info=v,
non_sequences=v,
n_steps=n)
floop = theano.function(inputs=[v, n], outputs=result[-1], updates=updates)
print floop([1, 2, 3], 3)
[ 8 16 24]
[fn(x) for x in ...]
mapをつかうといいかも
a = T.ivector('a')
outputs = T.as_tensor_variable(np.asarray(0))
result, updates = theano.scan(fx2,
sequences=[a],
outputs_info=outputs,
non_sequences=None)
fite = theano.function(inputs=[a], outputs=result)#, updates=updates)
print fite([5,6,7])
[10 12 14]
result, updates = theano.scan(fn=lambda seq, prior: seq + prior,
sequences=[a],
outputs_info=outputs,
non_sequences=None)
fite2 = theano.function(inputs=[a], outputs=result)#, updates=updates)
print fite2([5,6,7])
[ 5 11 18]
m = T.imatrix('m')
result, updates = theano.scan(lambda n:n+2,
sequences=[m],
non_sequences=None)
fite_m=theano.function([m],result)
print fite_m([[1,2,3],[4,5,6]])
[[3 4 5] [6 7 8]]
X=T.scalar('X')
A=T.vector('A')
fx=lambda x,y:x*y
fm,_=theano.map(fx,
sequences=[A],
non_sequences=X
)
fmapx = theano.function(inputs=[X,A], outputs=fm)
print fmapx(4,[1,2,3])
[ 4. 8. 12.]
fm,_=theano.map(fx,
sequences=[m],
non_sequences=X
)
fmapxm = theano.function(inputs=[X,m], outputs=fm)
print fmapxm(4,[[1,2,3],[4,5,6]])
[[ 4. 8. 12.] [ 16. 20. 24.]]
V=T.vector('V')
fm,_=theano.map(lambda x,v:x+v,
sequences=[m],
non_sequences=V
)
fmapxmv = theano.function(inputs=[V,m], outputs=fm)
print fmapxmv([2,2,2],[[1,2,3],[4,5,6]])
[[ 3. 4. 5.] [ 6. 7. 8.]]