未分類

数値微分をやってみる

ニューラルネットワークが教師データに対して、どれだけ適合していないかを測る指標に、損失関数とやらを使うらしい。
その損失関数は、勾配とやらを使うらしい。

取りあえずその前に微分のチェックが必要とのこと。
なので数値微分をとりあえずpython3でやってみる。

まずコードから。

[py]
def testDiff(f, x):
    h = 1e-4
    return (f(x+h) - f(x-h)) / (2*h)
[/py]

xの前後に微小な値を入れて、x+hとx-h間の傾きをとるって感じかな。

上記の式をテキストエディタで記入後、testDiff.pyで保存。

数式は適当に
y=0.05*x**2 + 0.1*x
(y=0.05x^2+0.1xの意)
あたりで。

上記式をグラフで確認したいので、
下記のコードを記入後、testBibun.pyで保存。

[py]

import numpy as np
import matplotlib.pylab as mplt

def func1(x):
    return 0.05*x**2 + 0.1*x 

x = np.arange(0.0, 30.0, 0.1)
y = func1(x)
mplt.plot(x, y)
mplt.show()

[/py]

python3で実行してみる。

python testBibun.py

こんなグラフ画像が表示される。
bibun1

ちょっと曲線具合がイマイチかな。
まあいいでしょう。

続いて、pythonのインタプリタで実行する。

python

>>>import testDiff
>>>import testBibun as tbi
グラフが表示されるので、閉じちゃってください。
閉じないと入力できないです。ハイ。

ちなみにここでは、さっき作った2つのファイルをインポートしています。

>>>testDiff.testDiff(tbi.func1, 10)
1.0999999999938836

インポートしたtestDiff.pyファイルのtestDiff関数を呼び出して、
0.05*x**2 + 0.1*xの数式とxに10を入れろって命令してます。

>>>testDiff.testDiff(tbi.func1, 29)
3.0000000000285354

今度はxに29を入れてみました。

どうでしょう。

http://www.wolframalpha.com/にて微分の確認したところ、
オッケーでした。

前にJAVAを使って、数値積分ゴニョゴニョやってたけど、
この数値微分てのも結構使えますなあ。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です