Delen via


Uw PyTorch-trainingsmodel converteren naar ONNX

Opmerking

Voor meer functionaliteit kan PyTorch ook worden gebruikt met DirectML in Windows.

In de vorige fase van deze zelfstudie hebben we PyTorch gebruikt om ons machine learning-model te maken. Dat model is echter een .pth bestand. Als u het model wilt integreren met de Windows ML-app, moet u het model converteren naar de ONNX-indeling.

Het model exporteren

Als u een model wilt exporteren, gebruikt u de torch.onnx.export() functie. Met deze functie wordt het model uitgevoerd en wordt een trace vastgelegd van welke operators zijn gebruikt om de uitvoer te berekenen.

  1. Kopieer de volgende code naar het PyTorchTraining.py bestand in Visual Studio, boven uw hoofdfunctie.
import torch.onnx 

#Function to Convert to ONNX 
def Convert_ONNX(): 

    # set the model to inference mode 
    model.eval() 

    # Let's create a dummy input tensor  
    dummy_input = torch.randn(1, input_size, requires_grad=True)  

    # Export the model   
    torch.onnx.export(model,         # model being run 
         dummy_input,       # model input (or a tuple for multiple inputs) 
         "ImageClassifier.onnx",       # where to save the model  
         export_params=True,  # store the trained parameter weights inside the model file 
         opset_version=10,    # the ONNX version to export the model to 
         do_constant_folding=True,  # whether to execute constant folding for optimization 
         input_names = ['modelInput'],   # the model's input names 
         output_names = ['modelOutput'], # the model's output names 
         dynamic_axes={'modelInput' : {0 : 'batch_size'},    # variable length axes 
                                'modelOutput' : {0 : 'batch_size'}}) 
    print(" ") 
    print('Model has been converted to ONNX') 

Het is belangrijk om het model aan te roepen model.eval() of model.train(False) voordat u het exporteert, omdat hiermee het model wordt ingesteld op deductiemodus. Dit is nodig omdat operators zoals dropout of batchnorm zich anders gedragen in invoermodus en trainingsmodus.

  1. Om de conversie naar ONNX uit te voeren, voegt u een aanroep van de conversiefunctie toe aan de hoofdfunctie. U hoeft het model niet opnieuw te trainen, dus we zullen enkele functies uitcommentariëren die we niet meer hoeven uit te voeren. Uw hoofdfunctie is als volgt.
if __name__ == "__main__": 

    # Let's build our model 
    #train(5) 
    #print('Finished Training') 

    # Test which classes performed well 
    #testAccuracy() 

    # Let's load the model we just created and test the accuracy per label 
    model = Network() 
    path = "myFirstModel.pth" 
    model.load_state_dict(torch.load(path)) 

    # Test with batch of images 
    #testBatch() 
    # Test how the classes performed 
    #testClassess() 
 
    # Conversion to ONNX 
    Convert_ONNX() 
  1. Voer het project opnieuw uit door de Start Debugging knop op de werkbalk te selecteren of op te drukken F5. U hoeft het model niet opnieuw te trainen. U hoeft alleen het bestaande model uit de projectmap te laden.

De uitvoer is als volgt.

ONNX-conversieproces

Navigeer naar uw projectlocatie en zoek het ONNX-model naast het .pth model.

Opmerking

Bent u geïnteresseerd in meer informatie? Bekijk de PyTorch-zelfstudie over het exporteren van een model.

Verken uw model.

  1. Open het ImageClassifier.onnx modelbestand met Netron.

  2. Selecteer het gegevensknooppunt om de modeleigenschappen te openen.

Eigenschappen van ONNX-modellen

Zoals u ziet, vereist het model een 32-bits tensor-floatobject (multidimensionale matrix) als invoer en retourneert een Tensor float als uitvoer. De uitvoermatrix bevat de waarschijnlijkheid voor elk label. De manier waarop u het model hebt gemaakt, de labels worden vertegenwoordigd door 10 getallen en elk getal vertegenwoordigt de tien klassen objecten.

Etiket 0 Etiket 1 Etiket 2 Etiket 3 Etiket 4 Etiket 5 Etiket 6 Etiket 7 Etiket 8 Etiket 9
0 1 2 3 4 5 6 7 8 9
vliegtuig auto vogel kat hert hond kikker paard schip vrachtauto

U moet deze waarden extraheren om de juiste voorspelling weer te geven met de Windows ML-app.

Volgende stappen

Ons model is klaar voor implementatie. Vervolgens gaan we voor de hoofdgebeurtenis een Windows-toepassing bouwen en deze lokaal uitvoeren op uw Windows-apparaat.