Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu makalede, ML.NET kullanarak bir C# konsol uygulamasında tahminler yapmak için Azure Machine Learning AutoML Açık Sinir Ağı Değişimi (ONNX) modelini kullanmayı öğreneceksiniz. ML.NET , .NET ekosistemi için özel makine öğrenmesi modellerini eğitip kullanmanıza olanak tanıyan açık kaynak, platformlar arası bir makine öğrenmesi çerçevesidir. ML.NET C# veya F# gibi kod öncelikli bir yaklaşımı ya da Model Builder ve ML.NET CLI gibi düşük kodlu araçları destekler.
TensorFlow ve ONNX gibi diğer popüler makine öğrenmesi çerçevelerini kullanabilmeniz için ML.NET çerçevesi genişletilebilir. ONNX , çerçeveler arasında birlikte çalışabilirliği destekleyen yapay zeka modelleri için açık kaynak bir biçimdir. Modeli PyTorch gibi popüler bir makine öğrenmesi çerçevesinde eğitebilir, ONNX biçimine dönüştürebilir ve ONNX modelini ML.NET gibi farklı bir çerçevede kullanabilirsiniz.
Önkoşullar
- .NET 6 SDK veya üzeri.
- Komut kabuğu ve metin düzenleyicisi veya Visual Studio ya da Visual Studio Code gibi bir IDE.
- ONNX modeli. NyC taksi veri regresyon not defterini izleyerek örnek bir model oluşturabilirsiniz.
- İsteğe bağlı olarak,
Netrongibi bir araç kullanarak ONNX modelini inceleyin.
C# konsol uygulaması oluşturma
Bu örnekte uygulamanızı derlemek için .NET CLI kullanılmaktadır. Visual Studio veya başka bir IDE de kullanabilirsiniz.
Yeni bir terminal açın ve adlı
AutoMLONNXConsoleAppyeni bir C# .NET konsol uygulaması oluşturun. Uygulamanız için bu ada sahip bir dizin oluşturulur.dotnet new console -o AutoMLONNXConsoleAppAutoMLONNXConsoleApp dizinine geçin.
cd AutoMLONNXConsoleApp
Yazılım paketleri ekleme
ML.NET, tahminler için ONNX çalışma zamanını kullanan bir API sağlar. Microsoft.ML, Microsoft.ML.OnnxRuntime ve Microsoft.ML.OnnxTransformer NuGet paketleri bir .NET uygulamasında ONNX modeli kullanmak için gereken bağımlılıkları içerir.
Paketleri yükleyin.
dotnet add package Microsoft.ML dotnet add package Microsoft.ML.OnnxRuntime dotnet add package Microsoft.ML.OnnxTransformerEn üste aşağıdaki
usingyönergeleri eklemek için Program.cs dosyasını düzenleyin.using System.Linq; using Microsoft.ML; using Microsoft.ML.Data; using Microsoft.ML.Transforms.Onnx;
ONNX modeline bir başvuru ekleyin
Uygulamanıza ONNX model dosyasına bir referans ekleyin. Uygulamanın ONNX modeline erişmesinin bir yolu, derleme çıkış dizininden geçmektir. MSBuild ortak öğeleri hakkında daha fazla bilgi için bkz. MSBuild kılavuzu.
ONNX modelinizi kopyalayın ve uygulamanızın AutoMLONNXConsoleApp kök dizinine yapıştırın.
Aşağıdaki kodu düğümün içine eklemek için
Projectdosyasını düzenleyin. Bu durumda, ONNX model dosyasının adı automl-model.onnx'tir.<ItemGroup> <None Include="automl-model.onnx"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </None> </ItemGroup>Program.cs dosyasını düzenleyerek aşağıdaki satırı içine ekleyin.
static string ONNX_MODEL_PATH = "automl-model.onnx";MLContextsınıfınınMainyönteminde yeni birProgramörneği oluşturun.MLContext mlContext = new MLContext();
MLContext sınıfı, tüm ML.NET işlemleri için bir başlangıç noktasıdır. Başlatma işlemi mlContext , model yaşam döngüsü boyunca paylaşılabilen yeni bir ML.NET ortamı oluşturur. sınıfı, Entity Framework'tekine DbContext kavramsal olarak benzerdir.
Model veri şemasını tanımlama
Model, giriş ve çıkış verilerini belirli bir biçimde bekler. ML.NET, sınıflar aracılığıyla verilerinizin biçimini tanımlamanıza olanak tanır. Aşağıdaki tabloda NYC Taxi Trip veri kümesindeki verileri kullanan bir model örneği gösterilmektedir.
| satıcı kimliği | oran_kodu | yolcu sayısı | seyahat_süresi_saniye | seyahat mesafesi | ödeme_tipi | Ücret_tutarı |
|---|---|---|---|---|---|---|
VTS |
1 | 1 | 1140 | 3.75 | CRD |
15,5 |
VTS |
1 | 1 | 480 | 2.72 | CRD |
10.0 |
VTS |
1 | 1 | 1680 | 7,8 | CSH |
26.5 |
ONNX modelini inceleme
Veri biçiminizin nasıl göründüğünü bilmiyorsanız, ONNX modelini incelemek için gibi Netron bir araç kullanabilirsiniz. Modelinizin girişlerini ve çıkışlarını incelemek için kullanın Netron :
Netron'ı açın.Üst menü çubuğunda Dosya>Aç'ı seçin ve dosya tarayıcısını kullanarak modelinizi seçin.
Modeliniz açılır. Örneğin, modelin
automl-model.onnxyapısı aşağıdaki ekran görüntüsüne benzer:Bu örnekte modelin meta verilerini görüntülemek için grafiğin
variable_out1en altındaki son düğümü seçin. Kenar çubuğundaki girişler ve çıkışlar modelin beklenen girişlerini, çıkışlarını ve veri türlerini gösterir. Modelinizin giriş ve çıkış şemasını tanımlamak için bu bilgileri kullanın.
Model giriş şemasını tanımlama
Program.cs dosyanızda aşağıdaki özelliklere sahip adlı OnnxInput yeni bir sınıf oluşturun:
public class OnnxInput
{
[ColumnName("vendor_id")]
public string VendorId { get; set; }
[ColumnName("rate_code"),OnnxMapType(typeof(Int64),typeof(Single))]
public Int64 RateCode { get; set; }
[ColumnName("passenger_count"), OnnxMapType(typeof(Int64), typeof(Single))]
public Int64 PassengerCount { get; set; }
[ColumnName("trip_time_in_secs"), OnnxMapType(typeof(Int64), typeof(Single))]
public Int64 TripTimeInSecs { get; set; }
[ColumnName("trip_distance")]
public float TripDistance { get; set; }
[ColumnName("payment_type")]
public string PaymentType { get; set; }
}
Veri özniteliklerini kullanma
Her özellik veri kümesindeki bir sütunla eşleşir. Özellikler, özniteliklerle daha da açıklanır.
özniteliği,
ColumnNameML.NET veriler üzerinde çalışırken sütuna nasıl başvuracağını belirtmenize olanak tanır. Örneğin,TripDistanceözelliği standart .NET adlandırma kurallarına uysa da, model yalnızcatrip_distanceadlı bir sütun veya özelliğe sahiptir. Bu adlandırma tutarsızlığını gidermek içinColumnNameözniteliği,TripDistanceözelliğinitrip_distanceadlı sütuna veya özelliğe eşler.Sayısal değerler için ML.NET yalnızca değer türleri üzerinde
Singleçalışır, ancak bazı sütunların özgün veri türleri tamsayılardır. özniteliği,OnnxMapTypeONNX ile ML.NET arasındaki türleri eşler.
Veri öznitelikleri hakkında daha fazla bilgi için ML.NET veri yükleme kılavuzuna bakın.
Model çıktı şemasını tanımlama
Veriler işlendikten sonra belirli bir biçimin çıkışını oluşturur. Veri çıktı şemanızı tanımlamak için aşağıdaki özelliklere sahip OnnxOutput dosyasında adlı yeni bir sınıf oluşturun:
public class OnnxOutput
{
[ColumnName("variable_out1")]
public float[] PredictedFare { get; set; }
}
Benzer şekilde, çıkışı daha açıklayıcı bir ad ile eşlemek için OnnxInput özniteliğini ColumnName, variable_out1 kullanın PredictedFare.
Tahmin işlem hattı tanımlama
ML.NET'daki işlem hattı genellikle giriş verileri üzerinde çalıştırılan zincirlenmiş dönüştürmelerden oluşan bir seridir ve çıkış oluşturur. Veri dönüştürmeleri hakkında daha fazla bilgi için ML.NET veri dönüştürme kılavuzuna bakın.
sınıfının içinde
GetPredictionPipelineadlıProgramyeni bir yöntem oluşturun.static ITransformer GetPredictionPipeline(MLContext mlContext) { }Giriş ve çıkış sütun adlarını tanımlamak için yönteminin içine
GetPredictionPipelineaşağıdaki kodu ekleyin.var inputColumns = new string [] { "vendor_id", "rate_code", "passenger_count", "trip_time_in_secs", "trip_distance", "payment_type" }; var outputColumns = new string [] { "variable_out1" };İşlem hattınızı tanımlayan kodu ekleyin. ,
IEstimatorişlemlerin bir şemasını ve işlem hattınızın giriş ve çıkış şemalarını sağlar.var onnxPredictionPipeline = mlContext .Transforms .ApplyOnnxModel( outputColumnNames: outputColumns, inputColumnNames: inputColumns, ONNX_MODEL_PATH);Bu durumda,
ApplyOnnxModelgiriş ve çıkış sütunlarının adlarını ve ONNX model dosyasının yolunu alan işlem hattındaki tek dönüşümdür.yalnızca
IEstimatorverilerinize uygulanacak işlem kümesini tanımlar.Fityöntemini kullanarak verileriniz üzerinde çalışacak birITransformeryaratmak içinonnxPredictionPipelineoluşturun.var emptyDv = mlContext.Data.LoadFromEnumerable(new OnnxInput[] {}); return onnxPredictionPipeline.Fit(emptyDv);yöntemi,
Fitüzerinde işlemleri gerçekleştirmek için birIDataViewgiriş bekler. ML.NET birIDataViewtablo biçimindeki verileri temsil eder. Bu durumda işlem hattı yalnızca tahminler içindir, bu nedenle gerekli giriş ve çıkış şeması bilgilerini vermekIDataViewiçin boşITransformerbir alan sağlayabilirsiniz. Daha sonra uygulamanızda daha fazla kullanılmak üzere hazırlananITransformerolarak döndürülür.İpucu
Bu örnek, işlem hattını aynı uygulama içinde tanımlar ve kullanır. Ancak, tahminler için işlem hattınızı tanımlamak ve kullanmak için ayrı uygulamalar kullanmak en iyisidir. ML.NET'de işlem hatlarınız diğer .NET son kullanıcı uygulamalarında daha fazla kullanım için seri hale getirilebilir ve kaydedilebilir.
ML.NET masaüstü uygulamaları, web hizmetleri ve WebAssembly uygulamaları gibi çeşitli dağıtım hedeflerini destekler. İşlem hatlarını kaydetme hakkında daha fazla bilgi için ML.NET kaydetme ve eğitilen modelleri yükleme kılavuzuna bakın.
İçinde
Mainyöntemi, gerekli parametrelerleGetPredictionPipelineyöntemini çağırın.var onnxPredictionPipeline = GetPredictionPipeline(mlContext);
Tahminlerde bulunmak için modeli kullanma
Artık bir işlem hattınız olduğuna göre, tahminlerde bulunmak için bunu kullanabilirsiniz. ML.NET adlı PredictionEnginetek bir veri örneğinde tahminler yapmak için kullanışlı bir API sağlar.
`
Mainyönteminin içinde,PredictionEngineyöntemini kullanarak birCreatePredictionEngineoluşturun.`var onnxPredictionEngine = mlContext.Model.CreatePredictionEngine<OnnxInput, OnnxOutput>(onnxPredictionPipeline);Test verileri girişi oluşturun.
var testInput = new OnnxInput { VendorId = "CMT", RateCode = 1, PassengerCount = 1, TripTimeInSecs = 1271, TripDistance = 3.8f, PaymentType = "CRD" };Yeni
onnxPredictionEngineverilerini temel alarak tahminlerde bulunmak içintestInputyöntemini,Predictkullanarak yapın.var prediction = onnxPredictionEngine.Predict(testInput);Tahmininizin sonucunu konsola yazın.
Console.WriteLine($"Predicted Fare: {prediction.PredictedFare.First()}");Uygulamanızı çalıştırmak için .NET CLI'yi kullanın.
dotnet runSonuç aşağıdaki çıkışa benzer görünmelidir:
Predicted Fare: 15.621523
ML.NET'da tahmin yapma hakkında daha fazla bilgi için bkz. Tahmin yapmak için model kullanma.