Search on the blog

2016年7月17日日曜日

便利なPythonライブラリ(8)autograd

その名の通り自動微分してくれるライブラリです。

インストール
pipでインストール出来ます。

サンプル(1)
f(x) = 3x2という関数の一次微分および二次微分を計算してみます。

from autograd import grad
import matplotlib.pyplot as plt
import numpy as np

def f(x):
  return 3 * x**2

df = grad(f)
d2f = grad(df)

x = np.linspace(-3, 3, 100)
plt.plot(x, f(x), label='f')
plt.plot(x, np.vectorize(df)(x), label='df')
plt.plot(x, np.vectorize(d2f)(x), label='d2f')
plt.legend()
plt.show()

以下のようなグラフが表示されます。
サンプル(2)
もちろん、多変数関数の微分も可能です。
ナブラとヘッセ行列を求めてみます。
簡単のため、二次形式の関数をサンプルとして使います。

from autograd import grad as nabla
from autograd.convenience_wrappers import hessian
import numpy as np

def f(x):
    Q = [[3, 2],
        [2, 7]]
    return 1./2 * np.dot(x, np.dot(Q, x))

x = np.array([1.0, 2.0])
print (nabla(f)(x))
print (hessian(f)(x))

出力結果を見ると、正しく微分できていることが確認できます。
$ python sample_autograd.py
[  7.  16.]
[[ 3.  2.]
 [ 2.  7.]]

0 件のコメント:

コメントを投稿