Thanks.I have a question.
I’m writing a loss function.
def forward(self, input, target):
        y = one_hot(target, input.size(-1))
        Psoft = torch.nn.functional.softmax(input).cpu()   
        Loss=0.0
        t1=target.view(1,target.size(0)).cpu()
        for i in range(0,target.size(0)-1):
            t2=t1[0,i]
            for j in range(1,t2+1):
                P1=Psoft[i,:j]
                y1=y[i,:j]
                Loss += sum(P1-y1)**2
        Loss=Loss/target.size(0)
        return Loss  

and there’ll be an error in Line:for j in range(1,t2+1):
TypeError: ‘Variable’ object cannot be interpreted as an integer
if I write it as
def forward(self, input, target):
        y = one_hot(target, input.size(-1))
        Psoft = torch.nn.functional.softmax(input).cpu()   
        Loss=0.0
        t1=target.data.view(1,target.size(0)).cpu()
        for i in range(0,target.size(0)-1):
            t2=t1[0,i]
            for j in range(1,t2+1):
                P1=Psoft[i,:j]
                y1=y[i,:j]
                Loss += sum(P1-y1)**2
        Loss=Loss/target.size(0)
        return Loss  

and there’ll be an error
The type of “Loss” is float.It doesn’t have gradient
What should i do?