Convertir votre modèle PyTorch au format ONNX
Dans l’étape précédente de ce tutoriel, nous avons utilisé PyTorch pour créer notre modèle de Machine Learning. Toutefois, ce modèle est un fichier .pth
. Pour être en mesure de l’intégrer à l’application Windows ML, vous devez convertir le modèle au format ONNX.
Exporter le modèle
Pour exporter un modèle, vous allez utiliser la fonction torch.onnx.export()
. Cette fonction exécute le modèle, et enregistre une trace des opérateurs utilisés pour calculer les sorties.
- Copiez le code suivant dans le fichier
DataClassifier.py
dans Visual Studio, au-dessus de votre fonction principale.
#Function to Convert to ONNX
def convert():
# set the model to inference mode
model.eval()
# Let's create a dummy input tensor
dummy_input = torch.randn(1, 3, 32, 32, requires_grad=True)
# Export the model
torch.onnx.export(model, # model being run
dummy_input, # model input (or a tuple for multiple inputs)
"Network.onnx", # where to save the model
export_params=True, # store the trained parameter weights inside the model file
opset_version=11, # the ONNX version to export the model to
do_constant_folding=True, # whether to execute constant folding for optimization
input_names = ['input'], # the model's input names
output_names = ['output'], # the model's output names
dynamic_axes={'input' : {0 : 'batch_size'}, # variable length axes
'output' : {0 : 'batch_size'}})
print(" ")
print('Model has been converted to ONNX')
Il est important d’appeler model.eval()
ou model.train(False)
avant d’exporter le modèle, car cela définit le modèle en mode d’inférence. Cela est nécessaire, car les opérateurs comme dropout
ou batchnorm
se comportent différemment en mode d’inférence et en mode d’entraînement.
- Pour exécuter la conversion au format ONNX, ajoutez un appel à la fonction de conversion à la fonction principale. Vous n’avez pas besoin d’entraîner à nouveau le modèle. Nous allons donc convertir en commentaires certaines fonctions que nous n’avons plus besoin d’exécuter. Votre fonction principale sera la suivante.
if __name__ == "__main__":
num_epochs = 10
train(num_epochs)
print('Finished Training\n')
test()
test_species()
convert()
- Réexécutez le projet en sélectionnant le bouton
Start Debugging
dans la barre d’outils, ou en appuyant surF5
. Il n’est pas nécessaire d’effectuer une nouvelle tentative d’entraînement du modèle. Chargez simplement le modèle existant à partir du dossier du projet.
Accédez à l’emplacement de votre projet et recherchez le modèle ONNX en regard du modèle .pth
.
Remarque
Vous voulez en savoir plus ? Consultez le tutoriel PyTorch sur l’exportation d’un modèle.
Explorez votre modèle.
Ouvrez le fichier de modèle
Network.onnx
avec Neutron.Sélectionnez le nœud data pour ouvrir les propriétés du modèle.
Comme vous pouvez le voir, le modèle requiert un objet float tenseur de 32 bits (tableau multidimensionnel) comme entrée et retourne un float Tensor en sortie. Le tableau de sortie inclut la probabilité pour chaque étiquette. Dans le modèle que vous avez créé, les étiquettes sont représentées par trois chiffres, chacun d’eux étant associé à un type spécifique d’iris.
Étiquette 1 | label 2 | Étiquette 3 |
---|---|---|
0 | 1 | 2 |
Iris-setosa | Iris-versicolor | Iris-virginica |
Vous devrez extraire ces valeurs pour afficher la prédiction correcte avec l’application Windows ML.
Étapes suivantes
Notre modèle est prêt à être déployé. Ensuite, pour l’événement principal, nous allons créer une application Windows et l’exécuter localement sur votre appareil Windows.