有时我看到
sess.run(optimizer, feed_dict=feed)其他时间
sess.run([cost, optimizer], feed_dict=feed)据我所知,session.run将计算获取的项,还将计算所有依赖于所获取的项的内容。由于优化器依赖于“成本”,所以在后一个示例中调用成本和优化器不是多余的吗?
通常,优化器的定义如下
optimizer = tf.train.AdagradOptimizer(1.0).minimize(cost)发布于 2018-05-13 19:13:00
由于优化器依赖于“成本”,所以在后一个示例中调用成本和优化器不是多余的吗?
有一件事你错了:优化器不一定依赖于‘成本’。因此,在获取列表中添加成本并不是多余的。这两个调用不执行相同的图。另一个答案也是错误的。
一个简单的例子:假设您的cost = tf.square(W)。梯度w.r.tW只是2 * W,它不依赖于成本。因此,图中的optimizer.minize(cost)操作(用梯度更新W )不依赖于成本。考虑到您确实需要向优化器提供成本张量,这可能看起来很奇怪--但是不一定要对张量进行评估。
至于人们为什么要使用sess.run([cost, opt])而不是sess.run(opt)的实际原因,它可能只是用于日志记录(打印成本值)。
发布于 2020-02-25 07:23:49
将optimizer放入sess.run()允许您更新参数。从文档中,AdamOptimizer().minimize(cost)返回
更新var_list中变量的操作
因此:
sess.run(optimizer, feed_dict=feed)-只更新权重˜sess.run([cost, optimizer], feed_dict=feed) -更新权重并返回成本。https://stackoverflow.com/questions/50319296
复制相似问题