# output layer error is calculated as follows output_layer_error = self.cost_derivative(activations[-1], y) * sigmoid_prime_vec(zs[-1]) # backward pass # in backward pass, we calculate the error of each layer, note that the L layer's error can be derived from the L+1 layer's error nabla_b[-1] = output_layer_error # although output_layer_error and activations are each a vector, their product is matrix # with number of rows equals to size of output_layer_error vector # and number of columns equals the size of activation vector nabla_w[-1] = np.dot(output_layer_error, activations[-2].transpose()) # Note that the variable l in the loop below is used a little # differently to the notation in Chapter 2 of the book. Here, # l = 1 means the last layer of neurons, l = 2 is the # second-last layer, and so on. It's a renumbering of the # scheme in the book, used here to take advantage of the fact # that Python can use negative indices in lists. for l in xrange(2, self.num_layers): z = zs[-l] spv = sigmoid_prime_vec(z) output_layer_error = np.dot(self.weights[-l+1].transpose(), output_layer_error) * spv nabla_b[-l] = output_layer_error nabla_w[-l] = np.dot(output_layer_error, activations[-l-1].transpose()) return (nabla_b, nabla_w)
神经网络(5)
最新推荐文章于 2023-01-14 23:05:59 发布