農林漁牧網

您現在的位置是:首頁 > 農業

AI如何從零開始構建首個神經網路?

2023-01-01由 讀芯術 發表于 農業

如何構建人工神經網路

全文共2278字,預計學習時長6分鐘

AI如何從零開始構建首個神經網路?

圖源:Google

很長時間以來,我一直對構建神經網路躍躍欲試,現在終於有機會來研究它了。我想我並沒有完全掌握神經網路背後的數學原理,所以先教人工智慧做一些簡單的事情吧。

程式碼原理

神經網路並不是一個新概念,1943年,由沃倫·麥卡洛克(WarrenMcCulloch)和沃爾特·皮茨(Walter Pitts)首次提出。

我們將構建一個沒有隱藏層或感知器的單層神經網路。它由一個包含訓練示例、突觸或權重以及神經元的輸入層和一個含有正確答案的輸出層組成。神經網路圖形如下所示:

AI如何從零開始構建首個神經網路?

此外,需要了解一些如sigmoid和導數之類的數學概念,以清楚神經元的學習方式。神經元只需進行簡單操作,即取一個輸入值,乘以突觸權重。之後,對所有這些乘法結果求和,並使用sigmoid函式獲得0到1內的輸出值。

神經元表示:

AI如何從零開始構建首個神經網路?

Sigmoid函式:

AI如何從零開始構建首個神經網路?

問題界定

輸入層上有數字序列。我們預期的理想結果是,在資料集樣本中,如果輸入第一個數字是1,則神經網路返回1;如果第一個數字是0,則返回0。結果在輸出層中顯示。問題集如下圖:

AI如何從零開始構建首個神經網路?

先決條件

開始編碼的前提——在概念上達到一定程度的理解。

NumPY安裝:

pip install numpy

安裝成功,即可進入編碼部分。首先,將NumPy匯入Python檔案中:

import numpy as np

訓練神經網路

首先,建立一個sigmoid函式:

AI如何從零開始構建首個神經網路?

其次,定義訓練示例、輸入(4×5矩陣)和輸出:

AI如何從零開始構建首個神經網路?

接下來,透過生成隨機值來初始化突觸權重,並將結果排列在4×1的矩陣中:

AI如何從零開始構建首個神經網路?

最後,構建訓練模型。使用for迴圈,所有的訓練都將在此迴圈中進行。呼叫sigmoid函式,並將所有輸入的總和乘以sigmoid權重。然後採用Np。dot進行矩陣乘法。過程如下圖:

AI如何從零開始構建首個神經網路?

輸出結果如下圖:

AI如何從零開始構建首個神經網路?

現在進行神經網路模型訓練,方法是計算sigmoid函式的輸出和實際輸出之間的差值。之後可以根據誤差的嚴重性調整權重。多次重複這個過程,比如說一萬次。定義sigmoid導數:

AI如何從零開始構建首個神經網路?

以下是計算和調整權重的方法:

AI如何從零開始構建首個神經網路?

開始學習,觀察學習時長會如何影響結果。從100次迭代開始:

AI如何從零開始構建首個神經網路?

開始情況比較樂觀——我們的人工智慧已經學會了識別模式,但錯誤率仍然居高不下。現在進行1000次迭代:

AI如何從零開始構建首個神經網路?

情況好轉,繼續進行10000次迭代:

AI如何從零開始構建首個神經網路?

10萬次迭代:

AI如何從零開始構建首個神經網路?

我們可以繼續更多次的學習迭代,但永遠無法達到100%的準確性,因為這需要進行無限次的計算。但即使在最壞的情況下,準確率也達到了99。77%,這相當不錯。

對於最終程式碼,我寫得很漂亮,並透過函式將其分開。除此之外,在文字檔案中,我還添加了一種非常複雜方法以儲存權重。這樣只需進行一次學習,而且需要使用AI時,只需匯入權重並利用sigmoid函式即可。

import numpy as npfrom tempfile import TemporaryFiledef sigmoid(x): return1 / (1 + np。exp(-x))def sigmoid_der(x): return x * (1 - x)def training(): training_inputs = np。array([[0,0,1,0], [1,1,1,0], [1,0,1,0], [0,1,1,1], [0,1,0,1]]) trainign_outputs = np。array([[0,1,1,0,0]])。T np。random。seed(1) synaptic_weights = 2 * np。random。random((4,1)) - 1for i in range(50000): inputs = training_inputs outputs = sigmoid(np。dot(inputs, synaptic_weights)) error = trainign_outputs - outputs adjustments = error * sigmoid_der(outputs) synaptic_weights += np。dot(inputs。T, adjustments) data_file = open(“data。txt”, “w”) for row in synaptic_weights: np。savetxt(data_file, row) data_file。close()def thinking(inputs): synaptic_weights = np。loadtxt(“data。txt”)。reshape(4, 1) outputs = sigmoid(np。dot(inputs, synaptic_weights)) print(outputs) return outputstraining()thinking(np。array([1,1,0,1]))

AI如何從零開始構建首個神經網路?

圖源:Pixabay

我的第一個人工智慧已經準備就緒,隨時可以投入生產。即使它只能在極小的資料集上識別非常簡單的模式,但現在我們可以擴充套件它,例如,嘗試教授人工智慧識別圖片中的內容。學無止境,精進不休!

AI如何從零開始構建首個神經網路?

留言點贊關注

我們一起分享AI學習與發展的乾貨

如轉載,請後臺留言,遵守轉載規範