Can anyone share his code for using finetuning alexnet please?
I am very new to all pytorch and deep learning and it would really help.
Thanks
@isalirezag You can find useful notes on (autograd notes) & (transfer learning tutorial). Be aware, instead of load
models.resnet18(pretrained=True)
you can load another models like alexnet
alexnet = models.alexnet(pretrained=True)
see other models from here (PyTorch Models)
I’m a rookie in PyTorch.
I have modified the code of tutorial. (Transfer Learning tutorial )
Finetuning the convnet
dset_classes_number = len(dset_classes)
model_ft = models.alexnet(pretrained=True)
model_ft.classifier = nn.Sequential(
nn.Dropout(),
nn.Linear(256 * 6 * 6, 4096),
nn.ReLU(inplace=True),
nn.Dropout(),
nn.Linear(4096, 4096),
nn.ReLU(inplace=True),
nn.Linear(4096, dset_classes_number),
)
if use_gpu:
model_ft = model_ft.cuda()
criterion = nn.CrossEntropyLoss()
optimizer_ft = optim.SGD(model_ft.parameters(), lr=0.001, momentum=0.9)
# Train and evaluate
model_ft = train_model(model_ft, criterion, optimizer_ft, exp_lr_scheduler,
num_epochs=25)
ConvNet as fixed feature extractor
dset_classes_number = len(dset_classes)
model_conv = torchvision.models.alexnet(pretrained=True)
for param in model_conv.parameters():
param.requires_grad = False
# num_ftrs = model_conv.fc.in_features
# model_conv.fc = nn.Linear(num_ftrs, dset_classes_number)
model_conv.classifier = nn.Sequential(
nn.Dropout(),
nn.Linear(256 * 6 * 6, 4096),
nn.ReLU(inplace=True),
nn.Dropout(),
nn.Linear(4096, 4096),
nn.ReLU(inplace=True),
nn.Linear(4096, dset_classes_number),
)
if use_gpu:
model_conv = model_conv.cuda()
criterion = nn.CrossEntropyLoss()
optimizer_conv = optim.SGD(model_conv.classifier.parameters(), lr=0.001, momentum=0.9)
# Train and evaluate
model_conv = train_model(model_conv, criterion, optimizer_conv,exp_lr_scheduler, num_epochs=10)
I wonder whether this modification is correct.
No need to reset all the FC layers. Just reset the last fc layer.
Wrote a short tutorial on fine tuning resnet in pytorch. Here - https://github.com/Spandan-Madan/Pytorch_fine_tuning_Tutorial
Hope this helps!
How do we reset just the final FC layer?
When I try the following:
model.conv.classifier[6] = nn.Linear(4096, dset_classes_number)
I get the error: ‘Sequential’ object does not support item assignment
Ok I’ve modified the code as follows, to only update the final FC layer.
ConvNet as fixed feature extractor
model_conv = torchvision.models.alexnet(pretrained=True)
for param in model_conv.parameters():
param.requires_grad = Falsenum_ftrs = model_conv.classifier[6].in_features
model_conv.classifier[6].out_features = Output_featuresfor param in model_conv.classifier[6].parameters():
param.requires_grad = Trueif use_gpu:
model_conv = model_conv.cuda()criterion = nn.CrossEntropyLoss()