ニューラルネットワークが教師データに対して、どれだけ適合していないかを測る指標に、損失関数とやらを使うらしい。
その損失関数は、勾配とやらを使うらしい。
取りあえずその前に微分のチェックが必要とのこと。
なので数値微分をとりあえず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
こんなグラフ画像が表示される。
ちょっと曲線具合がイマイチかな。
まあいいでしょう。
続いて、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を使って、数値積分ゴニョゴニョやってたけど、
この数値微分てのも結構使えますなあ。