Ben Chuanlong Du's Blog

It is never too late to learn.

Delete a Layer in a Pretrained Model in PyTorch

It is common to customize a pretrained model by delete the output layer or replace it to the output layer that suits your use case. There are several ways to achieve this in PyTorch.

Replace the Fully Connected Layer with an Identity Layer

  1. Define an identity layer.

  2. Replace the fully connected layer with an Identity Layer (using ResNet18 as an example).

In [3]:
model = models.resnet18(pretrained=False)
model.fc = Identity()
In [2]:
import torch
from torchvision import models


class Identity(torch.nn.Module):
    def __init__(self):
        super(Identity, self).__init__()

    def forward(self, x):
        return x
In [ ]:
 

Extract Layers and Chain Them

In [ ]:
model.classifier = nn.Sequential(*[model.classifier[i] for i in range(4)])
print(model.classifier)
In [ ]:
model.classifier = nn.Sequential(*list(model.classifier.children())[:-3])

Inference using the customized model.

In [4]:
x = torch.randn(1, 3, 224, 224)
output = model(x)
print(output.shape)
torch.Size([1, 512])

Using Forward Hooks

Please refer to How can l load my best model as a feature extractor/evaluator? for more details.

In [ ]:
 

Comments