2016-11-07 9 views
0
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) 

私は誰かのコードに読んでいます、誰も私に説明することができテンソルフローにおけるこれら2つの方法の勾配の計算の違いは何ですか?

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

それは基本的にその人の完全なコードなしで伝えるのは難しいですが、:

  • 最初のものは、第二のいずれかに該当する損失self.grad_total_loss
  • から勾配すなわち、変数に標準勾配を適用します特定の勾配、ここではの勾配、varに対する勾配、およびself.layer_out[k]の勾配がself.grad_output[k]であることがわかったときに、

別の言い方をするために、我々はvarself.layer_out[k]からself.grad_output[k]をbackpropagate。

関連する問題