神經網路問題
老師:
Day 75的題目說:
通過增加更多的中間層,以對更多關係的組合進行建模,syn1 權值矩陣將隱層的組合輸出映射到最終結果,而在更新 syn1 的同時,還需要更新 syn0 權值矩陣,以從輸入資料中更好地產生這些組合
原本的範例程式是 L0 * syn0 -> L1、 sigmoid(L1) -> y(預測值)
所以題意是要我們曾加一層L2,讓網路變成:
L0 * syn0 -> L1、 L1 * syn1->L2、sigmoid(L2) -> y(預測值)的意思囉?
在試著這麼做的時候
新增的L2層的誤差,仿照原範例的L1層誤差,寫成L2_error = y - L2(誤差=真值-預測值)
但接下來要計算L1的誤差時,就不知道該怎麼算了,也因此不曉得該如何調整syn0
不曉得老師能否給予提示?
回答列表
-
2019/07/13 下午 05:29Jeffrey贊同數:0不贊同數:0留言數:0
# Feed forward through layers 0, 1, and 2
# l0 網路第 1 層,即網路輸入層。
# l1 網路第 2 層,常稱作隱藏層。
# l2 假定為網路最後一層,隨著訓練進行,其輸出應該逐漸接近正確結果
l0 = X
l1 = nonlin(np.dot(l0,syn0))
l2 = nonlin(np.dot(l1,syn1))
# how much did we miss the target value?
# l2_error 該值說明了神經網路預測時“丟失”的數目。
# l2_delta 該值為經確信度加權後的神經網路的誤差,除了確信誤差很小時,它近似等於預測誤差。
# l1_error 該值為 l2_delta 經 syn1 加權後的結果,從而能夠計算得到中間層/隱層的誤差。
# l1_delta 該值為經確信度加權後的神經網路 l1 層的誤差,除了確信誤差很小時,它近似等於 l1_error 。
# in what direction is the target value?
# were we really sure? if so, don't change too much.
l2_delta = l2_error*nonlin(l2,deriv=True)