Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
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.
- Kopieer de volgende code naar het
PyTorchTraining.pybestand 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.
- 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()
- Voer het project opnieuw uit door de
Start Debuggingknop op de werkbalk te selecteren of op te drukkenF5. U hoeft het model niet opnieuw te trainen. U hoeft alleen het bestaande model uit de projectmap te laden.
De uitvoer is als volgt.
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.
Open het
ImageClassifier.onnxmodelbestand met Netron.Selecteer het gegevensknooppunt om de modeleigenschappen te openen.
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.