gpt4 book ai didi

python - 反向传播:为什么乘以 sigmoid 的导数时误差不趋近于零?

转载 作者:太空宇宙 更新时间:2023-11-04 04:58:40 25 4
gpt4 key购买 nike

我正在尝试对我的简单神经网络实现反向传播,它看起来像这样:2 个输入,2 个隐藏(sigmoid),1 个输出(sigmoid)。但它似乎无法正常工作。

import numpy as np

# Set inputs and labels
X = np.array([ [0, 1],
[0, 1],
[1, 0],
[1, 0] ])

Y = np.array([[0, 0, 1, 1]]).T

# Make random always the same
np.random.seed(1)
# Initialize weights
w_0 = 2 * np.random.rand(2, 2) - 1
w_1 = 2 * np.random.rand(1, 2) - 1

# Learning Rate
lr = 0.1

# Sigmoid Function/Derivative of Sigmoid Function
def sigmoid(x, deriv=False):
if(deriv==True):
return x * (1 - x)
return 1/(1 + np.exp(-x))

# Neural network
def network(x, y, w_0, w_1):
inputs = np.array(x, ndmin=2).T
label = np.array(y, ndmin=2).T

# Forward Pass
hidden = sigmoid(np.dot(w_0, inputs))
output = sigmoid(np.dot(w_1, hidden))

# Calculate error and delta
error = label - output
delta = error * sigmoid(output, True)

hidden_error = np.dot(w_1.T, error)
delta_hidden = error * sigmoid(hidden, True)

# Update weight
w_1 += np.dot(delta, hidden.T) * lr
w_0 += np.dot(delta_hidden, record.T) * lr

return error

# Train
for i in range(6000):
for j in range(X.shape[0]):
error = network(X[j], Y[j], w_0, w_1)

if(i%1000==0):
print(error)

当我打印出我的错误时,我得到: Figure 1 .

这是不对的,因为它不接近于 0。

当我将 delta 更改为:

delta = error

它以某种方式起作用。 Figure 2

但是为什么?我们不应该在进一步传递之前将误差乘以 sigmoid 函数的导数吗?

最佳答案

我觉得应该是

delta_hidden = hidden_error * sigmoid(hidden, True)

关于python - 反向传播:为什么乘以 sigmoid 的导数时误差不趋近于零?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46395146/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com