I have defined my Resnet50 following a tutorial:
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)
# average pooling layer
self.avgpool = self.resnet.avgpool
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
However, I am getting the error
RuntimeError: mat1 and mat2 shapes cannot be multiplied (1x65536 and 32x20)
I tried defining the classifier like the following:
self.classifier = nn.Sequential(nn.Linear(65536, 1000), nn.Dropout())
but now I am getting the error ValueError: Target size (torch.Size([32, 20])) must be the same as input size (torch.Size([1, 1000]))
Any suggestions for me? Thank you in advance