神经网络python代码中的疑问
我一直在努力学习人工智能,但我有以下关于它的疑问神经网络python代码中的疑问,python,neural-network,artificial-intelligence,Python,Neural Network,Artificial Intelligence,我一直在努力学习人工智能,但我有以下关于它的疑问 def sigmoid(x): return 1/(1+np.exp(-x)) # Derivative of the sigmoid function def sigmoid_prime(x): return sigmoid(x) * (1 - sigmoid(x)) x = np.array([0.1, 0.3]) y = 0.2 weights = np.array([-0.8, 0.5]) # The learning ra
def sigmoid(x):
return 1/(1+np.exp(-x))
# Derivative of the sigmoid function
def sigmoid_prime(x):
return sigmoid(x) * (1 - sigmoid(x))
x = np.array([0.1, 0.3])
y = 0.2
weights = np.array([-0.8, 0.5])
# The learning rate, eta in the weight step equation
learnrate = 0.5
# The neural network output
nn_output = sigmoid(x[0]*weights[0] + x[1]*weights[1])
# or nn_output = sigmoid(np.dot(x, w))
# output error
error = y - nn_output
# error gradient
error_grad = error * sigmoid_prime(np.dot(x,w))
# Gradient descent step
del_w = [ learnrate * error_grad * x[0],
learnrate * error_grad * x[1]]
# or del_w = learnrate * error_grad * x
疑问:
- 为什么我们只用x乘以权重,而不用y
nn_output = sigmoid(x[0]*weights[0] + x[1]*weights[1])
- 为什么在计算梯度下降时要增加x的值
del_w = [ learnrate * error_grad * x[0], learnrate * error_grad * x[1]]
像
x[0]
和x[1]
嗯。类似于救援
想象一下,你正把一门大炮对准一个目标。你有你的瞄准曲柄(w
),你可以调整它来移动加农炮(x
)来击中目标(y
)。因此,您尝试通过将曲柄设置(w
)应用到加农炮(x
)来命中;您不能将目标本身(y
)用于此目的,因为它不在您的控制之下。所以你开火,击中目标的某个位置(nn\u输出
)。您可以查看您错过了多少(错误
)的方向,以确定如何更改下一次拍摄的方位角和角度(w
)
实际上,更准确地说,在神经网络中,x
(“输入”)并不是真正的大炮,而是射击的所有情况:风速、大炮位置、大炮模型和特性w
(“重量”)实际上不仅仅是一个曲柄:这是我们根据所有x
参数设置曲柄的知识(“如果大炮离目标很远,使角度更高”,“如果风来自北方,按此调整”…)
learnrate
是指你在调整中有多紧张。大的学习率意味着你调整得更快(当你偏离目标时很好),但当需要更好的控制时,你有可能在另一个方向上过度调整
有一件事可能会让您感到困惑,那就是
x
和y
不是坐标,因此在它们的应用中是不对称的。当您在屏幕上绘制圆时,类似地处理x
和y
是有意义的。然而,在这里,x
和y
是两个截然不同的值:x
是实际输入(例如x[0]
风速,x[1]
风向,x[2]
炮龄,x[3]
雷达上光点的方向,x[4]
到雷达上光点的距离,y
是应该输出的值(y[0]
目标的经度,y[1]
目标的纬度)-对它们一视同仁是没有意义的。你可以看看这个并比较你的代码:什么意思,增加x
的值?