PyTorch modelinizi ONNX biçimine dönüştürme

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.

Tip

Bu makale, PyTorch veri analizi yoludur. PyTorch görüntü sınıflandırma yolu için bkz. PyTorch eğitim modelinizi ONNX'e dönüştürün.

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 DataClassifier.py , ana işlevinizin üstündeki dosyaya kopyalayın.
#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') 

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

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

Uyarı

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

Modelinizi keşfedin.

  1. Network.onnx Model dosyasını Neutron 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 her biri belirli bir iris çiçeği türüyle ilişkili 3 sayı ile temsil edilir.

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

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.