I have this code to fine-tune a resnet50 model to my task:
import torch
import torch.nn as nn
from torch.nn.functional import normalize
import torchvision.models as models
from torchvision import transforms, utils
from torchvision.models import resnet50
import torch.nn.functional as F
class resnet(nn.Module):
def __init__(self):
super(resnet, self).__init__()
self.resnet = resnet50(pretrained=True)
self.features_conv = self.resnet.features[:48]
self.max_pool = nn.MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
self.classifier = self.resnet.classifier
self.gradients = None
for param in resnet.parameters():
param.requires_grad = False
def activations_hook(self, grad):
self.gradients = grad
def forward(self, x):
x = self.features_conv(x)
h = x.register_hook(self.activations_hook)
x = self.max_pool(x)
x = x.view((1, -1))
x = self.classifier(x)
return x
def get_activations_gradient(self):
return self.gradients
def get_activations(self, x):
return self.features_conv(x)
def set_parameter_requires_grad(model):
for param in model.parameters():
param.requires_grad = True
but I am getting this error
AttributeError: 'ResNet' object has no attribute 'features'
due to this line of code self.features_conv = self.resnet.features[:48]
What I am trying to do is to register hook at the last convolutional layer of resnet50. Any suggestions for me is welcome. Thank you in advance