読者です 読者をやめる 読者になる 読者になる

cBlog

Tips for you.

ゼロから作るDeep Learning読むお( ^ω^) #3

Python 画像処理

前回までの「ゼロから作るDeep Learning読むお( ^ω^)」

yaritakunai.hatenablog.com

 

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日。クリントンとトランプが繰り広げる歴史的な接戦に世界中が沸くなか、日本のどこかでは接線に頭がわいていたのである。

言い訳になるが、ytf0とでもしておいてくれれば直感的にわかったんだからね!ξ゚⊿゚)ξ

 

勉強メモ

  • 機械学習では、データセットを訓練データとテストデータに分けて使用
  • 訓練データ:学習用、テストデータ:評価用
  • ニューラルネットワークの学習は、損失関数が最小となるように重みパラメータを更新すること

 

感想

この本を読んでいる人には、微分についてこんなに説明してくれなくてもいいんじゃないかな。

Deep Learningは若年性痴呆症の検査とリハビリにもなることがわかった。

ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装

ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装