Delen via


Uw PyTorch-model converteren naar ONNX-indeling

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 DataClassifier.py bestand in Visual Studio, boven uw hoofdfunctie.
#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') 

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__": 
    num_epochs = 10 
    train(num_epochs) 
    print('Finished Training\n') 
    test() 
    test_species() 
    convert() 
  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.

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 mdoel.

Verken uw model.

  1. Open het Network.onnx modelbestand met Neutron.

  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 gebouwd, worden de labels vertegenwoordigd door drie getallen, die elk zijn gekoppeld aan een specifiek type irisbloem.

Etiket 1 etiket 2 Etiket 3
0 1 2
Iris-setosa Iris-versicolor Iris-virginica

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.