Subscribed unsubscribe Subscribe Subscribe

学習ノート

参考文献

内積って類似度って理解でいいんだっけか...
http://www.slideshare.net/SeiichiUchida/ss-71479583

単純にコサイン類似度なら話はわかるんだけど...

本編

備忘録、殴り書き

3

損失、正解ではない、確率の話。

3.3.2 行列の内積

np.ndim(A) ... 配列の次元数
A.shape ... (行, 列)

>>> A = np.array([[1,2], [3, 4], [5,6]]) 
>>> A.shape
(3, 2)
>>> B = np.array([7,8])
>>> B.shape
(2,)
>>> np.dot(A, B)
array([23, 53, 83])

交差エントロピーってなんや

二乗なら距離ということでわかるんやけど...

4. ニューラルネットワークの学習

{ \displaystyle y = x_0^{2}+x_1^{2}} のグラフ

f:id:domodomodomo:20161108224305p:plain

from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np

"""
>>> x[0]
array([[-3. , -2.9, -2.8, ...,  2.7,  2.8,  2.9],
       [-3. , -2.9, -2.8, ...,  2.7,  2.8,  2.9],
       [-3. , -2.9, -2.8, ...,  2.7,  2.8,  2.9],
       ..., 
       [-3. , -2.9, -2.8, ...,  2.7,  2.8,  2.9],
       [-3. , -2.9, -2.8, ...,  2.7,  2.8,  2.9],
       [-3. , -2.9, -2.8, ...,  2.7,  2.8,  2.9]])

>>> x[1]
array([[-3. , -3. , -3. , ..., -3. , -3. , -3. ],
       [-2.9, -2.9, -2.9, ..., -2.9, -2.9, -2.9],
       [-2.8, -2.8, -2.8, ..., -2.8, -2.8, -2.8],
       ..., 
       [ 2.7,  2.7,  2.7, ...,  2.7,  2.7,  2.7],
       [ 2.8,  2.8,  2.8, ...,  2.8,  2.8,  2.8],
       [ 2.9,  2.9,  2.9, ...,  2.9,  2.9,  2.9]])
"""

x0 = np.arange(-3, 3, 0.1)
x1 = np.arange(-3, 3, 0.1)

# x = np.vstack((x1, x2))
x = np.meshgrid(x0, x1)


print(x)
# x0 = x0.flatten()
# x1 = x1.flatten()

# x = np.array([x0, x1]).T
# x = np.array([x0, x1])

print(x)

def f(x):
  # mesh grid には使えない。
  # return np.sum(x**2)
  return x[0]**2 + x[1]**2

y = f(x)
# x = x.T

# print(y)

fig = plt.figure()
ax = Axes3D(fig)
ax.plot_wireframe(x[0], x[1],  y)
plt.show()

偏微分, 全微分

偏微分は断面
微分は断面を合わせたベクトル
大学の頃やったなーというのを振り返りながらの、イメージ付け。

4.4 勾配 P.104

numerical_gradient を自作
numpy の動作確認も兼ねて。

import numpy as np                                                              
                                                                                
def numerical_gradient(f, x):                                                   
                                                                                
  h = 1e-4 # 0.0001                                                                                           
  grad = np.zeros_like(x)                                                       
                                                                                
  it = np.nditer(x,
    flags=['multi_index'],
    op_flags=['readwrite'])              
  while not it.finished:                                                        
    i = it.multi_index                                                          
                                                                                
    h_i = np.zeros_like(x)                                                        
    h_i[i] = h                                                             
                                                                                
    grad[i] = (f(x+h_i) - f(x-h_i)) / (2*h)                                     
                                                                                
    it.iternext()                                                               
                                                                                
  return grad


# 関数が返す値は1次元でなければならない。
# grad[i] = np.array([3, 4]) はできないから
def f(x):
  return np.sum(x**2)


# dtype=float を忘れないこと
numerical_gradient(f, np.array([2], dtype=float))

class simpleNet 4.4 勾配 P. 111

>>> def f(W):
>>>   return net.loss(x, t)
>>> 
>>> dw = numerical_gradient(f, net.W)


一瞬?ってなった式。f ってこれもう完全に定数でしょ、微分なんかできないんじゃないの?って思った。

○ numerical_gradient(f, net.W) が、やっていること
net.W に対して微分
関数 f の引数 W に対して微分をしていない。

○ ポイント
関数 f の中にある net.loss 関数が参照している net.W と
関数 numerical_gradient に代入されている net.W は同じもの。

5

5.6.1 Affine レイヤ

式5.13 が全然わからない。

{ \displaystyle
\frac{\delta L}{\delta X} = \frac{\delta L}{\delta Y} \cdot W^{\mathrm{T}}
}

Remove all ads