雑食性雑感雑記

知識の整理場。ため込んだ知識をブログ記事として再構築します。

Theano 事始め

概要

  • Theano をインストールしてみる。
  • 簡単な数式処理を試してみる。
  • 微分計算を試してみる。

Theano って??

  • Theanoの公式ページ
    • Python のライブラリ
    • 数式定義、評価、多次元配列計算等々、色々できる。
    • 最近流行りの「Deep Learning」のためにも使われている!!
    • ( 公式の Welcome ページに色々書いてあるが、数値計算系に凄く強い。)

インストール

  • easy_install や pip にてインストールできる。
  • 今回は pip を使用。
$ pip install Theano
  • 上記、Python 良く使っているマシン上で実行したので…
    • 数値計算ライブラリ「scipy」等、Theano に必要なライブラリが無いとエラーが出るかも。

チュートリアル

  • 公式からリンク貼ってある、チュートリアルページからいくつか試してみる。
    • チュートリアルページ
      • Python については、知っているので省略。
      • Numpy についても、ある程度やったことあるので省略。

数式の定義と評価例

  • Baby Steps - Algebra → Adding two Scalarsより
  • 実数 ( double ) のスカラー ( scalar )値 x, y を定義
  • z = x + y として、function 定義。
  • f( 2, 3 ) => z = 2 + 3 = 5
  • f( 16.3, 12.1 ) => z = 16.3 + 12.1 = 28.4
import theano.tensor as T
from theano import function

x = T.dscalar('x')
y = T.dscalar('y')
z = x + y
f = function( [x, y], z )

print f( 2, 3 )

print f( 16.3, 12.1 )

  • 実数 ( double ) の配列 ( matrix ) 値 x, y を定義し、上と同様の演算
  • ( ただし配列 )
import numpy
import theano.tensor as T
from theano import function
x = T.dmatrix('x')
y = T.dmatrix('y')
z = x + y
f = function( [x, y], z )

print f( [ [1, 2], [3, 4] ], [ [10, 20], [30, 40] ] )

print f( numpy.array( [ [1, 2], [3, 4] ] ), numpy.array( [
[10, 20], [30, 40] ] ) )

  • (主な) 型と種別
    • 変数型:整数 (integer) 、実数 (float & double)、複素数 (complex)
    • 変数種別:スカラー (scalar)、ベクトル (vector)、行列 (matrix)、テンソル (tensor) (3次 & 4次) が定義できるとのこと。
      • 4次元テンソルまで使えるので、世の中の大体の数式は Theano 使えるの

では。

      • 個人的には、n次元テンソルまで使えるといいな。( 何に使うかは置いておいて。)

微分計算 (勾配)

import theano.tensor as T
from theano import pp

x = T.dscalar('x')
y = x ** 2
gy = T.grad( y, x )
print pp(gy)

f = function( [x], gy )
print f(4)
print f(94.2)

  • Jacobian や Hessian も計算できるとのこと。