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.
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
DataClassifier.pybestand 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.
- 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()
- 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.
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.
Open het
Network.onnxmodelbestand met Neutron.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 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.