1

根據this tutorial(純NumPy的Python),我想建立一個簡單的(最簡單的學習目的)神經網絡(Perceptron),它可以訓練識別「一封信。在本教程中,在提出的示例中,他們構建了一個可以學習「AND」邏輯運算符的網絡。在這種情況下,我們有一些輸入(4×3矩陣)和一個輸出(4 * 1矩陣):訓練字母圖像到全批培訓的神經網絡

enter image description here

每次我們減去輸出矩陣與輸入矩陣和計算誤差和更新率和等等。

現在我想給一個圖像作爲輸入,在這種情況下,我的輸出是什麼?我怎樣才能定義那個圖像是一個「A」字母?一種解決方案是將「1」定義爲「A」字母,將「0」定義爲「非A」,但是如果我的輸出是標量,我怎樣才能用隱藏層減去它並計算錯誤和更新權重?本教程使用「全批」訓練並將整個輸入矩陣與權重矩陣相乘。我想用這種方法。最終的目標是設計一個能夠以最簡單的形式識別「A」字母的神經網絡。我不知道如何做到這一點。

回答

2

Fist off:很好,你試圖通過從頭開始編程來理解神經網絡,而不是從一些複雜的庫開始。讓我試着清理一下:你的理解在這裏:

每次我們用輸入矩陣減去輸出矩陣並計算誤差和更新率等等。

是不正確的。在你的例子中,輸入矩陣X是你呈現給你的神經網絡的輸入。輸出Y是您希望網絡爲X執行的操作:第一個元素Y[0]是第一行X的期望輸出,依此類推。我們經常稱之爲「目標載體」。現在計算損失函數(即錯誤),我們將網絡的輸出(鏈接示例代碼中的L2)與目標矢量Y進行比較。換句話說,我們將想要網絡做的(Y)與真的做的(L2)做了比較。然後我們朝着更接近Y的方向邁出一步。

現在,如果您想使用圖像作爲輸入,您應該將圖像中的每個像素視爲一個輸入變量。此前,我們有兩個輸入變量:A和B,爲此我們想要計算的術語X = A∧B.

如果我們取一個8×8像素的圖像,我們有8 * 8 = 64個輸入變量。因此,我們的輸入矩陣X應該是一個有65列的矩陣(圖像的64個像素+ 1個輸入作爲偏置項,它總是= 1),每個訓練樣例有一行。例如。如果您有26個字母中的每一個的一個圖像,矩陣將包含26行。

輸出(目標)矢量Y應該具有與X相同的長度,即前面例子中的26。 Y中的每個元素在相應的輸入行是A時爲1,如果是另一個字母則爲0。在我們的示例中,Y[0]將爲1,Y[1:]將爲0。

現在,您可以使用與以前相同的代碼:輸出L2將是一個包含網絡預測的向量,然後您可以像之前一樣比較Y

tl; dr關鍵的想法是忘記圖像是2D,並將每個輸入圖像存儲爲矢量。

+1

感謝您的出色答案。你最後一句救了我。 「將每個輸入圖像存儲爲矢量」。 我想我必須使用初始形式的圖像。現在,如果我將它轉換爲矢量,我可以設計我的模型。 再次感謝。 – Fcoder