class SoftArgmax(nn.Module):
def __init__(self):
super(SoftArgmax, self).__init__()
self.x_weights = torch.Tensor(linspace_2d(64,64))
self.y_weights = torch.Tensor(linspace_2d(64,64,dim=1))
self.conv1 = nn.Conv2d(16,16,kernel_size=64,groups = 16,bias=False)
self.conv2 = nn.Conv2d(16,16,kernel_size=64,groups = 16,bias=False)
def normalize(self,x):
x = x.clone()
for b in range(x.size()[0]):
for h in range(x.size()[1]):
x[b,h,:,:] = torch.div(x[b,h,:,:],torch.sum(x[b,h,:,:]))
#print(torch.sum(x[b,h,:,:].data))
return x
def forward(self,x):
x = self.normalize(x)
for i in range(16):
self.conv1.weight.data[i,0,:,:] = self.x_weights
for i in range(16):
self.conv2.weight.data[i,0,:,:] = self.y_weights
return torch.cat((self.conv1(x).squeeze()*64,self.conv2(x).squeeze()*64),dim=1)
The above code is giving me this runtime error -
RuntimeError: one of the variables needed for gradient computation has been modified by an inplace operation
Can anyone provide me feedback? Thanks