有时我看到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)