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)