Theanoをつかってみた(2) - 共有変数
今日はパラメータと変数の使い方の違いについて。
そもそも「パラメータ」と「変数」って表現はあまり良くない気がするので、
実例を上げながら説明。例えば、
という関数があったとすると(RBFカーネル)、はパラメータ、
は変数ということ。
なんて計算中に変化するものではないので、いちいち
import theano.tensor as T import theano x1 = T.dscalar() x2 = T.dscalar() sigma = T.dscalar() func = T.exp(-sigma*T.pow((x1-x2), 2)) valFunc = theano.function([sigma,x1,x2], func) print valFunc(1, 2, 1) #0.367879441171 print valFunc(1, 2, 2) #1.0
こうやるのは面倒。というより、コードを見たときに第一引数(=パラメータ)も変えるのかな??という疑念を持たせてしまうので可読性が悪い。
そこで以下のようにする。
import theano.tensor as T import theano x1 = T.dscalar() x2 = T.dscalar() sigma = theano.shared(1, name='sigma') func = T.exp(-sigma*T.pow((x1-x2), 2)) valFunc = theano.function([x1,x2], func) print valFunc(2, 1) #0.367879441171 print valFunc(2, 2) #1.0
要点はtheano.shared。これを共有変数とか言うらしい。