Deep learning 火炬元件逻辑操作和/或
我试图对张量执行逻辑元素操作,但似乎“and”关键字执行逻辑or,而“or”关键字执行逻辑and: 我原以为c会变成Deep learning 火炬元件逻辑操作和/或,deep-learning,torch,elementwise-operations,Deep Learning,Torch,Elementwise Operations,我试图对张量执行逻辑元素操作,但似乎“and”关键字执行逻辑or,而“or”关键字执行逻辑and: 我原以为c会变成[1,0,0],因为只有在a和b都等于1的位置才有意义。我还期望d变成[1,1,0],因为这些位置a或b等于1。令我惊讶的是,结果完全相反! 有什么解释吗?根据Lua文档: 运算符并返回其第一个参数(如果为false);否则,, 它返回第二个参数。运算符或返回其第一个 论点,如果它不是假的;否则,它将返回第二个 论据 在这种情况下,这种行为的发生只是一种“巧合”。当应用和运算符时,
[1,0,0]
,因为只有在a和b都等于1的位置才有意义。我还期望d变成[1,1,0]
,因为这些位置a或b等于1。令我惊讶的是,结果完全相反!
有什么解释吗?根据Lua文档:
运算符并返回其第一个参数(如果为false);否则,,
它返回第二个参数。运算符或返回其第一个
论点,如果它不是假的;否则,它将返回第二个
论据
在这种情况下,这种行为的发生只是一种“巧合”。当应用
和运算符时,它将返回第二个参数(张量a
),当应用或运算符时,它将返回第一个参数(张量b
)。此外,张量a
对应于元素逻辑运算,而张量b
对应于元素逻辑or。警告:根据答案,此方法对于张量上的元素逻辑运算绝对不正确。你说得对!我刚刚计算过使用torch.cmax(a,b)相当于“a或b”,torch.cmin(a,b)相当于“a和b”(你需要确保a和b是逻辑张量;也就是说,它们只包含1和0)
a = torch.zeros(3)
a[1] = 1 -- a will be [1,0,0]
b = torch.ones(3)
b[3] = 0 -- b will be [1,1,0]
c = torch.eq(a,1) and torch.eq(b,1)
d = torch.eq(a,1) or torch.eq(b,1)