How to replace the classes in a pretrained network's output classification layer?

8 vues (au cours des 30 derniers jours)
I've followed the MATLAB tutorial for training an image classification model (link below) and it works well for my 2 classes, but when I export it and then import it later on, it's basing predictions off of the original pretrained network's 1000 classes.
exportONNXNetwork( net, 'my_class_model.onnx' ), 'NetworkName', 'myModel' );
%... saved, then import it later on when needed:
fn = 'my_class_model.onnx';
classes = ["Class1" "Class2"];
mynet = importONNXNetwork( fn, 'OutputLayerType', 'classification', 'Classes', classes );
% Error results:
% Error using nnet.internal.cnn.onnx.importONNXNetwork>iCheckOutputLayerTypeAndClasses (line 116)
% Expected the number of classes specified to match the number of classes in the classification output
% layer: 1000. Instead it was 2.
If you remove the 'Classes' input, there is no error. However, the predictions are then given for the original 1,000 classes, not my two.
Do I need to replace the classification layer before training? Or is there an exporting parameter for this?
Link to tutorial:

Réponse acceptée

Anshika Chaurasia
Anshika Chaurasia le 14 Juin 2021
Hi,
As correctly mentioned you need to replace the classification layer and fully connected layer in net before training, so that network classify image for two classes.
You can refer to the following documentation and video for transfer learning in pretrained network:
Hope it helps!

Plus de réponses (0)

Catégories

En savoir plus sur Image Data Workflows dans Help Center et File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by