欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

如何用代碼編寫一個神經(jīng)網(wǎng)絡異或運算器

洪振霞2年前21瀏覽0評論

如何用代碼編寫一個神經(jīng)網(wǎng)絡異或運算器?

我們先來看下異或問題的真值表:

從真值表上,我們看到,異或問題的輸出和任何單個輸入間都不存在線性關系,而是由兩個輸入同時決定。這就意味著,如果我們僅僅將輸入層和輸出層直接連接起來,網(wǎng)絡無法成功學習異或運算。換句話說,我們至少需要一個隱藏層。

所以,我們的神經(jīng)網(wǎng)絡將是一個三層架構:輸入層、隱藏層、輸出層。

確定了網(wǎng)絡的層數(shù)之后,我們接著考慮激活函數(shù)。因為輸出是1或0,因此我們選用sigmoid作為激活函數(shù)。

隨機初始化權重,使用反向傳播和梯度下降,我們就得到了進行異或運算的神經(jīng)網(wǎng)絡。

下面的示例代碼使用Python,不過這一邏輯是通用的,換成其他語言也一樣。

導入numpy(這將是我們唯一的依賴)

import numpy as np

前向傳播(X為輸入數(shù)據(jù),我們這里省略了sigmoid的定義,和隨機化初始化權重w0、w0的過程)

l0 = X

l1 = sigmoid(np.dot(l0, w0))

l2 = sigmoid(np.dot(l1, w1))

看下當前誤差多少(y為ground truth,也就是標準答案)

l2_error = y - l2

反向傳播(deriv_sigmoid為sigmoid的導數(shù),這里我們省略了它的定義)

l2_delta = l2_error * deriv_sigmoid(l2)

l1_error = l2_delta.dot(w1.T)

l1_delta = l1_error * deriv_sigmoid(l1)

w1 += l1.T.dot(l2_delta)

w0 += l0.T.dot(l1_delta)

將以上過程迭代個幾萬次,就是訓練神經(jīng)網(wǎng)絡。

java 異或,如何用代碼編寫一個神經(jīng)網(wǎng)絡異或運算器