gpt4 book ai didi

python - 使用 TensorFlow `` grad_loss/grad_ys`` 参数添加梯度

转载 作者:太空狗 更新时间:2023-10-30 01:36:26 24 4
gpt4 key购买 nike

我正在尝试使用 optimizer.minimize(loss, grad_loss=) 中的 grad_loss 参数来修改具有现有梯度的网络梯度。我关注了这里的评论: Use of grads_ys parameter in tf.gradients - TensorFlow

我想运行一个玩具示例,我在其中重新创建了 grad_ys 的默认 1 值,如文档中指定的那样。

这里是相关的代码段:

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)

第一部分使用 compute_gradients 提取梯度。最后一行计算损失函数 loss_op 的梯度,但尝试对梯度使用 1 填充向量。据我所知,这应该与不带 grad_loss 参数的 funning minimize 类似。

不幸的是,这失败了,因为它期望 grad_loss 是一个张量(并且有一个数据类型)而不是一个列表。查看 gradients_impl.py 我发现该函数期望 grad_lossloss 具有相同的维度(在本例中为标量) .

对于这个简单示例中的任何帮助,我将不胜感激 - 如何以这种方式将元素添加到渐变中?

编辑:我想这个问题归结为 grad_loss 的定义:“一个 Tensor 持有为 loss 计算的梯度。”如何从 compute_gradients 获得的一组梯度中生成这样的张量?

谢谢。

最佳答案

您可以使用 tf.convert_to_tensor 方法将梯度列表转换为 tensor,然后使用 tf.reduce_sum :

train_op = optimizer.minimize(loss_op, grad_loss=tf.reduce_sum(tf.convert_to_tensor(grad_loss)))

关于python - 使用 TensorFlow `` grad_loss/grad_ys`` 参数添加梯度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49155119/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com