为什么在这里转置矩阵?(与神经网络相关)



当我看代码来理解神经网络时,我对这段代码感到好奇。

hidden_errors = numpy.dot(self.who.T, output_errors)
# The error of the hidden layer is calculated by recombining the errors of the output layer divided by the weight.

在这段代码中,为什么要转置矩阵?

我担心侵犯版权,整个代码将发布原始代码的GitHub地址。

https://github.com/freebz/Make-Your-Own-Neural-Network/blob/master/neural_network.py

为了使点积(在这种情况下相当于矩阵乘法(成为可能并计算正确的东西,转置是必要的。

self.who在以下行中创建:

numpy.random.normal(0.0, pow(self.onodes, -0.5), (self.onodes, self.hnodes))

其中O(行(是输出节点的数量,H(列(是隐藏节点的数量。targets在以下行中创建:

targets = numpy.array(targets_list, ndmin=2).T

这使得它成为Ox1(2D(矩阵。那么output_errorstargets的维度相同,并且也是O值的Ox1列向量(正如所预期的(:

output_errors = targets - final_outputs

在所实现的反向传播算法中,通过将输出误差与连接隐藏层和输出层的权重相乘来计算隐藏误差。来自numpy.dot:的numpy文档

如果a和b都是2-D数组,则为矩阵乘法,但最好使用matmul或a@b。

因此,我们需要将self.who转置为HxO矩阵,以便在与Ox1矩阵相乘时正确工作,从而给出所需的隐藏误差的Hx1矩阵。

最新更新