下面这块代码是源码最核心的部分,也即 BP 算法的实现,包含了前向传输和逆向反馈,前向传输在 Network 里有零丁一个办法(膳绫擎提到的 feedforward 办法),那个办法是用于验证练习好的神经收集的精确度的,鄙人面有提到该办法。
- def backprop(self, x, y):
- """
- :param x:
- :param y:
- :return:
- """
- nabla_b = [np.zeros(b.shape) for b in self.biases]
- nabla_w = [np.zeros(w.shape) for w in self.weights]
- # 前向传输
- activation = x
- # 储存每层的神经元的值的矩阵,下面轮回会 append 每层的神经元的值
- activations = [x]
- # 储存每个未经由 sigmoid 计算的神经元的值
- zs = []
- for b, w in zip(self.biases, self.weights):
- z = np.dot(w, activation)+b
- zs.append(z)
- activation = sigmoid(z)
- activations.append(activation)
- # 求 δ 的值
- delta = self.cost_derivative(activations[-1], y) * \
- sigmoid_prime(zs[-1])
- nabla_b[-1] = delta
- # 乘于前一层的输出值
- nabla_w[-1] = np.dot(delta, activations[-2].transpose())
- for
推荐阅读
PHP说简单,然则要精晓也不是一件简单的事。我们除了会应用之外,还得知道它底层的工作道理。懂得PHP底层实现的目标是什么?动态说话要像用好起首得懂得它,内存治理、框架模型值得我们借鉴>>>详细阅读
本文标题:神经网络中 BP 算法的原理与 Python 实现源码解析
地址:http://www.17bianji.com/lsqh/35499.html
1/2 1