hi,
I am implementing a network using resnet an some fancy stuff upon it, but I have an inplce operation on a variable in it, but can’t put my hand on it. Any idea where it is ?
class refinet(nn.Module):
def init(self,num_classes):
super(refinet, self).init()
resnet = models.resnet18(pretrained=True)self.layer1 = nn.Sequential( resnet.conv1, resnet.bn1, resnet.relu, resnet.maxpool, resnet.layer1 ) self.layer2 = resnet.layer2 self.layer3 = resnet.layer3 self.layer4 = resnet.layer4 self.rcu1 = torch.nn.Sequential( nn.ReLU(inplace=True), conv3x3(512, 512, stride=1), nn.ReLU(inplace=True), conv3x3(512, 512, stride=1) ) self.rcu2 = torch.nn.Sequential( nn.ReLU(inplace=True), conv3x3(256, 256, stride=1), nn.ReLU(inplace=True), conv3x3(256, 256, stride=1) ) self.rcu3 = torch.nn.Sequential( nn.ReLU(inplace=True), conv3x3(128, 128, stride=1), nn.ReLU(inplace=True), conv3x3(128, 128, stride=1) ) self.rcu4 = torch.nn.Sequential( nn.ReLU(inplace=True), conv3x3(64, 64, stride=1), nn.ReLU(inplace=True), conv3x3(64, 64, stride=1) ) self.multires = torch.nn.Sequential( nn.Conv2d(512, 256, kernel_size=3,stride=1, padding=1, bias=False), nn.Upsample(scale_factor=2, mode='bilinear') ) self.multires2 = torch.nn.Sequential( nn.Conv2d(256, 256, kernel_size=3,stride=1, padding=1, bias=False), nn.Upsample(scale_factor=2, mode='bilinear') ) self.multires3 = torch.nn.Sequential( nn.Conv2d(256, 128, kernel_size=3,stride=1, padding=1, bias=False), nn.Upsample(scale_factor=2, mode='bilinear') ) self.multires4 = torch.nn.Sequential( nn.Conv2d(128, 64, kernel_size=3,stride=1, padding=1, bias=False), nn.Upsample(scale_factor=2, mode='bilinear') ) self.multires_end = torch.nn.Sequential( nn.Conv2d(64, 1, kernel_size=3, stride=1, padding=1,bias=False), nn.Upsample(scale_factor=4, mode='bilinear') ) self.res1 = torch.nn.Sequential( nn.MaxPool2d(kernel_size=5, stride=1, padding=2), nn.Conv2d(512, 512, kernel_size=3, stride=1, padding=1, bias=False) ) self.res2 = torch.nn.Sequential( nn.MaxPool2d(kernel_size=5, stride=1, padding=2), nn.Conv2d(256, 256, kernel_size=3, stride=1, padding=1, bias=False) ) self.res3 = torch.nn.Sequential( nn.MaxPool2d(kernel_size=5, stride=1, padding=2), nn.Conv2d(128, 128, kernel_size=3, stride=1, padding=1, bias=False) ) self.res4 = torch.nn.Sequential( nn.MaxPool2d(kernel_size=5, stride=1, padding=2), nn.Conv2d(64, 64, kernel_size=3, stride=1, padding=1, bias=False) ) self.relu = nn.ReLU(inplace=True) self.m = nn.Sigmoid() def respool1(self,inputs): inputs = self.relu(inputs) for i in range(0,4): output = self.res1(inputs) inputs = inputs + output return inputs def respool2(self,inputs): inputs = self.relu(inputs) for i in range(0,4): output = self.res2(inputs) inputs = inputs + output return inputs def respool3(self,inputs): inputs = self.relu(inputs) for i in range(0,4): output = self.res3(inputs) inputs = inputs + output return inputs def respool4(self,inputs): inputs = self.relu(inputs) for i in range(0,4): output = self.res4(inputs) inputs = inputs + output return inputs def forward(self,x): x1 = self.layer1(x) x2 = self.layer2(x1) x3 = self.layer3(x2) x4 = self.layer4(x3) out = x4 + self.rcu1(x4) #firststep out = out + self.rcu1(out) out = self.respool1(out) out = out + self.rcu1(out) out2 = x3 + self.rcu2(x3)#secondstep out2 = out2 + self.rcu2(out2) out = self.multires(out) + out2 out = self.respool2(out) out = out + self.rcu2(out) out2 = x2 + self.rcu3(x2)#thirdstep out2 = out2 + self.rcu3(out2) out = self.multires3(out) + out2 out = self.respool3(out) out = out + self.rcu3(out) out2 = x1 + self.rcu4(x1)#thirdstep out2 = out2 + self.rcu4(out2) out = self.multires4(out) + out2 out = self.respool4(out) out = out + self.rcu4(out) out = self.multires_end(out) out = self.m(out) return out