Convertire il modello PyTorch in formato ONNX
Nella fase precedente di questa esercitazione è stato usato PyTorch per creare il modello di Machine Learning. Tuttavia, tale modello è un .pth
file. Per essere in grado di integrarlo con l'app Windows ML, è necessario convertire il modello in formato ONNX.
Esportare il modello
Per esportare un modello, si userà la torch.onnx.export()
funzione . Questa funzione esegue il modello e registra una traccia degli operatori usati per calcolare gli output.
- Copiare il codice seguente nel
DataClassifier.py
file in Visual Studio, sopra la funzione 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')
È importante chiamare model.eval()
o model.train(False)
prima di esportare il modello, perché imposta il modello sulla modalità di inferenza. Questa operazione è necessaria perché gli operatori come dropout
o batchnorm
si comportano in modo diverso in modalità di inferenza e training.
- Per eseguire la conversione in ONNX, aggiungere una chiamata alla funzione di conversione alla funzione main. Non è necessario eseguire di nuovo il training del modello, quindi verranno commentato alcune funzioni che non è più necessario eseguire. La funzione principale sarà la seguente.
if __name__ == "__main__":
num_epochs = 10
train(num_epochs)
print('Finished Training\n')
test()
test_species()
convert()
- Eseguire di nuovo il progetto selezionando il
Start Debugging
pulsante sulla barra degli strumenti o premendoF5
. Non è necessario eseguire di nuovo il training del modello, è sufficiente caricare il modello esistente dalla cartella del progetto.
Passare al percorso del progetto e trovare il modello ONNX accanto al .pth
modello.
Nota
Sei interessato a scoprire di più? Esaminare l'esercitazione su PyTorch sull'esportazione di un mdoel.
Esplorare il modello.
Aprire il file del
Network.onnx
modello con Neutron.Selezionare il nodo dati per aprire le proprietà del modello.
Come si può notare, il modello richiede un oggetto float a 32 bit (matrice multidimensionale) come input e restituisce un valore float Tensor come output. La matrice di output includerà la probabilità per ogni etichetta. Il modo in cui è stato creato il modello, le etichette sono rappresentate da 3 numeri, ognuno associato a un tipo specifico di fiore iris.
Etichetta 1 | etichetta 2 | Etichetta 3 |
---|---|---|
0 | 1 | 2 |
Iris-setosa | Iris-versicolor | Iris-virginica |
Dovrai estrarre questi valori per visualizzare la stima corretta con l'app Windows ML.
Passaggi successivi
Il modello è pronto per la distribuzione. Successivamente, per l'evento principale, creare un'applicazione Windows ed eseguirla in locale nel dispositivo Windows.