fill の挙動がわからないので調べてみた。
import numpy import theano import theano.tensor as T x=T.dscalar('x') xc=T.dscalar('xc') y1=3*x y2=xc*x y3=T.fill(xc,3)*x f1=theano.function([x],y1) f2=theano.function([x,xc],y2) f3=theano.function([x,xc],y3) print "x=",theano.pp(x) print "y1=",theano.pp(y1) print "y2=",theano.pp(y2) print "y3=",theano.pp(y3) print "f1=",theano.pp(f1.maker.fgraph.outputs[0]) print "f2=",theano.pp(f2.maker.fgraph.outputs[0]) print "f3=",theano.pp(f3.maker.fgraph.outputs[0]) print "f1(2)=",f1(2) print "f2(2,3)=",f2(2,3) print "f3(2,3)=",f3(2,3) print "f3(2,100)=",f3(2,100)
実行すると、
x= x y1= (TensorConstant{3} * x) y2= (xc * x) y3= (fill(xc, TensorConstant{3}) * x) f1= (TensorConstant{3.0} * x) f2= (xc * x) f3= (TensorConstant{3.0} * x) f1(2)= 6.0 f2(2,3)= 6.0 f3(2,3)= 6.0 f3(2,100)= 6.0が得られた。
f3(2,3)もf3(2,100)も同じ値を返していることから、
fill は第1引数を第2引数の値に固定した結果を返しているように見える。
何に使うのだろうか。
ところで、
f3=theano.function([x,xc],y3)を
f3=theano.function([x],y3)に置き換えると
theano.gof.fg.MissingInputError: ('An input of the graph, used to compute Elemwise{second,no_inplace}(xc, TensorConstant{3}), was not provided and not given a value', xc)というエラーが出力される。
値が与えられてない変数が残っていると、たとえfillを使って値を与えていても
関数化するのは無理なようだ。
0 件のコメント :
コメントを投稿