首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >tensorflow Optimizer.minimize函数

tensorflow Optimizer.minimize函数
EN

Stack Overflow用户
提问于 2017-08-27 03:48:42
回答 1查看 824关注 0票数 1

我对最小化函数感到困惑。例如:形状为mini_batch_size的距离变量X,

代码语言:javascript
复制
loss_1 = tf.reduce_mean(X),

loss_2 = X

那么最小化(Loss_1)是最小批处理梯度下降,但是最小化(Loss_2)如何?元素级更新?如果是这样的话,它和随机梯度下降完全一样吗?

EN

回答 1

Stack Overflow用户

发布于 2017-08-27 22:52:42

事实上,这是TF中一个非常技术性的东西。loss_2 .等价于loss_1到乘积的常数。它不是其他答案所暗示的"SGD“--这不是TF的工作方式;它也是一个小型批处理更新,与loss_1的唯一区别是它乘以batch_size,仅此而已。

关键元素隐藏在实现tf.gradients的方式中。也就是说,它期望标量函数作为第一个参数传递。但是,如果您传递多个值,它不会抛出一个错误,而是,它只是将它们和为。您可以在tf.gradients官方TF文档中找到这些信息

梯度( ys,xs,grad_ys=None,name='gradients',colocate_gradients_with_ops=False,gate_gradients=False,aggregation_method=None ) ..。 构造了ys的 w.r.t的符号偏导数。X字。

因此,实际上,您的loss_2相当于:

代码语言:javascript
复制
equivalent_loss_2 = tf.reduce_sum(X)

显然,与loss_1的唯一不同之处不在于除以batch_size。没别的了。

代码语言:javascript
复制
x = tf.constant([[1.,2.,3.]]) # [3x1] , [batch_size x 1]

f = 2*x
f1 = tf.reduce_mean(f)
f2 = tf.reduce_sum(f)

g = tf.gradients(f, x)
g1 = tf.gradients(f1, x)
g2 = tf.gradients(f2, x)

with tf.Session() as sess:
    print(sess.run(g))
    print(sess.run(g1))
    print(sess.run(g2))

指纹:

代码语言:javascript
复制
[[array([ 2.,  2.,  2.], dtype=float32)]]
[[array([ 0.66666669,  0.66666669,  0.66666669], dtype=float32)]]
[[array([ 2.,  2.,  2.], dtype=float32)]]

和预期一样,g和g2是相同的,而g1只是g(或g2)除以3 (batch_size)。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45901523

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档