谢谢,我有一些代码,写在Pytorch 0.4上
def forward(self, input, target):
y = one_hot(target, input.size(-1))
Psoft = torch.nn.functional.softmax(input).cpu()
Loss=0
t1=target.view(1,target.size(0)).cpu()
for i in range(0,target.size(0)-1):
t2=t1[0,i]
flag=int(t2.item())
for j in range(1,flag+2):
P1=Psoft[i,:j]
y1=y[i,:j]
Loss=(P1-y1).sum().pow(2).sum()
#Loss+=(sum(P1-y1))**2
if int(t2.item())!=7:
for k in range(flag+1,9):
P2=Psoft[i,flag+1:8]
y2=y[i,flag+1:8]
Loss=(P2-y2).sum().pow(2).sum()
#Loss+=(sum(P2-y2))**2
Loss=Loss/target.size(0)
print(Loss.grad)
return Loss
target是一个64 * 1的张量 Psoft是64 * 8的张量 我发现Loss.grad不是 怎么毕业? 非常感谢!