Bagikan melalui


Mengonversi model pelatihan PyTorch Anda ke ONNX

Pada tahap sebelumnya dari tutorial ini, kami menggunakan PyTorch untuk membuat model pembelajaran mesin kami. Namun, model tersebut adalah .pth file. Untuk dapat mengintegrasikannya dengan aplikasi Windows ML, Anda harus mengonversi model ke format ONNX.

Mengekspor model

Untuk mengekspor model, Anda akan menggunakan fungsi .torch.onnx.export() Fungsi ini menjalankan model, dan merekam jejak operator apa yang digunakan untuk menghitung output.

  1. Salin kode berikut ke PyTorchTraining.py dalam file di Visual Studio, di atas fungsi utama Anda.
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') 

Penting untuk memanggil model.eval() atau model.train(False) sebelum mengekspor model, karena ini mengatur model ke mode inferensi. Ini diperlukan karena operator menyukai dropout atau batchnorm berulah secara berbeda dalam mode inferensi dan pelatihan.

  1. Untuk menjalankan konversi ke ONNX, tambahkan panggilan ke fungsi konversi ke fungsi utama. Anda tidak perlu melatih model lagi, jadi kami akan mengomentari beberapa fungsi yang tidak perlu dijalankan lagi. Fungsi utama Anda adalah sebagai berikut.
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. Jalankan proyek lagi dengan memilih tombol Start Debugging pada toolbar, atau menekan F5. Tidak perlu melatih model lagi, cukup muat model yang ada dari folder proyek.

Outputnya adalah sebagai berikut.

ONNX conversion process

Navigasi ke lokasi proyek Anda dan temukan model ONNX di .pth samping model.

Catatan

Tertarik untuk mempelajari lebih lanjut? Tinjau tutorial PyTorch tentang mengekspor model.

Jelajahi model Anda.

  1. ImageClassifier.onnx Buka file model dengan Netron.

  2. Pilih simpul data untuk membuka properti model.

ONNX model properties

Seperti yang Anda lihat, model memerlukan objek float tensor 32-bit (array multi-dimensi) sebagai input, dan mengembalikan float Tensor sebagai output. Array output akan mencakup probabilitas untuk setiap label. Cara Anda membangun model, label diwakili oleh 10 angka, dan setiap angka mewakili sepuluh kelas objek.

Label 0 Label 1 Label 2 Label 3 Label 4 Label 5 Label 6 Label 7 Label 8 Label 9
0 1 2 3 4 5 6 7 8 9
Pesawat car bird cat Rusa anjing Katak Kuda Kapal truck

Anda harus mengekstrak nilai-nilai ini untuk menampilkan prediksi yang benar dengan aplikasi Windows ML.

Langkah berikutnya

Model kami siap untuk disebarkan. Selanjutnya, untuk acara utama - mari kita buat aplikasi Windows dan jalankan secara lokal di perangkat Windows Anda.