gpt4 book ai didi

machine-learning - Theano 梯度不适用于 .sum(),仅适用于 .mean()?

转载 作者:行者123 更新时间:2023-11-30 08:41:30 25 4
gpt4 key购买 nike

我正在尝试学习 theano 并决定实现线性回归(使用教程中的逻辑回归作为模板)。我遇到了一个奇怪的事情,如果我的成本函数使用 .sum(),T.grad 就不起作用,但如果我的成本函数使用 .mean(),T.grad 就起作用。代码片段:

(这不起作用,会导致 W 向量充满 NAN):

x = T.matrix('x')
y = T.vector('y')

w = theano.shared(rng.randn(feats), name='w')
b = theano.shared(0., name="b")

# now we do the actual expressions
h = T.dot(x,w) + b # prediction is dot product plus bias
single_error = .5 * ((h - y)**2)
cost = single_error.sum()
gw, gb = T.grad(cost, [w,b])

train = theano.function(inputs=[x,y], outputs=[h, single_error], updates = ((w, w - .1*gw), (b, b - .1*gb)))
predict = theano.function(inputs=[x], outputs=h)

for i in range(training_steps):
pred, err = train(D[0], D[1])

(这确实有效):

x = T.matrix('x')
y = T.vector('y')

w = theano.shared(rng.randn(feats), name='w')
b = theano.shared(0., name="b")

# now we do the actual expressions
h = T.dot(x,w) + b # prediction is dot product plus bias
single_error = .5 * ((h - y)**2)
cost = single_error.mean()
gw, gb = T.grad(cost, [w,b])

train = theano.function(inputs=[x,y], outputs=[h, single_error], updates = ((w, w - .1*gw), (b, b - .1*gb)))
predict = theano.function(inputs=[x], outputs=h)

for i in range(training_steps):
pred, err = train(D[0], D[1])

唯一的区别在于成本 = single_error.sum() 与 single_error.mean()。我不明白的是,两种情况下的梯度应该完全相同(一种只是另一种的缩放版本)。那么什么给出了呢?

最佳答案

学习率(0.1)太大了。使用平均值将其除以批量大小,因此这会有所帮助。但我很确定你应该把它做得小得多。不仅仅是除以批量大小(相当于使用平均值)。

尝试使用 0.001 的学习率。

关于machine-learning - Theano 梯度不适用于 .sum(),仅适用于 .mean()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27120646/

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