PyTorch - 逐元素签名的最小值/最大值?
Posted
技术标签:
【中文标题】PyTorch - 逐元素签名的最小值/最大值?【英文标题】:PyTorch - Element-wise signed min/max? 【发布时间】:2020-07-15 04:06:09 【问题描述】:我可能遗漏了一些明显的东西,但我找不到计算方法。
给定两个张量,我想保留每个张量中的最小元素以及符号。
我想过
sign_x = torch.sign(x)
sign_y = torch.sign(y)
min = torch.min(torch.abs(x), torch.abs(y))
为了最终将符号与获得的最小值相乘,但是我没有方法将正确的符号与保留的每个元素相乘,并且必须选择两个张量之一。
【问题讨论】:
如果x
为负数,y
为正数,但绝对值相同,您希望以哪个符号结束?
因为它们是浮动的,我发现这不太可能发生,但在这种情况下,抛硬币可能是解决方案。
【参考方案1】:
这是一种方法。将torch.sign(x)
和torch.sign(y)
乘以表示x
或y
是否是min
计算结果的布尔张量。然后将两个结果张量的逻辑或 (|
) 组合起来,然后乘以 min
计算。
mins = torch.min(torch.abs(x), torch.abs(y))
xSigns = (mins == torch.abs(x)) * torch.sign(x)
ySigns = (mins == torch.abs(y)) * torch.sign(y)
finalSigns = xSigns.int() | ySigns.int()
result = mins * finalSigns
如果x
和y
对于某个元素具有相同的绝对值,则在上面的代码中x
的符号优先。要让y
优先,请交换顺序并改用finalSigns = ySigns.int() | xSigns.int()
。
【讨论】:
谢谢,我认为这可行!我不知道你可以用张量做到这一点。以上是关于PyTorch - 逐元素签名的最小值/最大值?的主要内容,如果未能解决你的问题,请参考以下文章