gpt4 book ai didi

python - 梯度下降权重/偏差更新在这里如何工作?

转载 作者:行者123 更新时间:2023-11-28 17:04:40 24 4
gpt4 key购买 nike

我一直在从 Michael Nielsen 的 http://neuralnetworksanddeeplearning.com/chap1.html 学习神经网络.

在下面的部分更新权重和偏差

def update_mini_batch(self, mini_batch, eta):
nabla_b = [np.zeros(b.shape) for b in self.biases]
nabla_w = [np.zeros(w.shape) for w in self.weights]

for x, y in mini_batch:
delta_nabla_b, delta_nabla_w = self.backprop(x, y)

#Zero vectors
nabla_b = [nb+dnb for nb, dnb in zip(nabla_b, delta_nabla_b)]
nabla_w = [nw+dnw for nw, dnw in zip(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)]



def SGD(self, training_data, epochs, mini_batch_size, eta,
test_data=None):
if test_data: n_test = len(test_data)
n = len(training_data)
for j in xrange(epochs):
random.shuffle(training_data)
mini_batches = [
training_data[k:k+mini_batch_size]
for k in xrange(0, n, mini_batch_size)]

####
for mini_batch in mini_batches:
self.update_mini_batch(mini_batch, eta)
if test_data:
print "Epoch {0}: {1} / {2}".format(
j, self.evaluate(test_data), n_test)
else:
print "Epoch {0} complete".format(j)

有什么需要引入nabla_bnabla_w零向量?当它们只是被添加到本身就是 numpy 数组的 dnb 和 dnw 时。不是 0 + something = something 吗?对于单个训练示例,这里对零向量的需求是什么?

作为测试,我删除了零向量并单独使用 dnb 和 dnw,我没有看到训练有任何显着差异。

谢谢。

最佳答案

是的,你是对的 0 + something = something,但在第二次迭代中,它将是

something +something_else = value

所以,这发生在下面的代码中
对于 mini_batch 中的 x, y:

这里,对于第一个minibatchnabla_wnabla_b会是0,但是对于第二次及以后的迭代,它会有一些值.

让我们考虑下面的代码

nabla_b = [nb+dnb for nb, dnb in zip(nabla_b, delta_nabla_b)]
nabla_w = [nw+dnw for nw, dnw in zip(nabla_w, delta_nabla_w)]

在第一次迭代中,nabla_bnabla_w 都是零。但是,在这次迭代中,由于 nb+dnb 而更新了它们,因此,nabla_b 和 nabla_w 不再只是仅包含零的向量。所以,在第二次迭代中,nabla_b 不再是零向量

关于python - 梯度下降权重/偏差更新在这里如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51778534/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com