I am trying to implement a more general version of grouped convolutions that takes a list split
whose sum is equal to the number of input channels channels
and internally groups the convolutions according to this partition. This is in constrast to PyTorch’s grouped convolutions, which only allows groups of the same size. Here is my attempt (the important part is the forward
, please ignore the references to DilatedCNN
in the __init__
) :
class SplitDilatedCNN(nn.Module):
def __init__(self,channels=4,depth=5,kernel=5,split=[3,1]):
super(SplitDilatedCNN, self).__init__()
self.channels = channels
self.depth = depth
self.kernel = kernel
self.split = split
self.channelsAux = 0
self.dcnn = nn.ModuleList()
for i in range(len(split)):
self.dcnn.append(DilatedCNN(split[i],split[i],self.channelsAux,self.depth,self.channels,self.kernel))
def forward(self, x):
x = x.split(self.split,1)
x = [self.dcnn[j](x[j]) for j in range(len(self.split))]
return torch.cat(x,1)
The forward pass seems to work, but in the backward pass I get an
RuntimeError: one of the variables needed for gradient computation has been modified by an inplace operation
and have absolutely no idea why. I can’t see any in-place operations!?