Поэтому я использовал ML. NET ModelBuilder для обучения нейронной сети, чтобы классифицировать набор изображений как «нормальный» и «ненормальный». Изображения изначально были сохранены в формате .png. Обучение работает просто отлично, но после генерации кода я обнаружил нечто совершенно неожиданное.
По умолчанию сгенерированный сегмент кода, который используется для прогнозирования класса изображений, содержит следующую строку:
private const string DATA_FILEPATH = @"C:\Users\Christian\AppData\Local\Temp\8d55cfe5-25d3-4c16-bc7e-185ea11f936c.tsv"
Полная программа выглядит следующим образом
// This file was auto-generated by ML.NET Model Builder.
using System;
using System.IO;
using System.Linq;
using Microsoft.ML;
using NormalAbnormalBearML.Model;
namespace NormalAbnormalBearML.ConsoleApp
{
class Program
{
//Dataset to use for predictions
private const string DATA_FILEPATH = @"C:\Users\Christian\AppData\Local\Temp\8d55cfe5-25d3-4c16-bc7e-185ea11f936c.tsv";
static void Main(string[] args)
{
// Create single instance of sample data from first line of dataset for model input
ModelInput sampleData = CreateSingleDataSample(DATA_FILEPATH);
// Make a single prediction on the sample data and print results
var predictionResult = ConsumeModel.Predict(sampleData);
Console.WriteLine("Using model to make single prediction -- Comparing actual Label with predicted Label from sample data...\n\n");
Console.WriteLine($"ImageSource: {sampleData.ImageSource}");
Console.WriteLine($"\n\nActual Label: {sampleData.Label} \nPredicted Label value {predictionResult.Prediction} \nPredicted Label scores: [{String.Join(",", predictionResult.Score)}]\n\n");
Console.WriteLine("=============== End of process, hit any key to finish ===============");
Console.ReadKey();
}
// Change this code to create your own sample data
#region CreateSingleDataSample
// Method to load single row of dataset to try a single prediction
private static ModelInput CreateSingleDataSample(string dataFilePath)
{
// Create MLContext
MLContext mlContext = new MLContext();
// Load dataset
IDataView dataView = mlContext.Data.LoadFromTextFile<ModelInput>(
path: dataFilePath,
hasHeader: true,
separatorChar: '\t',
allowQuoting: true,
allowSparse: false);
// Use first line of dataset as model input
// You can replace this with new test data (hardcoded or from end-user application)
ModelInput sampleForPrediction = mlContext.Data.CreateEnumerable<ModelInput>(dataView, false)
.First();
return sampleForPrediction;
}
#endregion
}
Теперь, когда я запускаю эту программу, она берет реальный образ из тех, которые я предоставил для обучения, и классифицирует его. Однако я понятия не имею, как был создан DATA_FILEPATH. Почему это относится к пути .tsv, поскольку изображения изначально в формате .png. Что еще более странно, когда я заменяю путь DATA_FILEPATH некоторым путем к одному из исходных изображений .png, я получаю следующий ответ:
ml.net Expected image (JPEG, PNG, or GIF), got empty file
Поиск по Inte rnet Я нашел несколько статей о ML. net, который также говорит о файлах .tsv. Тем не менее, они никогда не объясняют причину использования этого типа формата. Также имейте в виду, что для обучения модели достаточно предоставить ей пути к папкам, содержащим изображения .png, так почему же она не работает таким образом в сгенерированном коде?