簡體   English   中英

XOR神經網絡2-1-1

[英]XOR neural network 2-1-1

我正在嘗試使用2個輸入,1個隱藏層元素和1個輸出的類型在神經網絡中實現XOR。 但是學習率確實很差(0,5)。 我認為這是因為我缺少輸入和輸出之間的聯系,但是我不確定如何做到這一點。 我已經建立了偏見聯系,以便更好地學習。 僅使用Numpy。

def sigmoid_output_to_derivative(output):
  return output*(1-output)
a=0.1
X = np.array([[0,0],
[0,1],
[1,0],
[1,1]])
np.random.seed(1)

y = np.array([[0],
[1],
[1],
[0]])
bias = np.ones(4)
X = np.c_[bias, X]

synapse_0 = 2*np.random.random((3,1)) - 1
synapse_1 = 2*np.random.random((1,1)) - 1

for j in (0,600000):

  layer_0 = X
  layer_1 = sigmoid(np.dot(layer_0,synapse_0))
  layer_2 = sigmoid(np.dot(layer_1,synapse_1))
  layer_2_error = layer_2 - y

  if (j% 10000) == 0:
    print( "Error after "+str(j)+" iterations:" + str(np.mean(np.abs(layer_2_error))))

  layer_2_delta = layer_2_error*sigmoid_output_to_derivative(layer_2)

  layer_1_error = layer_2_delta.dot(synapse_1.T)

  layer_1_delta = layer_1_error * sigmoid_output_to_derivative(layer_1)

  synapse_1 -= a *(layer_1.T.dot(layer_2_delta))
  synapse_0 -= a *(layer_0.T.dot(layer_1_delta))

您需要注意以下語句

學習率不好

通常,學習速率是梯度下降沿負梯度方向采取的步長。 因此,我不確定學習率低是什么意思。

我也不確定我是否正確理解了您的代碼,但是神經網絡的前進步驟基本上是隱藏層的權重矩陣乘以輸入向量的矩陣乘法。 (如果正確設置所有內容)這將導致矩陣等於隱藏層的大小。 現在,您可以在將邏輯函數逐元素應用於此矩陣之前簡單地添加偏差。

h_i = f(h_i+bias_in)

然后,您可以對隱藏層乘以輸出權重來執行相同的操作,並對其激活以獲取輸出。

o_j = f(o_j+bias_h)

向后的步驟是計算輸出層和隱藏層的增量,包括使用函數進行的另一個元素操作

sigmoid_output_to_derivative(輸出)

並使用梯度更新兩個權重矩陣(此處需要學習率來定義步長)。 梯度只是相應節點的值乘以其增量。 注意:對於輸出節點和隱藏節點,增量的計算方式有所不同。

我建議您為偏差保留單獨的變量。 因為現代方法通常通過將其連接音符的增量相加來乘以不同的學習率來更新這些值,然后從特定偏差中減去該乘積。

看一下以下教程(它使用numpy):

http://peterroelants.github.io/posts/neural_network_implementation_part04/

暫無
暫無

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

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