机器学习入门(04)— 神经网络多维数组 NumPy 相乘运算
1. 多維數組
用 NumPy 構建多維數組代碼示例如下:
In [1]: import numpy as npIn [2]: A = np.array([1,2,3,4])In [3]: A
Out[3]: array([1, 2, 3, 4])In [4]: np.ndim(A)
Out[4]: 1In [5]: A.shape
Out[5]: (4,)In [6]: A.shape[0]
Out[6]: 4In [7]:
從以上可以看出:
- 數組的維數可以通過
np.ndim()函數獲得; - 數組的形狀可以通過實例變量
shape獲得;
注意,這里的 A.shape 的結果是個元組( tuple )。這是因為一維數組的情況下也要返回和多維數組的情況下一致的結果。
例如,二維數組時返回的是元組(4,3),三維數組時返回的是元組(4,3,2),因此一維數組時也同樣以元組的形式返回結果。
生成一個二維數組:
In [7]: B = np.array([[1,2], [3, 4], [5, 6]])In [8]: B
Out[8]:
array([[1, 2],[3, 4],[5, 6]])In [9]: B.shape
Out[9]: (3, 2)In [11]: B.ndim
Out[11]: 2In [12]:
這里生成了一個 3 × 2 的數組 B 。3 × 2 的數組表示第一個維度有 3 個元素,第二個維度有 2 個元素。另外,第一個維度對應第 0 維,第二個維度對應第 1 維。二維數組也稱為矩陣( matrix )。
2. 矩陣相乘
2 × 2 的矩陣,其乘積可以像圖 3-11 這樣進行計算:
矩陣的乘積是通過左邊矩陣的行(橫向)和右邊矩陣的列(縱向)以對應元素的方式相乘后再求和而得到的。并且,運算的結果保存為新的多維數組的元素。
比如,A 的第 1 行和 B 的第 1 列的乘積結果是新數組的第 1 行第 1 列的元素,A 的第 2 行和 B 的第 1 列的結果是新數組的第 2 行第 1 列的元素。
用代碼實現:
In [12]: A = np.array([[1,2], [3,4]])In [13]: B = np.array([[5,6], [7,8]])In [14]: A
Out[14]:
array([[1, 2],[3, 4]])In [15]: B
Out[15]:
array([[5, 6],[7, 8]])In [16]: A.dot(B)
Out[16]:
array([[19, 22],[43, 50]])In [17]: np.dot(A, B)
Out[17]:
array([[19, 22],[43, 50]])In [18]: np.dot(B, A)
Out[18]:
array([[23, 34],[31, 46]])In [19]:
A 和 B 都是 2 × 2 的矩陣,它們的乘積可以通過 NumPy 的 np.dot() 函數計算(乘積也稱為點積)。 np.dot() 接收兩個 NumPy 數組作為參數,并返回數組的乘積。
這里要注意的是, np.dot(A, B) 和 np.dot(B, A) 的值可能不一樣。和一般的運算( + 或 * 等)不同,矩陣的乘積運算中,操作數( A 、 B )的順序不同,結果也會不同。
注意:
- 矩陣
A的形狀是 2 × 3,矩陣B的形狀是 3 × 2,矩陣A的第 1 維的元素個數(3)和矩陣B的第 0 維的元素個數(3)相等。如果這兩個值不相等,則無法計算矩陣的乘積。 - 運算結果的矩陣
C的形狀是由矩陣A的行數和矩陣B的列數構成的。
In [19]: B = np.array([7,8])In [20]: A = np.array([[1,2], [3, 4]])In [22]: B
Out[22]: array([7, 8])In [23]: A
Out[23]:
array([[1, 2],[3, 4]])In [24]: np.dot(B, A)
Out[24]: array([31, 46])In [25]: B.shape
Out[25]: (2,)In [26]: A.shape
Out[26]: (2, 2)In [27]:
In [27]: A = np.array([[1,2], [3, 4], [5,6]])In [28]: A
Out[28]:
array([[1, 2],[3, 4],[5, 6]])In [29]: A.shape
Out[29]: (3, 2)In [30]: B = np.array([7,8])In [31]: B
Out[31]: array([7, 8])In [32]: B.shape
Out[32]: (2,)In [33]: np.dot(A, B)
Out[33]: array([23, 53, 83])In [34]:
3. 神經網絡的內積
使用 NumPy 矩陣來實現神經網絡。這里我們以圖 3-14 中的簡單神經網絡為對象。這個神經網絡省略了偏置和激活函數,只有權重。
實現該神經網絡時,要注意 X 、 W 、 Y 形狀,特別是 X 和 W 的對應維度的元素個數是否一致,這一點很重要。
In [1]: import numpy as npIn [2]: X = np.array([1,2])In [3]: W = np.array([[1,3,5], [2,4,6]])In [5]: X
Out[5]: array([1, 2])In [6]: W
Out[6]:
array([[1, 3, 5],[2, 4, 6]])In [7]: Y = np.dot(X, W)In [8]: Y
Out[8]: array([ 5, 11, 17])In [9]:
如上所示,使用 np.dot (多維數組的點積),可以一次性計算出 Y 的結果。這意味著,即便 Y 的元素個數為100 或 1000,也可以通過一次運算就計算出結果。
如果不使用 np.dot ,就必須單獨計算 Y 的每一個元素(或者說必須使用 for 語句),非常麻煩。
參考:《深度學習入門:基于Python的理論與實現》
總結
以上是生活随笔為你收集整理的机器学习入门(04)— 神经网络多维数组 NumPy 相乘运算的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 乌镇对警察免费吗
- 下一篇: 机器学习入门(05)— 使用 NumPy