簡體   English   中英

Python NumPy 數組和矩陣乘法

[英]Python NumPy Array and Matrix Multiplication

我正在閱讀“制作自己的神經網絡”一書,並按照示例來實現我的第一個神經網絡。 我理解了基本概念,特別是這個方程,其中輸出是通過輸入和權重的矩陣點積來計算的:

X = W * I

其中 X 是應用 Sigmoid 之前的輸出,W 是鏈接權重,I 是輸入。

現在在書中,他們確實有一個函數,可以將這個輸入作為一個數組,然后將該數組轉換為二維數組。 我的理解是,X 的值是這樣計算的,基於:

W = [0.1, 0.2, 0.3
     0.4, 0.5, 0.6
     0.7, 0.8, 0.9]

I = [1
     2
     3]

因此,如果我現在為 [1,2,3] 之類的輸入傳入一個數組,為什么我需要執行以下操作才能將其轉換為本書中所做的二維數組:

inputs = numpy.array(inputs, ndmin=2).T

有任何想法嗎?

您在此處輸入的是一維列表(或一維數組):

I = [1, 2, 3]

這個一維數組背后的想法如下:如果這些數字表示花瓣的寬度(厘米)、長度和重量(以克為單位):您的花瓣將有1cm的寬度、 2cm的長度和一個重量3g

將輸入I轉換為二維數組對於兩件事來說是必要的:

  • 首先,默認情況下,使用numpy.array(inputs)將此列表轉換為 NumPy 數組將產生一個形狀為 (3,) 的數組,第二維未定義。 通過設置ndmin=2 ,它強制維度為 (3, 1),這樣就不會產生任何與 NumPy 相關的問題,例如在使用矩陣乘法等時。
  • 其次,也許更重要的是,正如我在評論中所說的那樣,神經網絡中的數據通常以這種方式存儲在數組中,因為數組中的每一行都將代表一個不同的特征(因此每個特征都有一個唯一的列表) )。 換句話說,這只是一種傳統的說法,你不會混淆蘋果和梨(在這​​種情況下,長度和重量)

因此,當您執行inputs = numpy.array(inputs, ndmin=2).T ,您最終會得到:

array([[1],    # width
       [2],    # length
       [3]])   # weight

不是

array([1, 2, 3])

希望它使事情更清楚一些!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM