分割一个DoubleTensor矩阵我想在更新实值数字矩阵使用torch.Tensor
循环。 这里是我想要做什么:当我做除法是由DoubleTensor数量火炬
denom -> [torch.DoubleTensor of size 1x1]
P, delta_W, W -> [torch.DoubleTensor of size 200x200]
错误:
bad argument #2 to '?' (number expected at /usr/local/torch/pkg/torch/generic/TensorOperator.c:145)
我是
-- W and P are of size NxN, r is of size N
delta_W = P * r:view(N, 1) * r:view(1, N) * P -- this is an NxN
denominator = 1 + r:view(1, N) * P * r:view(N, 1) -- this is a number
delta_W = delta_w/denominator -- ## THIS ONE RAISES ERROR ##
W = W + delta_W
只是要清楚所以我认为“广播”是个问题,因此我尝试通过torch.repeatTensor(denom, N, N)
模拟它,但没有运气。如果denom只是一个数字(不是DoubleTensor
),无论如何,一切正常。使用该元素也不起作用,delta_P/denom[1]
给出了相同的错误。
我在做什么错?
编辑: 我尝试使用
denominator = (1 + r:view(1, N) * P * r:view(N, 1)):apply(function(x) return x^(-1) end)
delta_w = delta_w * torch.repeatTensor(denominator, N, N)
不抛出一个错误,但结果是错误的。看到这一点,请尝试以下操作:
torch.linspace(0, 3, 4):view(2, 2) * torch.Tensor(2, 2):fill(0.5)
我有感觉了智能使用的'map','map2'或'apply'会做的伎俩,但还没有想出如何。 – fabioedoardoluigialberto
为什么我遇到了问题的原因之一是写[这里](https://github.com/torch/torch7/blob/master/doc/maths.md)和有关重载运算符。从DOC:“这是可能使用基本数学运算符,例如+, - ,/,*和%与张量。这些运营商为提供便利,[...]另一个需要注意的重要一点是,这些运营商而已。当第一个操作数是张量时重载,例如,这不起作用:'x = 5 + torch.rand(3)'“。 – fabioedoardoluigialberto