1章 ニューラルネットワークの復習 / 1.1 数学とPythonの復習 |『ゼロから作るDeep Learning2自然言語処理編』
1章 ニューラルネットワークの復習
まずはニューラルネットワークを復習する章なので、復習がてらコード部分を写経。
1.1 数学とPythonの復習
1.1.1 ベクトルと行列
>>> import numpy as np # numpyインポート >>> x = np.array([1,2,3]) # np.array()メソッドで配列生成 >>> x.__class__ #クラス名表示 <class 'numpy.ndarray'> # 多次元配列用クラスndarray >>> x.shape # 多次元配列の形状を示すインスタンス変数shape (3,) # 要素数3 >>> x.ndim # 次元数を示すインスタンス変数ndim 1 #次元数1 >>> W = np.array([[1,2,3], [4,5,6]]) >>> W.shape (2, 3) #2行3列 >>> W.ndim 2 #次元数2
1.1.2 行列の要素ごとの演算
>>> W = np.array([[1,2,3], [4,5,6]]) >>> X = np.array([[0,1,2], [3,4,5]]) >>> W + X # 和 array([[ 1, 3, 5], [ 7, 9, 11]]) >>> W * X # 積 array([[ 0, 2, 6], [12, 20, 30]])
1.1.3 ブロードキャスト
形状の異なる配列同士の演算
>>> A = np.array([[1,2], [3,4]]) >>> A * 10 # 10倍 array([[10, 20], [30, 40]]) >>> >>> A = np.array([[1,2], [3,4]]) >>> b = np.array([10,20]) >>> A * b # 2次元配列(2,2), 1次元配列(1,2)の演算 array([[10, 40], [30, 80]])
1.1.4 ベクトルの内積と行列の積
# ベクトルの内積 >>> a = np.array([1,2,3]) >>> b = np.array([4,5,6]) >>> np.dot(a,b) 32 # 行列の積 >>> A = np.array([[1,2], [3,4]]) >>> B = np.array([[5,6], [7,8]]) >>> np.dot(A,B) array([[19, 22], [43, 50]])
1.1.5 行列の形状チェック
行列の積は、対応する次元の要素数を一致させる必要がある
# 3行2列と、2行4列の積は、3行4列になる >>> C = np.array([[1,2], [3,4], [5,6]]) >>> D = np.array([[1,2,3,4], [5,6,7,8]]) >>> C.shape (3, 2) >>> D.shape (2, 4) >>> np.dot(C,D) array([[11, 14, 17, 20], [23, 30, 37, 44], [35, 46, 57, 68]]) # 2行4列と、3行2列の積は、演算不可 >>> np.dot(D,C) Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: shapes (2,4) and (3,2) not aligned: 4 (dim 1) != 3 (dim 0)
NumPyの練習は、以下が使える。