我很难学习神经网络。让我们从我的理解开始。在获得结果的阶段,它很简单,权重*输入+偏差,并应用函数(sigmoid)。 我的问题是在反向传播阶段,就像你的计算或者你对神经元数量的错误选择一样
让我们了解一下我对反向传播的理解: 预期产量,, 做你的导数,转置上一层,用从输出中得到的误差*计算梯度,修正偏差和权重,我的结果有时是随机的
# INPUT -> HIDDEN
matriz_inputs = array_matrix(inputs)
hidden = self.weights_ih@matriz_inputs + self.bias_ih
hidden = 1/(1+np.exp(-hidden))
# HIDDEN -> OUTPUT
output = self.weights_ho@hidden + self.bias_ho
output = 1/(1+np.exp(-output))
# # BACKPROPAGATION
# OUTPUT -> HIDDEN
expected = array_matrix(target)
output_error = expected - output
derivate_output = output*(1-output)
hidden_T = hidden.T
gradient = output_error*derivate_output
gradient = gradient*self.learning_rate
self.bias_ho = self.bias_ho+gradient
delta_weights_ho = gradient@hidden_T
self.weights_ho = self.weights_ho+delta_weights_ho
# HIDDEN -> INPUT
weights_ho_T = self.weights_ho.T
hidden_error = weights_ho_T@output_error
derivate_hidden = hidden*(1-hidden)
matriz_inputs_T = matriz_inputs.T
gradient_H = hidden_error*derivate_hidden
gradient_H = gradient_H*self.learning_rate
self.bias_ih = self.bias_ih+gradient_H
delta_weights_ih = gradient_H@matriz_inputs_T
self.weights_ih = self.weights_ih+delta_weights_ih
这是培训代码
这里有一些出口
预期[0,0,1,1],第二张图像显示正确的校正,但第一张图像显示不正确。异或问题
Neurons are:
input (i) = 2
hidden (h) = 2
output (o) = 1
错误发生的频率随着隐藏层或层数的变化而变化(我只编码了一层,但在另一个代码中编码了几个)
我的问题在于计算或神经元,因为对于4个(隐藏的神经元),这个错误并没有发生
编辑: 我发布了代码的图像,因为我知道它们更容易可视化,因为我的问题不在于它的执行,而在于对计算和数据选择的理解,而不是执行它所必需的
目前没有回答
相关问题 更多 >
编程相关推荐