Hello @ptrblck , I have updated my code:
class ResNet(nn.Module):
def __init__(self):
super(ResNet, self).__init__()
self.resnet = resnet50(pretrained=True)
# isolate the feature blocks
self.features = nn.Sequential(self.resnet.conv1,
self.resnet.bn1,
nn.ReLU(),
nn.MaxPool2d(kernel_size=3, stride=2, padding=1, dilation=1, ceil_mode=False),
self.resnet.layer1,
self.resnet.layer2,
self.resnet.layer3,
self.resnet.layer4)
for param in self.resnet.layer4[2].parameters():
param.requires_grad_(True)
# average pooling layer
#self.features = nn.Sequential(self.resnet.layer4)
self.avgpool = self.resnet.avgpool
# classifier
self.classifier = self.resnet.fc
# gradient placeholder
self.gradient = None
def activations_hook(self, grad):
self.gradients = grad
def get_gradient(self):
return self.gradient
def get_activations(self, x):
return self.features(x)
def forward(self, x):
x = self.features(x)
h = x.register_hook(self.activations_hook)
# complete the forward pass
x = self.avgpool(x)
x = x.view((1, -1))
x = self.classifier(x)
return x
But I am getting
RuntimeError: mat1 and mat2 shapes cannot be multiplied (1x65536 and 2048x1000)
so I updated my classifier: (I have 20 classes)
self.classifier = nn.Sequential(nn.Linear(65536, 20), nn.Dropout())
but I am getting this error:
ValueError: Target size (torch.Size([32, 20])) must be the same as input size (torch.Size([1, 20]))
I tried self.classifier = nn.Sequential(nn.Linear(2048, 20), nn.Dropout())
and now this error appears:
RuntimeError: mat1 and mat2 shapes cannot be multiplied (1x65536 and 2048x20)
Any advice for me? Thank you in advance