在张量流中计算这两种方法的梯度有什么不同?

时间:2016-11-07 02:36:56

标签: machine-learning tensorflow deep-learning

grads_and_vars = []
for var in tf.trainable_variables():
    if 'synthetic' in var.name:
        grads_and_vars.append(self.optim.compute_gradients(self.grad_total_loss, var_list=[var])[0])
    else:
        for k in self.grad_output.keys():
            if k in var.name:
                grads = tf.gradients(self.layer_out[k], var, self.grad_output[k])[0]
                grads_and_vars.append((grads,var))
# minimize the gradient loss and only change the dni module
self.train_op = self.optim.apply_gradients(grads_and_vars, global_step=self.global_step)

我正在阅读某人的代码,任何人都可以向我解释

之间的区别
grads_and_vars.append(self.optim.compute_gradients(self.grad_total_loss, var_list=[var])[0])

grads = tf.gradients(self.layer_out[k], var, self.grad_output[k])[0]
grads_and_vars.append((grads,var))

他们在做同样的事吗?

1 个答案:

答案 0 :(得分:0)

如果没有该人的完整代码,很难说,但基本上是:

  • 第一个将标准渐变应用于变量,即来自损失class Test { public: Test() { } Test(const Test& arg) { std::cout<<"Copy Constructor Called..."<<std::endl; } Test(Test&& arg) { std::cout<<"Move Constructor Called..."<<std::endl; } }; Test GetMyTestObj() { Test *ptr = new Test(); return *ptr; } Test dummy = GetMyTestObj(); //Copy Constructor Called...
  • 的渐变
  • 第二个应用特定渐变,此处为self.grad_total_loss相对于self.layer_out[k]的渐变,当我们知道var的渐变为self.layer_out[k]时。

换句话说,我们将self.grad_output[k]的{​​{1}}反向传播到self.grad_output[k]

相关问题