Как мне использовать модель tensorflow для выполнения одного прогноза для изображения?

#c# #tensorflow #ml.net

#c# #tensorflow #ml.net

Вопрос:

Я только начинаю с tensorflow и ml.net. Документы повсюду. Изначально я просто хочу загрузить модель тензорного потока в виде собаки или кошки, а затем добавить в нее изображение кошки и получить прогноз. Насколько я понимаю, модель уже «обучена», и поэтому мне не нужно вводить в нее какие-либо входные данные. Я думаю, что мне нужно только ввести изображение и получить предсказание.

 using System;
using Microsoft.ML;

namespace DogOrCatConsole
{
    class Program
    {
        static void Main(string[] args)
        {
            // Create MLContext
            MLContext mlContext = new MLContext();

            using var tf = mlContext.Model.LoadTensorFlowModel("model.pb");
            var inputSchema = tf.GetInputSchema();
            var modelSchema = tf.GetModelSchema();
        
        }
    }
}
  

До сих пор я использовал Nuget для извлечения нескольких разных библиотек:

  • Microsoft.ML
  • Microsoft.ML.ImageAnalytics
  • Microsoft.ML.TensorFlow
  • Microsoft.ML.Vision
  • SciSharp.Тензорный поток.Повторить

Я взял модель из руководства Microsoft, где показано, как использовать http-функцию python для взаимодействия с этой моделью. Я уже сократил изображение до 256×256, поэтому пропускаю некоторые этапы предварительной обработки в примере python. Я изо всех сил пытаюсь выяснить различия api между тем, что я вижу в примере python, и c #.

Ответ №1:

Приведенный выше код загружает только модель Tensorflow. Код для прогнозирования отсутствует. Вы смотрели на https://learn.microsoft.com/en-us/dotnet/machine-learning/tutorials/image-classification Он использует файл *.pb и LoadTensorFlowModel() API. Вам нужно добавить модель score tensorflow, чтобы делать прогнозы. Приведенные ниже строки делают это.

 .Append(mlContext.Model.LoadTensorFlowModel(_inceptionTensorFlowModel).
    ScoreTensorFlowModel(outputColumnNames: new[] { "softmax2_pre_activation" }, inputColumnNames: new[] { "input" }, addBatchDimensionInput: true))