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 öğreticinin önceki bölümünde, BIR modeli ONNX biçiminde derlemeyi ve dışarı aktarmayı öğrendiniz. Artık bu modeli kullandığınıza göre, WinML API'lerini çağırarak bir Windows uygulamasına ekleyebilir ve bir cihazda yerel olarak çalıştırabilirsiniz.
İşiniz bittiğinde çalışan bir Görüntü sınıflandırıcısı WinML UWP uygulamasına (C#) sahip olacaksınız.
Örnek uygulama hakkında
Modelimizi kullanarak yiyecek görüntülerini sınıflandırabilen bir uygulama oluşturacağız. Yerel cihazınızdan bir görüntü seçmenize ve önceki bölümde oluşturup eğitmiş olduğunuz yerel olarak depolanan bir sınıflandırma ONNX modeliyle işlemenize olanak tanır. Döndürülen etiketler görüntünün yanında ve sınıflandırmanın olasılık olasılığıyla birlikte görüntülenir.
Bu öğreticiyi şu ana kadar takip ediyorsanız, uygulama geliştirme için gerekli önkoşullara zaten sahip olmanız gerekir. Eğer bir hatırlatmaya ihtiyacınız varsa, bu öğreticinin ilk bölümüne bakabilirsiniz.
Uyarı
Örnek kodun tamamını indirmeyi tercih ederseniz çözüm dosyasını kopyalayabilirsiniz. Depoyu kopyalayın, bu örneğe gidin ve dosyayı Visual Studio ile açın ImageClassifierAppUWP.sln . Ardından [Uygulamayı başlat](uygulamayı #Launch) adımına atlayabilirsiniz.
WinML UWP oluşturma (C#)
Aşağıda, uygulamanızı ve WinML kodunuzu sıfırdan nasıl oluşturabileceğinizi göstereceğiz. Nasıl yapılacağını öğreneceksiniz:
- Makine öğrenmesi modeli yükleme.
- Görüntüyü gerekli biçimde yükleyin.
- Modelin girişlerini ve çıkışlarını bağlayın.
- Modeli değerlendirin ve anlamlı sonuçlar görüntüleyin.
Ayrıca basit bir GUI oluşturmak için temel XAML'yi kullanarak görüntü sınıflandırıcısını test edebilirsiniz.
Uygulamayı oluşturma
- Visual Studio'yu açın ve öğesini seçin
create a new project.
- Arama çubuğuna yazın
UWPve ardından öğesini seçinBlank APP (Universal Windows. Bu, önceden tanımlanmış denetimleri veya düzeni olmayan tek sayfalı Evrensel Windows Platformu (UWP) uygulaması için yeni bir C# projesi açar. Proje için bir yapılandırma penceresi açmak için seçinNext.
- Yapılandırma penceresinde:
- Projeniz için bir ad seçin. Burada ImageClassifierAppUWP kullanıyoruz.
- Projenizin konumunu seçin.
- VS 2019 kullanıyorsanız,
Place solution and project in the same directoryseçeneğinin işaretli olmadığından emin olun. - VS 2017 kullanıyorsanız işaretli olduğundan emin olun
Create directory for solution.
Projenizi oluşturmak için basın create . Minimum hedef sürüm penceresi açılabilir. En düşük sürümünüzün Windows 10 derleme 17763 veya üzeri olarak ayarlandığından emin olun.
Uygulama oluşturmak ve WinML uygulamasıyla model dağıtmak için aşağıdakilere ihtiyacınız vardır:
Proje oluşturulduktan sonra proje klasörüne gidin, [.\ImageClassifierAppUWP\Assets] assets klasörünü açın ve modelinizi bu konuma kopyalayın.
Model adını
model.onnx'danclassifier.onnx'e değiştirin. Bu, işleri biraz daha net hale getirir ve öğreticinin formatına uyum sağlar.
Modelinizi keşfedin
Model dosyanızın yapısı hakkında bilgi edinelim.
Gördüğünüz gibi model, giriş olarak 32 bit Tensor (çok boyutlu dizi) kayan nesne gerektirir ve iki çıkış döndürür: ilk adı classLabel dizelerin tensor'ı, ikinci adı loss ise etiketlenmiş her sınıflandırmanın olasılığını açıklayan bir dize-kayan eşleme dizisidir. Windows uygulamanızda model çıkışını başarıyla görüntülemek için bu bilgilere ihtiyacınız olacaktır.
Proje çözümünü keşfetme
Şimdi proje çözümünüzü inceleyelim.
Visual Studio, Çözüm Gezgini'nin içinde otomatik olarak birkaç cs-code dosyası oluşturmuştur.
MainPage.xaml GUI'nizin XAML kodunu ve MainPage.xaml.cs uygulama kodunuzu içerir. Daha önce bir UWP uygulaması oluşturduysanız, bu dosyalar size çok tanıdık geliyor olmalıdır.
Uygulama GUI'sini oluşturma
İlk olarak uygulamanız için basit bir GUI oluşturalım.
Dosyaya
MainPage.xamlçift tıklayın. Boş uygulamanızda uygulamanızın GUI'sinin XAML şablonu boş olduğundan bazı kullanıcı arabirimi özellikleri eklememiz gerekir.Aşağıdaki kodu ana gövdesine
MainPage.xamlekleyin.
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<StackPanel Margin="1,0,-1,0">
<TextBlock x:Name="Menu"
FontWeight="Bold"
TextWrapping="Wrap"
Margin="10,0,0,0"
Text="Image Classification"/>
<TextBlock Name="space" />
<Button Name="recognizeButton"
Content="Pick Image"
Click="OpenFileButton_Click"
Width="110"
Height="40"
IsEnabled="True"
HorizontalAlignment="Left"/>
<TextBlock Name="space3" />
<Button Name="Output"
Content="Result is:"
Width="110"
Height="40"
IsEnabled="True"
HorizontalAlignment="Left"
VerticalAlignment="Top">
</Button>
<!--Display the Result-->
<TextBlock Name="displayOutput"
FontWeight="Bold"
TextWrapping="Wrap"
Margin="30,0,0,0"
Text="" Width="1471" />
<Button Name="ProbabilityResult"
Content="Probability is:"
Width="110"
Height="40"
IsEnabled="True"
HorizontalAlignment="Left"/>
<!--Display the Result-->
<TextBlock Name="displayProbability"
FontWeight="Bold"
TextWrapping="Wrap"
Margin="30,0,0,0"
Text="" Width="1471" />
<TextBlock Name="space2" />
<!--Image preview -->
<Image Name="UIPreviewImage" Stretch="Uniform" MaxWidth="300" MaxHeight="300"/>
</StackPanel>
</Grid>
Windows Machine Learning Kod Oluşturucusu
Windows Machine Learning Kod Oluşturucusu veya mlgen, UWP uygulamalarında WinML API'lerini kullanmaya başlamanıza yardımcı olan bir Visual Studio uzantısıdır. UWP projesine eğitilmiş bir ONNX dosyası eklediğinizde şablon kodu oluşturur.
Windows Machine Learning'in kod oluşturucu mlgen'i, sizin için Windows ML API'sini çağıran sarmalayıcı sınıflarıyla bir arabirim (C#, C++/WinRT ve C++/CX için) oluşturur. Bu sayede projenizdeki bir modeli kolayca yükleyebilir, bağlayabilir ve değerlendirebilirsiniz. Bu öğreticide bu işlevlerin çoğunu bizim için işlemek için kullanacağız.
Kod oluşturucu, Visual Studio 2017 ve sonraki sürümlerde kullanılabilir. Windows 10, sürüm 1903 ve sonraki sürümlerde mlgen'in artık Windows 10 SDK'sında bulunmadığını, bu nedenle uzantıyı indirip yüklemeniz gerektiğini unutmayın. Bu öğreticiyi giriş bölümünden takip ediyorsanız, bunu zaten halletmiş olursunuz, ancak değilse VS 2019 veya VS 2017 için indirmeniz gerekecek.
Uyarı
mlgen hakkında daha fazla bilgi edinmek için lütfen mlgen belgelerine bakın
Henüz yüklemediyseniz mlgen'i yükleyin.
Visual Studio'da
AssetsÇözüm Gezgini'nde klasöre sağ tıklayın ve öğesini seçinAdd > Existing Item.içindeki
ImageClassifierAppUWP [….\ImageClassifierAppUWP\Assets]varlıklar klasörüne gidin, daha önce buraya kopyaladığınız ONNX modelini bulun ve öğesini seçinadd.VS'de çözüm gezginindeki assets klasörüne bir ONNX modeli ("ad: "sınıflandırıcı") ekledikten sonra projede artık iki yeni dosya olmalıdır:
-
classifier.onnx- bu, ONNX biçimindeki modelinizdir. -
classifier.cs– otomatik olarak oluşturulan WinML kod dosyası.
- Modelin derlendiğinden emin olmak için
classifier.onnxdosyasını seçin vePropertiesseçin.Build ActioniçinContentöğesini seçin.
Şimdi classifier.cs dosyasında yeni oluşturulan kodu inceleyelim.
Oluşturulan kod üç sınıf içerir:
-
classifierModel: Bu sınıf, model örneği oluşturma ve model değerlendirmesi için iki yöntem içerir. Makine öğrenmesi modeli gösterimini oluşturmamıza, sistem varsayılan cihazında oturum oluşturmamıza, belirli giriş ve çıkışları modele bağlamamıza ve modeli zaman uyumsuz olarak değerlendirmemize yardımcı olur. -
classifierInput: Bu sınıf, modelin beklediği giriş türlerini başlatır. Model girişi, giriş verilerinin model gereksinimlerine bağlıdır. Bizim örneğimizde giriş, bir modele geçirmek için kullanılan görüntünün özelliklerini açıklayan bir sınıf olan ImageFeatureValue değerini bekler. -
classifierOutput: Bu sınıf, modelin çıkış yapacağı türleri başlatır. Model çıkışı, model tarafından nasıl tanımlandığına bağlıdır. Bizim örneğimizde çıkış, String ve TensorFloat (Float32) türünde kayıp olarak adlandırılan bir harita dizisi (sözlükler) olacaktır.
Şimdi projemizdeki modeli yüklemek, bağlamak ve değerlendirmek için bu sınıfları kullanacaksınız.
Modeli ve girişleri yükleme
Modeli yükleme
Uygulama kodunu açmak için kod dosyasına çift tıklayın
MainPage.xaml.cs.İhtiyacınız olan tüm API'lere erişim elde etmek için "using" deyimlerini aşağıdakilerle değiştirin.
// Specify all the using statements which give us the access to all the APIs that you'll need
using System;
using System.Threading.Tasks;
using Windows.AI.MachineLearning;
using Windows.Graphics.Imaging;
using Windows.Media;
using Windows.Storage;
using Windows.Storage.Pickers;
using Windows.Storage.Streams;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Media.Imaging;
- Aşağıdaki değişken bildirimlerini using deyimlerinden sonra sınıfınızın
MainPageiçinde, ad alanınınImageClassifierAppUWPaltına ekleyin.
// All the required variable declaration
private classifierModel modelGen;
private classifierInput input = new classifierModelInput();
private classifierOutput output;
private StorageFile selectedStorageFile;
private string result = "";
private float resultProbability = 0;
Sonuç aşağıdaki gibi görünür.
// Specify all the using statements which give us the access to all the APIs that we'll need
using System;
using System.Threading.Tasks;
using Windows.AI.MachineLearning;
using Windows.Graphics.Imaging;
using Windows.Media;
using Windows.Storage;
using Windows.Storage.Pickers;
using Windows.Storage.Streams;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Media.Imaging;
namespace ImageClassifierAppUWP
{
public sealed partial class MainPage : Page
{
// All the required fields declaration
private classifierModel modelGen;
private classifierInput input = new classifierInput();
private classifierOutput output;
private StorageFile selectedStorageFile;
private string result = "";
private float resultProbability = 0;
Şimdi LoadModel yöntemini uygulayacaksınız. yöntemi ONNX modeline erişip bellekte depolar. Ardından, modeli bir CreateFromStreamAsync nesne olarak oluşturmak için LearningModel yöntemini kullanacaksınız.
LearningModel sınıfı eğitilmiş bir makine öğrenmesi modelini temsil eder. Örneklemi oluşturulduğunda, LearningModel Windows ML ile etkileşim kurmak için kullandığınız ilk nesneyi oluşturur.
Modeli yüklemek için sınıfında birkaç statik yöntem LearningModel kullanabilirsiniz. Bu durumda CreateFromStreamAsync yöntemini kullanacaksınız.
CreateFromStreamAsync yöntemi mlgen ile otomatik olarak oluşturulmuştur, bu nedenle bu yöntemi uygulamanız gerekmez. Mlgen tarafından oluşturulan dosyaya classifier.cs çift tıklayarak bu yöntemi gözden geçirebilirsiniz.
Sınıf hakkında LearningModel daha fazla bilgi edinmek için lütfen LearningModel Sınıfı belgelerini gözden geçirin.
Modeli yüklemenin ek yolları hakkında daha fazla bilgi edinmek için lütfen Model yükleme belgelerini gözden geçirin
- sınıfının içindeki
loadModelkod dosyanızaMainPage.xaml.csbirMainPageyöntem ekleyin.
private async Task loadModel()
{
// Get an access the ONNX model and save it in memory.
StorageFile modelFile = await StorageFile.GetFileFromApplicationUriAsync(new Uri($"ms-appx:///Assets/classifier.onnx"));
// Instantiate the model.
modelGen = await classifierModel.CreateFromStreamAsync(modelFile);
}
- Şimdi sınıfın oluşturucusuna yeni yönteme bir çağrı ekleyin.
// The main page to initialize and execute the model.
public MainPage()
{
this.InitializeComponent();
loadModel();
}
Sonuç aşağıdaki gibi görünür.
// The main page to initialize and execute the model.
public MainPage()
{
this.InitializeComponent();
loadModel();
}
// A method to load a machine learning model.
private async Task loadModel()
{
// Get an access the ONNX model and save it in memory.
StorageFile modelFile = await StorageFile.GetFileFromApplicationUriAsync(new Uri($"ms-appx:///Assets/classifier.onnx"));
// Instantiate the model.
modelGen = await classifierModel.CreateFromStreamAsync(modelFile);
}
Görüntüyü Yükleme
- Model yürütme için dört yöntem çağrısı sırasını başlatmak için bir tıklama olayı tanımlamamız gerekir: dönüştürme, bağlama ve değerlendirme, çıkış ayıklama ve sonuçları görüntüleme. Aşağıdaki metodu
MainPage.xaml.cssınıfının içindekiMainPagekod dosyanıza ekleyin.
// Waiting for a click event to select a file
private async void OpenFileButton_Click(object sender, RoutedEventArgs e)
{
if (!await getImage())
{
return;
}
// After the click event happened and an input selected, begin the model execution.
// Bind the model input
await imageBind();
// Model evaluation
await evaluate();
// Extract the results
extractResult();
// Display the results
await displayResult();
}
- Şimdi
getImage()yöntemini uygulayacaksınız. Bu yöntem bir giriş görüntüsü dosyası seçip belleğe kaydeder. Aşağıdaki metoduMainPage.xaml.cssınıfının içindekiMainPagekod dosyanıza ekleyin.
// A method to select an input image file
private async Task<bool> getImage()
{
try
{
// Trigger file picker to select an image file
FileOpenPicker fileOpenPicker = new FileOpenPicker();
fileOpenPicker.SuggestedStartLocation = PickerLocationId.PicturesLibrary;
fileOpenPicker.FileTypeFilter.Add(".jpg");
fileOpenPicker.FileTypeFilter.Add(".png");
fileOpenPicker.ViewMode = PickerViewMode.Thumbnail;
selectedStorageFile = await fileOpenPicker.PickSingleFileAsync();
if (selectedStorageFile == null)
{
return false;
}
}
catch (Exception)
{
return false;
}
return true;
}
Şimdi dosyanın bit eşlem BGRA8 biçiminde gösterimini almak için bir görüntü Bind() yöntemi uygulayacaksınız.
- MainPage sınıfı içindeki
convert()kod dosyanıza,MainPage.xaml.csyönteminin uygulamasını ekleyin. dönüştürme yöntemi, giriş dosyasının BGRA8 biçiminde bir gösterimini alır.
// A method to convert and bind the input image.
private async Task imageBind()
{
UIPreviewImage.Source = null;
try
{
SoftwareBitmap softwareBitmap;
using (IRandomAccessStream stream = await selectedStorageFile.OpenAsync(FileAccessMode.Read))
{
// Create the decoder from the stream
BitmapDecoder decoder = await BitmapDecoder.CreateAsync(stream);
// Get the SoftwareBitmap representation of the file in BGRA8 format
softwareBitmap = await decoder.GetSoftwareBitmapAsync();
softwareBitmap = SoftwareBitmap.Convert(softwareBitmap, BitmapPixelFormat.Bgra8, BitmapAlphaMode.Premultiplied);
}
// Display the image
SoftwareBitmapSource imageSource = new SoftwareBitmapSource();
await imageSource.SetBitmapAsync(softwareBitmap);
UIPreviewImage.Source = imageSource;
// Encapsulate the image within a VideoFrame to be bound and evaluated
VideoFrame inputImage = VideoFrame.CreateWithSoftwareBitmap(softwareBitmap);
// bind the input image
ImageFeatureValue imageTensor = ImageFeatureValue.CreateFromVideoFrame(inputImage);
input.data = imageTensor;
}
catch (Exception e)
{
}
}
Bu bölümde yapılan çalışmanın sonucu aşağıdaki gibi görünecektir.
// Waiting for a click event to select a file
private async void OpenFileButton_Click(object sender, RoutedEventArgs e)
{
if (!await getImage())
{
return;
}
// After the click event happened and an input selected, we begin the model execution.
// Bind the model input
await imageBind();
// Model evaluation
await evaluate();
// Extract the results
extractResult();
// Display the results
await displayResult();
}
// A method to select an input image file
private async Task<bool> getImage()
{
try
{
// Trigger file picker to select an image file
FileOpenPicker fileOpenPicker = new FileOpenPicker();
fileOpenPicker.SuggestedStartLocation = PickerLocationId.PicturesLibrary;
fileOpenPicker.FileTypeFilter.Add(".jpg");
fileOpenPicker.FileTypeFilter.Add(".png");
fileOpenPicker.ViewMode = PickerViewMode.Thumbnail;
selectedStorageFile = await fileOpenPicker.PickSingleFileAsync();
if (selectedStorageFile == null)
{
return false;
}
}
catch (Exception)
{
return false;
}
return true;
}
// A method to convert and bind the input image.
private async Task imageBind()
{
UIPreviewImage.Source = null;
try
{
SoftwareBitmap softwareBitmap;
using (IRandomAccessStream stream = await selectedStorageFile.OpenAsync(FileAccessMode.Read))
{
// Create the decoder from the stream
BitmapDecoder decoder = await BitmapDecoder.CreateAsync(stream);
// Get the SoftwareBitmap representation of the file in BGRA8 format
softwareBitmap = await decoder.GetSoftwareBitmapAsync();
softwareBitmap = SoftwareBitmap.Convert(softwareBitmap, BitmapPixelFormat.Bgra8, BitmapAlphaMode.Premultiplied);
}
// Display the image
SoftwareBitmapSource imageSource = new SoftwareBitmapSource();
await imageSource.SetBitmapAsync(softwareBitmap);
UIPreviewImage.Source = imageSource;
// Encapsulate the image within a VideoFrame to be bound and evaluated
VideoFrame inputImage = VideoFrame.CreateWithSoftwareBitmap(softwareBitmap);
// bind the input image
ImageFeatureValue imageTensor = ImageFeatureValue.CreateFromVideoFrame(inputImage);
input.data = imageTensor;
}
catch (Exception e)
{
}
}
Modeli bağlama ve değerlendirme
Ardından modeli temel alan bir oturum oluşturacak, oturumdaki girişi ve çıkışı bağlayacak ve modeli değerlendireceksiniz.
Modeli bağlamak için bir oturum oluşturun:
Oturum oluşturmak için sınıfını LearningModelSession kullanırsınız. Bu sınıf makine öğrenmesi modellerini değerlendirmek için kullanılır ve modeli çalıştıran ve modeli değerlendiren bir cihaza bağlar. Modelinizi makinenizin belirli bir cihazında yürütmek için bir oturum oluşturduğunuzda bir cihaz seçebilirsiniz. Varsayılan cihaz CPU'dur.
Uyarı
Cihaz seçme hakkında daha fazla bilgi edinmek için lütfen Oturum oluşturma belgelerini gözden geçirin.
Model girişlerini ve çıkışlarını bağlama:
Giriş ve çıkış bağlamak için sınıfını LearningModelBinding kullanırsınız. Makine öğrenmesi modeli, bilgileri modele aktaran ve modelden dışarı aktaran giriş ve çıkış özelliklerine sahiptir. Gerekli özelliklerin Window ML API'leri tarafından desteklenmesi gerektiğini unutmayın.
LearningModelBinding sınıfı, değerleri adlandırılmış giriş ve çıkış özelliklerine bağlamak için LearningModelSession öğesine uygulanır.
Bağlamanın uygulanması mlgen tarafından otomatik olarak oluşturulur, bu nedenle bununla ilgilenmeniz gerekmez. Bağlama, sınıfının önceden tanımlanmış yöntemleri LearningModelBinding çağrılarak uygulanır. Bizim örneğimizde, adlandırılmış özellik türüne bir değer bağlamak için yöntemini kullanır Bind .
Windows ML şu anda Tensorlar (çok boyutlu diziler), Diziler (değer vektörleri), Eşleme (bilgi değer çiftleri) ve Görüntüler (belirli biçimler) gibi tüm ONNX özellik türlerini destekler. Tüm görüntüler Windows ML'de tensor biçiminde gösterilir. Tensorizasyon, bir görüntüyü tensöre dönüştürme işlemidir ve bağlama sırasında gerçekleşir.
Neyse ki, tensorizasyon dönüştürme işlemiyle ilgilenmeniz gerekmez. Önceki ImageFeatureValue bölümde kullandığınız yöntem hem dönüştürme hem de tensorizasyon işlemleriyle ilgilenir, böylece görüntüler modelin gerekli görüntü biçimiyle eşleşebilir.
Uyarı
WinML tarafından desteklenen özellik türleri ve bir LearningModel bağlama hakkında daha fazla bilgi edinmek için Model bağlama belgesini inceleyin.
Modeli değerlendirme:
Modeli ve sınırlanmış değerleri modelin girişlerine ve çıkışlarına bağlamak için bir oturum oluşturduktan sonra modelin girişlerini değerlendirebilir ve tahminlerini alabilirsiniz. Model yürütmeyi çalıştırmak için LearningModelSession üzerinde önceden tanımlanmış değerlendirme yöntemlerinden herhangi birini çağırmanız gerekir. Bizim örneğimizde yöntemini kullanacağız EvaluateAsync .
yöntemine benzer şekilde CreateFromStreamAsyncEvaluateAsync WinML Kod Oluşturucu tarafından da otomatik olarak oluşturulmuştur, bu nedenle bu yöntemi uygulamanız gerekmez. Dosyada classifier.cs bu yöntemi gözden geçirebilirsiniz.
Yöntemi, EvaluateAsync bağlamalara bağlı olan özellik değerlerini kullanarak makine öğrenmesi modelini asenkron olarak değerlendirir.
LearningModelSession ile bir oturum oluşturur, girişi ve çıkışı LearningModelBinding ile bağlar, model değerlendirmesini yürütür ve LearningModelEvaluationResult sınıfını kullanarak modelin çıkış özelliklerini alır.
Uyarı
Modeli çalıştırmaya yönelik diğer değerlendirme yöntemleri hakkında bilgi edinmek için LearningModelSession Sınıfı belgelerini gözden geçirerek LearningModelSession'da hangi yöntemlerin uygulanabileceğini denetleyin.
- MainPage sınıfındaki kod dosyanıza
MainPage.xaml.csaşağıdaki yöntemi ekleyerek bir oturum oluşturun, modeli bağlayın ve değerlendirin.
// A method to evaluate the model
private async Task evaluate()
{
output = await modelGen.EvaluateAsync(input);
}
Sonuçları ayıklama ve görüntüleme
Şimdi model çıkışını ayıklamanız ve istenen sonuçları görüntülemeniz zorundasınız. Bunu extractResult ve displayResult yöntemlerini uygulayarak yapacaksınız.
Daha önce incelediğiniz gibi model iki çıkış döndürür: ilki stringlerden oluşan bir tensor'dür, kayıp adı verilen ikincisi ise her etiketlenmiş sınıflandırma için olasılığı açıklayan bir string-float eşlemesi dizisidir. Bu nedenle, sonucu ve olasılığı başarıyla görüntülemek için tek yapmamız gereken kayıp çıktısından çıktıyı ayıklamaktır. Doğru sonucu döndürmek için en yüksek olasılığı bulmamız gerekir.
-
extractResultyönteminiMainPage.xaml.cssınıfının içindekiMainPagekod dosyasına ekleyin.
private void extractResult()
{
// A method to extract output (result and a probability) from the "loss" output of the model
var collection = output.loss;
float maxProbability = 0;
string keyOfMax = "";
foreach (var dictionary in collection)
{
foreach (var key in dictionary.Keys)
{
if (dictionary[key] > maxProbability)
{
maxProbability = dictionary[key];
keyOfMax = key;
}
}
}
result = keyOfMax;
resultProbability = maxProbability;
}
-
displayResultyönteminiMainPage.xaml.cssınıfının içindekiMainPagekod dosyasına ekleyin.
// A method to display the results
private async Task displayResult()
{
displayOutput.Text = result.ToString();
displayProbability.Text = resultProbability.ToString();
}
Bağlama ve Değerlendirme ve Sonuçları Ayıkla ve Görüntüle bölümlerinin uygulamamızın WinML kodundaki sonucu aşağıdaki gibi görünecektir.
// A method to evaluate the model
private async Task evaluate()
{
output = await modelGen.EvaluateAsync(input);
}
// A method to extract output (string and a probability) from the "loss" output of the model
private void extractResult()
{
var collection = output.loss;
float maxProbability = 0;
string keyOfMax = "";
foreach (var dictionary in collection)
{
foreach (var key in dictionary.Keys)
{
if (dictionary[key] > maxProbability)
{
maxProbability = dictionary[key];
keyOfMax = key;
}
}
}
result = keyOfMax;
resultProbability = maxProbability;
}
// A method to display the results
private async Task displayResult()
{
displayOutput.Text = result.ToString();
displayProbability.Text = resultProbability.ToString();
}
Bu kadar! Sınıflandırma modelimizi test etmek için temel bir GUI ile Windows makine öğrenmesi uygulamasını başarıyla oluşturdunuz. Sonraki adım uygulamayı başlatmak ve Windows cihazınızda yerel olarak çalıştırmaktır.
Uygulamayı başlatma
Uygulama arabirimini tamamladıktan, modeli ekledikten ve WinML kodunu oluşturduktan sonra uygulamayı test edebilirsiniz. Üst araç çubuğundaki açılır menülerin Debug olarak ayarlandığından emin olun. Solution Platform'yi x64 olarak değiştirin ve cihazınız 64 bitse yerel makinenizde projeyi çalıştırın, veya Solution Platform'yi olarak değiştirin, eğer cihazınız 32 bitse.
Uygulamamızı test etmek için aşağıdaki meyve görüntüsünü kullanacaksınız. Şimdi uygulamamızın görüntünün içeriğini nasıl sınıflandırır görelim.
Uygulamayı test etmek için bu görüntüyü yerel cihazınıza kaydedin. Gerekirse görüntü biçimini jpg olarak değiştirin. Ayrıca, yerel cihazınızdan uygun bir biçimde ( .jpg, .png, .bmpveya .gif biçimlerinde) ilgili diğer tüm görüntüleri ekleyebilirsiniz.
Projeyi çalıştırmak için araç çubuğundaki
Start Debuggingdüğmeye veya tuşuna basınF5.Uygulama başladığında,
Pick Imagetuşuna basın ve yerel cihazınızdan görüntüyü seçin.
Sonuç hemen ekranda görünür. Gördüğünüz gibi, WinML uygulamamız görüntüyü 99,9% güvenilirlik derecesiyle meyve veya sebze olarak başarıyla sınıflandırdı.
Özet
Model oluşturma aşamasından başarılı yürütmeye kadar ilk Windows Machine Learning uygulamanızı yaptınız.
Ek Kaynaklar
Bu öğreticide bahsedilen konular hakkında daha fazla bilgi edinmek için aşağıdaki kaynakları ziyaret edin:
- Windows ML araçları: Windows ML Panosu, WinMLRunner ve mglen Windows ML kod oluşturucu gibi daha fazla araç öğrenin.
- ONNX modeli: ONNX biçimi hakkında daha fazla bilgi edinin.
- Windows ML performansı ve belleği: Windows ML ile uygulama performansını yönetme hakkında daha fazla bilgi edinin.
- Windows Machine Learning API başvurusu: Windows ML API'lerinin üç alanı hakkında daha fazla bilgi edinin.