使用TensorFlow``grad_loss/grad_ys``参数添加渐变

yok*_*oki 5 python tensorflow

我正在尝试使用grad_loss参数optimizer.minimize(loss, grad_loss=)来修改现有渐变的网络渐变.我按照这里的评论: 在tf.gradients中使用grads_ys参数 - TensorFlow

我想运行一个玩具示例,我在其中重新创建默认1grad_ys,如文档中所指定.

这是相关的代码段:

grads_and_vars = optimizer.compute_gradients(loss_op) 
vars_with_grad = [v for g, v in grads_and_vars if g is not None] 
grad_loss = [] 
for grad,var in grads_and_vars:
    grad_loss.append(tf.ones_like(grad))
train_op = optimizer.minimize(loss_op, grad_loss=grad_loss)
Run Code Online (Sandbox Code Playgroud)

第一部分使用提取渐变compute_gradients.最后一行计算损失函数的梯度,loss_op但尝试使用1填充向量作为梯度.据我所知,这应该与minimize没有grad_loss参数的funning相似.

不幸的是,这失败了,因为它期望grad_loss是Tensor(并且有一个dtype)而不是列表.调查gradients_impl.py我看到函数预期grad_lossloss(在这种情况下是标量)相同的维度.

我很感激这个简单示例中的任何帮助 - 如何以这种方式向渐变添加元素?

编辑:我想这个问题归结为以下定义grad_loss:"A Tensor持有计算的渐变loss." 如何从一组渐变中生成这样的张量compute_gradients

谢谢.

pfm*_*pfm 0

您可以使用该tf.convert_to_tensor方法将渐变列表转换为 a tensor,然后使用tf.reduce_sum

train_op = optimizer.minimize(loss_op, grad_loss=tf.reduce_sum(tf.convert_to_tensor(grad_loss)))
Run Code Online (Sandbox Code Playgroud)