有时我看到Tensorflow session.run只获取优化器,有时它同时获取优化器和成本。什么';有什么区别?

有时我看到Tensorflow session.run只获取优化器,有时它同时获取优化器和成本。什么';有什么区别?,tensorflow,Tensorflow,有时我看到 sess.run(optimizer, feed_dict=feed) 其他时间 sess.run([cost, optimizer], feed_dict=feed) 据我所知,session.run将计算提取的项,并且还将计算依赖于提取的项的所有内容。由于优化器依赖于“成本”,在后一个示例中调用成本和优化器不是多余的吗 通常,优化器的定义如下 optimizer = tf.train.AdagradOptimizer(1.0).minimize(cost) 由于优化器依赖于

有时我看到

sess.run(optimizer, feed_dict=feed)
其他时间

sess.run([cost, optimizer], feed_dict=feed)
据我所知,session.run将计算提取的项,并且还将计算依赖于提取的项的所有内容。由于优化器依赖于“成本”,在后一个示例中调用成本和优化器不是多余的吗

通常,优化器的定义如下

optimizer = tf.train.AdagradOptimizer(1.0).minimize(cost)
由于优化器依赖于“成本”,在后一个示例中调用成本和优化器不是多余的吗

有一件事你错了:优化器不一定依赖于“成本”。因此,将成本添加到获取列表中并不是多余的。这两个调用不执行同一个图。另一个答案在这方面也是错误的

一个简单的例子:假设您的
cost=tf.square(W)
。梯度w.r.t w仅为
2*w
,这与成本无关。因此,图中的
optimizer.minize(cost)
操作(使用渐变更新
W
)不依赖于成本。考虑到您确实需要向优化器提供成本张量,这可能看起来很奇怪——但不一定要对张量进行评估


至于人们使用
sess.run([cost,opt])
而不是
sess.run(opt)
的实际原因,可能只是为了记录(打印成本值)。

优化器
放入
sess.run()
可以更新参数。从,
AdamOptimizer()。最小化(成本)
返回

更新变量列表中变量的操作

因此:

  • sess.run(优化器,feed\u dict=feed)
    -仅更新权重

  • sess.run([cost,optimizer],feed\u dict=feed)
    -更新权重并返回成本


哇,以前从没想过这个!标记为答案的。