Theano
Theano
- 数値計算を高速化してくれるライブラリ。
- Online Document “Deep Learning Tutorials” で モデルの実装に用いられている。
- 実行時に Cのコードが生成・コンパイルされる (高速)
- 自動微分できる
Install
pip install theano
インポート
import theano
import theano.tensor as T
シンボル
ベクトルや行列、スカラを表す変数は全てシンボルとして扱う。
定義の基本
- float型のスカラを表す
x
というシンボルを定義するx = T.dscalar('x')
- int型のスカラを表す
x
というシンボルを定義する。x = T.iscalar('x')
- ベクトルを定義する
x = T.dvector('x')
- 行列を定義する
x = T.dmatrix('x')
式によってシンボルを定義
x
というシンボルを用いてy
というシンボルを定義する。y = x ** 2 + x + 1
関数
定義
上のようにして定義した y
を関数として扱うためには、関数を定義する。
f = theano.function(inputs=[x], outputs=y)
- inputs, outputs はそれぞれ入力、出力に対応するシンボル。
theano.function
を呼び出した時には、 内部で数式に対応するプログラムがコンパイルされる。
利用
上のように定義すると次のように値が計算できる。
f(1)
f(2)
f(3)
引数はスカラでなくても良い(ベクトルでも良い)。
微分
例えば次のように定義した時
x = T.dscalar('x')
y = x ** 2
y
の微分は T.grad
を使って計算できる。
gy = T.grad(const=y, wrt=x)
cost
: 微分したい関数wrt
: 微分で用いる変数
gy
は式を表すので、 gy
を用いた関数を定義して計算する。
g = theano.function(inputs=[x], outputs=gy)
g(1)
g(2)
g(3)