Daniel Voigt Godoy - Deep Learning with PyTorch Step-by-Step A Beginner’s Guide-leanpub

peiying410632
from peiying410632 More from this publisher
22.02.2024 Views

Replacing the "Top" of the Model1 alex.classifier[6] = nn.Linear(4096, 3)The following diagram may help you visualize what’s happening.Figure 7.2 - AlexNetSource: Generated using Alexander Lenail’s NN-SVG [124] and adapted by the author.Notice that the number of input features remains the same, since it still takes theoutput from the hidden layer that precedes it. The new output layer requiresgradients by default, but we can double-check it:for name, param in alex.named_parameters():if param.requires_grad == True:print(name)Outputclassifier.6.weightclassifier.6.biasGreat, the only layer that will be learning anything is our brand new output layer(classifier.6), the "top" of the model."What about unfreezing some of the hidden layers?"Transfer Learning in Practice | 511

That’s also a possibility; in this case, it is like resuming training for the hiddenlayers, while learning from scratch for the output layer. You’d probably have tohave more data to pull this off, though."Could I have changed the whole classifier instead of just the outputlayer?"Sure thing! It would be possible to have a different architecture for the classifierpart, as long as it takes the 9,216 input features produced by the first part ofAlexNet, and outputs as many logits as necessary for the task at hand. In this case,the whole classifier would be learning from scratch, and you’d need even moredata to pull it off.The more layers you unfreeze or replace, the more data you’llneed to fine-tune the model.We’re sticking with the simplest approach here; that is, replacing the output layeronly.Technically speaking, we’re only fine-tuning a model if we do notfreeze pre-trained weights; that is, the whole model will be(slightly) updated. Since we are freezing everything but the lastlayer, we are actually using the pre-trained model for featureextraction only."What if I use a different model? Which layer should I replace then?"The table below covers some of the most common models you may use for transferlearning. It lists the expected size of the input images, the classifier layer to bereplaced, and the appropriate replacement, given the number of classes for thetask at hand (three in our case):Model Size Classifier Layer(s) Replacement Layer(s)AlexNet 224 model.classifier[6] nn.Linear(4096,num_classes)VGG 224 model.classifier[6] nn.Linear(4096,num_classes)InceptionV3 299 model.fc nn.Linear(2048,num_classes)model.AuxLogits.fcnn.Linear(768,num_classes)512 | Chapter 7: Transfer Learning

That’s also a possibility; in this case, it is like resuming training for the hidden

layers, while learning from scratch for the output layer. You’d probably have to

have more data to pull this off, though.

"Could I have changed the whole classifier instead of just the output

layer?"

Sure thing! It would be possible to have a different architecture for the classifier

part, as long as it takes the 9,216 input features produced by the first part of

AlexNet, and outputs as many logits as necessary for the task at hand. In this case,

the whole classifier would be learning from scratch, and you’d need even more

data to pull it off.

The more layers you unfreeze or replace, the more data you’ll

need to fine-tune the model.

We’re sticking with the simplest approach here; that is, replacing the output layer

only.

Technically speaking, we’re only fine-tuning a model if we do not

freeze pre-trained weights; that is, the whole model will be

(slightly) updated. Since we are freezing everything but the last

layer, we are actually using the pre-trained model for feature

extraction only.

"What if I use a different model? Which layer should I replace then?"

The table below covers some of the most common models you may use for transfer

learning. It lists the expected size of the input images, the classifier layer to be

replaced, and the appropriate replacement, given the number of classes for the

task at hand (three in our case):

Model Size Classifier Layer(s) Replacement Layer(s)

AlexNet 224 model.classifier[6] nn.Linear(4096,num_classes)

VGG 224 model.classifier[6] nn.Linear(4096,num_classes)

InceptionV3 299 model.fc nn.Linear(2048,num_classes)

model.AuxLogits.fc

nn.Linear(768,num_classes)

512 | Chapter 7: Transfer Learning

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!