日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 人文社科 > 生活经验 >内容正文

生活经验

机器学习入门(04)— 神经网络多维数组 NumPy 相乘运算

發(fā)布時(shí)間:2023/11/27 生活经验 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 机器学习入门(04)— 神经网络多维数组 NumPy 相乘运算 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1. 多維數(shù)組

NumPy 構(gòu)建多維數(shù)組代碼示例如下:

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]: 

從以上可以看出:

  • 數(shù)組的維數(shù)可以通過 np.ndim() 函數(shù)獲得;
  • 數(shù)組的形狀可以通過實(shí)例變量 shape 獲得;

注意,這里的 A.shape 的結(jié)果是個(gè)元組( tuple )。這是因?yàn)橐痪S數(shù)組的情況下也要返回和多維數(shù)組的情況下一致的結(jié)果。

例如,二維數(shù)組時(shí)返回的是元組(4,3),三維數(shù)組時(shí)返回的是元組(4,3,2),因此一維數(shù)組時(shí)也同樣以元組的形式返回結(jié)果。

生成一個(gè)二維數(shù)組:

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]: 

這里生成了一個(gè) 3 × 2 的數(shù)組 B 。3 × 2 的數(shù)組表示第一個(gè)維度有 3 個(gè)元素,第二個(gè)維度有 2 個(gè)元素。另外,第一個(gè)維度對(duì)應(yīng)第 0 維,第二個(gè)維度對(duì)應(yīng)第 1 維。二維數(shù)組也稱為矩陣( matrix )。

2. 矩陣相乘

2 × 2 的矩陣,其乘積可以像圖 3-11 這樣進(jìn)行計(jì)算:

矩陣的乘積是通過左邊矩陣的行(橫向)和右邊矩陣的列(縱向)以對(duì)應(yīng)元素的方式相乘后再求和而得到的。并且,運(yùn)算的結(jié)果保存為新的多維數(shù)組的元素。

比如,A 的第 1 行和 B 的第 1 列的乘積結(jié)果是新數(shù)組的第 1 行第 1 列的元素,A 的第 2 行和 B 的第 1 列的結(jié)果是新數(shù)組的第 2 行第 1 列的元素。

用代碼實(shí)現(xiàn):

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]: 

AB 都是 2 × 2 的矩陣,它們的乘積可以通過 NumPynp.dot() 函數(shù)計(jì)算(乘積也稱為點(diǎn)積)。 np.dot() 接收兩個(gè) NumPy 數(shù)組作為參數(shù),并返回?cái)?shù)組的乘積。

這里要注意的是, np.dot(A, B)np.dot(B, A) 的值可能不一樣。和一般的運(yùn)算( +* 等)不同,矩陣的乘積運(yùn)算中,操作數(shù)( AB )的順序不同,結(jié)果也會(huì)不同。

注意:

  • 矩陣 A 的形狀是 2 × 3,矩陣 B 的形狀是 3 × 2,矩陣 A 的第 1 維的元素個(gè)數(shù)(3)和矩陣 B 的第 0 維的元素個(gè)數(shù)(3)相等。如果這兩個(gè)值不相等,則無法計(jì)算矩陣的乘積。
  • 運(yùn)算結(jié)果的矩陣 C 的形狀是由矩陣 A 的行數(shù)和矩陣 B 的列數(shù)構(gòu)成的。
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. 神經(jīng)網(wǎng)絡(luò)的內(nèi)積

使用 NumPy 矩陣來實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò)。這里我們以圖 3-14 中的簡(jiǎn)單神經(jīng)網(wǎng)絡(luò)為對(duì)象。這個(gè)神經(jīng)網(wǎng)絡(luò)省略了偏置和激活函數(shù),只有權(quán)重。

實(shí)現(xiàn)該神經(jīng)網(wǎng)絡(luò)時(shí),要注意 XWY 形狀,特別是 XW 的對(duì)應(yīng)維度的元素個(gè)數(shù)是否一致,這一點(diǎn)很重要。

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 (多維數(shù)組的點(diǎn)積),可以一次性計(jì)算出 Y 的結(jié)果。這意味著,即便 Y 的元素個(gè)數(shù)為100 或 1000,也可以通過一次運(yùn)算就計(jì)算出結(jié)果。

如果不使用 np.dot ,就必須單獨(dú)計(jì)算 Y 的每一個(gè)元素(或者說必須使用 for 語(yǔ)句),非常麻煩。

參考:《深度學(xué)習(xí)入門:基于Python的理論與實(shí)現(xiàn)》

總結(jié)

以上是生活随笔為你收集整理的机器学习入门(04)— 神经网络多维数组 NumPy 相乘运算的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。