pythonadvanced

Transfer Learning with TorchVision

Fine-tune a pretrained ResNet for custom image classification with PyTorch and TorchVision.

python
import torch
import torch.nn as nn
import torch.optim as optim
from torchvision import models, transforms, datasets
from torch.utils.data import DataLoader

transform = transforms.Compose([transforms.Resize(224), transforms.CenterCrop(224), transforms.ToTensor(), transforms.Normalize([0.485,0.456,0.406],[0.229,0.224,0.225])])

dataset = datasets.FakeData(size=200, image_size=(3,224,224), num_classes=5, transform=transform)
loader  = DataLoader(dataset, batch_size=16, shuffle=True)

model = models.resnet18(weights=models.ResNet18_Weights.DEFAULT)
for p in model.parameters():
    p.requires_grad = False
model.fc = nn.Linear(model.fc.in_features, 5)

optimizer = optim.Adam(model.fc.parameters(), lr=1e-3)
criterion = nn.CrossEntropyLoss()

model.train()
for images, labels in loader:
    optimizer.zero_grad()
    outputs = model(images)
    loss = criterion(outputs, labels)
    loss.backward()
    optimizer.step()
print('Fine-tuning complete')

Use Cases

  • image classification
  • custom CNN
  • transfer learning

Tags

Related Snippets

Similar patterns you can reuse in the same workflow.