I have a problem about indexing variable in a forward pass. I have already known how to get a specified part to do some operation, but I don’t know how to write the result to the corresponding area and let gradients flow through the indexing part properly. For example:
input=Variable(torch.randn(2,3,5,6),requires_grad=True)
idx_w=Variable(torch.FloatTensor([2,3,4]),requires_grad=True).floor().detach()
idx_h=Variable(torch.FloatTensor([1,2]),requires_grad=True).floor().detach()
result=Variable(torch.zeros(input.size()),requires_grad=True)
output=input.index_select(dim=-1,index=idx_w.long()).index_select(dim=-2,index=idx_h.long())
output+=1
result[:,:,index_h,index_w]=output
But this way can cause an error that idx_h is a variable and can’t be converted to LongTensor.
Any advice would be appreciated !