【发布时间】:2019-02-25 05:44:07
【问题描述】:
我试图了解反向传播在数学上是如何工作的,并希望在 python 中使用 numpy 实现它。我使用带有一个隐藏层的前馈神经网络进行计算,sigmoid 作为激活函数,均方误差作为误差函数。 This 是我计算结果的截图,问题是有一堆矩阵,我不能把它们完全相乘,因为它们没有相同的维度。 (截图中L为输出层,L-1为隐藏层,L-2为输入层,W为权重,E为误差函数,小写A为激活)
(代码中第一层有28*28个节点,[因为我用的是0-9位的MNIST数据库作为训练数据],隐藏层是15个节点,输出层是10个节点)。
# ho stands for hidden_output
# ih stands for input_hidden
def train(self, input_, target):
self.input_ = input_
self.output = self.feedforward(self.input_)
# Derivative of error with respect to weight between output layer and hidden layer
delta_ho = (self.output - target) * sigmoid(np.dot(self.weights_ho, self.hidden), True)) * self.hidden
# Derivative of error with respect to weight between input layer and hidden layer
delta_ih = (self.output - target) * sigmoid(np.dot(self.weights_ho, self.hidden), True)) * self.weights_ho * sigmoid(np.dot(self.weights_ih, self.input_), True) * self.input_
# Adjust weights
self.weights_ho -= delta_ho
self.weights_ih -= delta_ih
在delta_ho = ... 行,矩阵的尺寸为 (10x1 - 10x1) * (10x1) * (1x15) 那么我该如何计算呢?感谢您的帮助!
【问题讨论】:
标签: python machine-learning backpropagation