书上所谓的每一次迭代是这样的:
for j in range(epochs):
1. 对全部样本进行一次随机化
random.shuffle(training_data)
2. 将全部样本分成mini_batch_size样本数份,每一份的样本数为mini_batch_size。
training_data[k:k+mini_batch_size] for k in range(0, n, mini_batch_size)]
3. 依次取每一份对算法做一次参数调整。
update_mini_batch(mini_batch, eta)
这样所有样本都刚好轮一遍,称为一次迭代。
一次迭代中每一次的参数调整所使用的样本是随机的。
nabla_b =[nb+dnb for nb, dnb inzip(nabla_b, delta_nabla_b)]nabla_w =[nw+dnw for nw, dnw inzip(nabla_w, delta_nabla_w)]
针对每个神经元计算它们新参数
self.weights = [w-(eta/len(mini_batch))*nw
for w, nw in zip(self.weights, nabla_w)]
self.biases = [b-(eta/len(mini_batch))*nb
for b, nb in zip(self.biases, nabla_b)]