前回までの「ゼロから作るDeep Learning読むお( ^ω^)」
4章 ニューラルネットワークの学習(4.3節まで)
コードについて
個人的には、この表現に戸惑ってしまった。
return -np.sum(np.log(y[np.arange(batch_size), t])) / batch_size
y[np.arange(batch_size), t]
の部分である。本に書かれている通り、y[[0, 1, 2, 3, 4], [2, 7, 0, 9, 4]]
はnp.array([y[0, 2], y[1, 7], y[2, 0], y[3, 9], y[4, 4]])
を表す(np.arange(batch_size) = np.array([0, 1, 2, 3, 4])
、t = np.array([2, 7, 0, 9, 4])
としている)。試してみよう。
>>> y = np.arange(50)
>>> y = y.reshape(5, 10)
>>> y
array([[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14, 15, 16, 17, 18, 19],
[20, 21, 22, 23, 24, 25, 26, 27, 28, 29],
[30, 31, 32, 33, 34, 35, 36, 37, 38, 39],
[40, 41, 42, 43, 44, 45, 46, 47, 48, 49]])
>>> y[[0, 1, 2, 3, 4], [2, 7, 0, 9, 4]]
array([ 2, 17, 20, 39, 44])
>>> np.array([y[0, 2], y[1, 7], y[2, 0], y[3, 9], y[4, 4]])
array([ 2, 17, 20, 39, 44])
うぬ。
ch04/gradient_1d.py
にある次の関数にだいぶ悩んでしまった。
def tangent_line(f, x):
d = numerical_diff(f, x)
print(d)
y = f(x) - d*x
return lambda t: d*t + y
理由は二つある。一つはlambda式がわからなかったこと、もう一つは知能の著しい低下により1次関数がわからなくなっていたこと。
lambda式については、lambda t: d*t + y
は以下と同等である。
def hoge(t):
d*t + y
つまり、tf = tangent_line(function_1, 5)
で関数が返されるとtf
という名前でhoge
関数を使えるようになる。まどろっこしい説明になったが、ワンライナーで関数を定義からリターンまでできて便利である。
次は悲劇である。
微分係数は傾き→わかる
接線の方程式→直線の方程式に代入しただけだろ
直線の方程式→1次関数から導出できるだろ
1次関数→わからない
2016年11月9日。クリントンとトランプが繰り広げる歴史的な接戦に世界中が沸くなか、日本のどこかでは接線に頭がわいていたのである。
言い訳になるが、y
をtf0
とでもしておいてくれれば直感的にわかったんだからね!ξ゚⊿゚)ξ
勉強メモ
- 機械学習では、データセットを訓練データとテストデータに分けて使用
- 訓練データ:学習用、テストデータ:評価用
- ニューラルネットワークの学習は、損失関数が最小となるように重みパラメータを更新すること
感想
この本を読んでいる人には、微分についてこんなに説明してくれなくてもいいんじゃないかな。
Deep Learningは若年性痴呆症の検査とリハビリにもなることがわかった。
ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装
- 作者: 斎藤康毅
- 出版社/メーカー: オライリージャパン
- 発売日: 2016/09/24
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (17件) を見る