exits

勉強記録

ゼロからDL(1) - 2〜3.5章

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

なんとなく予約注文で買ったこの本をやってみてるぞい.

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

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

フレームワークを使って色々応用やってみる系よりはこういう方が好き.好きなだけ.

自分で書いたコードはここ.

1章

Python入門なのでほぼ読み飛ばした.
python3でnumpymatplotlibを準備した.

公式のソースコードを参照用に落とした.

2章

手始めに,パーセプトロンで論理回路を作ろうという話. ・・・えっとまぁそんなに語るところがない.

3章

nueralnet...
https://github.com/oreilly-japan/deep-learning-from-scratch/blob/master/ch03/nueralnet_mnist.py
すでにプルリクが入っていた.

代表的な活性化関数を作る.

関数はactivation_funcs.pyに実装.

おもしろかった実装.

  • step関数
In [1]: 3 > 0
Out[1]: True

In [2]: -2 > 0
Out[2]: False

In [3]: [-1, -2] > 0
Out[3]: True

In [4]: [] > 0
Out[4]: True

In [5]: import numpy as np

In [6]: np.array([-1, 2]) > 0
Out[6]: array([False, True], dtype=bool)

リストだとなんでもTrueになっちゃうけどnumpy.arrayだと中身でそれぞれ判断してくれるらしい.便利.
で,TrueFalseがキャストで10になるのを利用してstep関数を作ってるのがこんな感じ.

def step_function(x):
    y = x > 0
    return y.astype(np.int)

おもしろい.

  • softmax関数
    これは出力層に使う. 指数関数を使うのでオーバーフローしやすいため,最大値を引いて小さくしたもので計算する.この差は分母と分子で打ち消されるのでOK.
def softmax(x):
    c = np.max(x)
    expx = np.exp(x - c)
    sum_expx = np.sum(expx)
    return expx / sum_expx

できた活性化関数はとりあえず画像にしてみた.
f:id:yue82:20161001180810p:plain:w300
うむ.

重み固定のニューラルネットを作る

numpy.arrayとnumpy.dotでちまちま作る. 出力は特に意味のない数字なので割愛.

MNIST

みんな大好きMNIST.
・・・力尽きたので日曜日に回します.

つづき書いた