It’s still a bit confusing for me. How are you training the 1st case if you aren’t adding the last layer which maps to the amount of classes of your dataset?
It seems you are loading the network without modifying the final amount of classes. In case you do feature extraction this is ok.
Without modifications you are taking ImageNet weights. Those weights come from a very big dataset with more than 1k classes. That’s why it generalizes very well as feature extractor.
When you freeze the whole model but the final layer, your network is not capable to map those features to your classes.
In the 3rd case it seems your dataset is not big enough and you overfit.
How to solve this?
You can think firsts layers are more general, and the deeper the more specific the learned filters are. You can try to use a smaller LR for the pretrained part, such that those weights aren’t too modified and a normal learning rate for the last FC layer you are adding. You can even freeze first layers as those are truly very general.