PyTorch eğitim modelinizi ONNX'e dönüştürme

Uyarı

Daha fazla işlevsellik için PyTorch, Windows üzerinde DirectML ile de kullanılabilir.

Bu öğreticinin önceki aşamasında, makine öğrenmesi modelimizi oluşturmak için PyTorch'u kullandık. Ancak bu model bir .pth dosyadır. Windows ML uygulamasıyla tümleştirebilmek için modeli ONNX biçimine dönüştürmeniz gerekir.

Modeli dışarı aktarma

Modeli dışarı aktarmak için işlevini kullanacaksınız torch.onnx.export() . Bu işlev modeli yürütür ve çıkışları hesaplamak için kullanılan işleçlerin bir izlemesini kaydeder.

  1. Aşağıdaki kodu Visual Studio'da PyTorchTraining.py , ana işlevinizin üstündeki dosyaya kopyalayın.
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') 

model.eval() veya model.train(False) öğesini çağırmak, model dışa aktarılmadan önce önemlidir, çünkü bu işlem modeli çıkarım moduna ayarlar. Bu, dropout veya batchnorm gibi operatörlerin çıkarım ve eğitim modunda farklı davranması nedeniyle gereklidir.

  1. ONNX'e dönüştürmeyi çalıştırmak için ana işlevde dönüştürme işlevine bir çağrı ekleyin. Modeli yeniden eğitmeniz gerekmez, bu nedenle artık çalıştırmamız gerekmeyen bazı işlevleri açıklama satırı yapacağız. Ana işleviniz aşağıdaki gibi olacaktır.
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. Araç çubuğundaki düğmeyi Start Debugging seçerek veya tuşuna basarak F5projeyi yeniden çalıştırın. Modeli yeniden eğitmeye gerek yoktur, mevcut modeli proje klasöründen yüklemeniz yeterlidir.

Çıkış aşağıdaki gibi olacaktır.

ONNX dönüştürme işlemi

Proje konumunuza gidin ve .pth modelinin bitişiğinde ONNX modelini bulun.

Uyarı

Daha fazla bilgi edinmek istiyor musunuz? Modeli dışarı aktarmaya ilişkin PyTorch öğreticisini gözden geçirin.

Modelinizi keşfedin.

  1. ImageClassifier.onnx Model dosyasını Netron ile açın.

  2. Model özelliklerini açmak için veri düğümünü seçin.

ONNX model özellikleri

Gördüğünüz gibi model, giriş olarak 32 bit tensor (çok boyutlu dizi) float nesnesi gerektirir ve çıkış olarak bir Tensor float döndürür. Çıkış dizisi her etiket için olasılığı içerir. Modeli oluşturma şekliniz, etiketler 10 sayı ile gösterilir ve her sayı on nesne sınıfını temsil eder.

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
uçak araba kuş kedi geyik köpek kurbağa at gemi kamyon

Windows ML uygulamasıyla doğru tahmini göstermek için bu değerleri ayıklamanız gerekir.

Sonraki Adımlar

Modelimiz dağıtıma hazırdır. Ardından, ana olay için bir Windows uygulaması oluşturalım ve bunu Windows cihazınızda yerel olarak çalıştıralım.