Mengonversi model pelatihan PyTorch Anda ke ONNX
Catatan
Untuk fungsionalitas yang lebih besar, PyTorch juga dapat digunakan dengan DirectML di Windows.
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.
- 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.
- 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()
- Jalankan proyek lagi dengan memilih tombol
Start Debugging
pada toolbar, atau menekanF5
. Tidak perlu melatih model lagi, cukup muat model yang ada dari folder proyek.
Outputnya adalah sebagai berikut.
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.
ImageClassifier.onnx
Buka file model dengan Netron.Pilih simpul data untuk membuka properti model.
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 terbang | car | bird | cat | rusa | dog | kodok | 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.