I would like to implement a custom class to modify the fully connected layers of Inception V3 and extract outputs and features, similar to this FCResNet50 class:
class FCResNet50(nn.Module):
def __init__(self, num_classes=2, pretrained=True, hidden_size=2048, dropout=0.5):
super().__init__()
self.resnet = resnet50(pretrained=pretrained)
self.resnet.fc = nn.Linear(2048, hidden_size)
self.fc = nn.Linear(hidden_size, num_classes)
self.relu = nn.ReLU()
self.dropout = nn.Dropout(dropout)
def require_all_grads(self):
for param in self.parameters():
param.requires_grad = True
def forward(self, x):
features = self.resnet(x)
outputs = self.fc(self.dropout(self.relu(features)))
return outputs, features
Below is what I have written so far, but I’m not sure how to complete the forward function. Any guidance would be greatly appreciated. Thank you.
class FCInceptionV3(nn.Module):
def __init__(self, num_classes=2, pretrained=True, hidden_size=2048, dropout=0.5):
super().__init__()
self.inception = models.inception_v3(pretrained=pretrained)
# Modify the final fully connected layer of the InceptionV3 model
num_ftrs = self.inception.fc.in_features
self.inception.fc = nn.Linear(num_ftrs, hidden_size)
# Add a custom fully connected layer for the primary net
self.inception.fc = nn.Linear(num_ftrs, 2)
self.relu = nn.ReLU()
self.dropout = nn.Dropout(dropout)
def require_all_grads(self):
for param in self.parameters():
param.requires_grad = True
def forward(self, x):
# Forward pass through the inception model
outputs = self.inception(x)
return outputs