我有一个变量,比方说,a,在之前的一些运算中,它有一些与之相关的梯度.然后我得到了整数bc,它们没有梯度.我想计算最小的abc.MWe如下所示.

import torch

a = torch.tensor([4.], requires_grad=True)  # As an example I have defined a leaf node here, in my program I have an actual variable with gradient
b = 5
c = 6
d = torch.min(torch.tensor([a, b, c]))  # d does not have gradient associated

我怎么才能用不同的方式写这个,让从ad的梯度流过呢?谢谢.

推荐答案

代码的问题是第d = torch.min(torch.tensor([a, b, c]))

当您计算torch.tensor([a, b, c])时,您创建了一个新的张量,它没有abc个张量的计算图.例如:

a = torch.tensor([4.], requires_grad=True)
b = torch.tensor([5.])
c = torch.tensor([6.])
d = torch.tensor([a,b,c])
d.requires_grad
> False

解决方案是将min函数与输入张量本身一起使用.

a = torch.tensor([4.], requires_grad=True)
b = torch.tensor([5.])
c = torch.tensor([6.])
d = a.min(b).min(c)
d.requires_grad
> True

请注意,对于最小值,min函数的梯度为1,对于所有其他值,梯度为0.这意味着,如果你想要支撑的值不是最小值,你将失go 渐变信号.

a = torch.tensor([4.], requires_grad=True)
b = torch.tensor([5.])
d = a.min(b)
d.backward()
a.grad
> tensor([1.])

a = torch.tensor([6.], requires_grad=True)
b = torch.tensor([5.])
d = a.min(b)
d.backward()
a.grad
> tensor([0.])

Python相关问答推荐

当使用keras.utils.Image_dataset_from_directory仅加载测试数据集时,结果不同

如何将双框框列中的成对变成两个新列

Gekko:Spring-Mass系统的参数识别

_repr_html_实现自定义__getattr_时未显示

处理带有间隙(空)的duckDB上的重复副本并有效填充它们

管道冻结和管道卸载

如何使用数组的最小条目拆分数组

如何设置视频语言时上传到YouTube与Python API客户端

利用Selenium和Beautiful Soup实现Web抓取JavaScript表

所有列的滚动标准差,忽略NaN

python中字符串的条件替换

为什么常规操作不以其就地对应操作为基础?

剪切间隔以添加特定日期

为什么t sns.barplot图例不显示所有值?'

如何在GEKKO中使用复共轭物

Pandas在rame中在组内洗牌行,保持相对组的顺序不变,

EST格式的Azure数据库笔记本中的当前时间戳

如何在Quarto中的标题页之前创建序言页

具有不同坐标的tkinter canvs.cocords()和canvs.moveto()

如何在networkx图中提取和绘制直接邻居(以及邻居的邻居)?