I defined a type of loss and encounter *** RuntimeError: a leaf Variable that requires grad has been used in an in-place operation. The loss is defined as follows
def SMLoss(feature):
co=feature.mm(feature.t())
l=co.diag().resize(batch_size,1).sqrt()
S=co.div(l.mm(l.t()))+1
W=S.resize(le,1)
P=S.div(S.sum(1).mm(torch.autograd.Variable(torch.ones(1,batch_size)).cuda()))
VP=P.resize(le,1)
VPT=torch.cat(P.t().unsqueeze(2),0)
tmp=VP.mm(VPT.t())
smloss=torch.autograd.Variable(torch.zeros(le,le).cuda(),requires_grad=True)
for u in range(0,le):
for v in range(0,le):
smloss[u,v]=tmp[u,v]*((W[p[u,v]]-W[q[u,v]])**2)
return smloss.sum()
in which p and q are index-maps pre-defined.
Can someone give me a help to solve the problem, thx a lot