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))
他们在做同样的事吗?
答案 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]
。