ML. NET тензор потока half_plus_two - PullRequest
0 голосов
/ 19 апреля 2020

Я пытаюсь сравнить производительность оценки предварительно построенной модели тензорного потока с различными методами вывода. В настоящее время у меня есть игрушечная модель тензорного потока, обслуживающая half_plus_two, которая обслуживается в виртуальной машине Ubuntu docker, которая дает следующие результаты:

GRP C: ~ 1700 прогнозов в секунду

REST: ~ 800 прогнозов в секунду

Мое приложение для конечного использования (Framework 4.5 с API) - это среда C#. Я бы хотел сравнить производительность ML. NET с REST и GRP C обслуживания тензорного потока, используя прогнозируемый / прогнозируемый двигатель ML. NET в моем приложении для конечного использования.

Среда

  • Модель уже обучена
  • Логический вывод делается путем подачи в модель одного значения с плавающей запятой с последующей обработкой возвращенного прогноза
  • Приложение конечного использования будет передавать данные в реальном времени с очень высокой скоростью в секунду
  • Tensorflow 2.x для создания модели и сохранения в формате saved_model

ML. NET код

class TestProgram
{
    static void Main(string[] args)
    {
        try
        {
            new ModelBuilder();
        }
        catch (Exception e)
        {
            // investigate
        }
    }
}

public class ModelBuilder
{
    private readonly MLContext mlContext;
    private string userDesktop = Environment.SpecialFolder.Desktop.ToString();

    // feed these values to the pretrained tf model.
    // expected results are 2.0, 3.0, 4.0, 5.0 respectively
    private float[] testData = new float[] { 0.0f, 2.0f, 4.0f, 6.0f };

    public ModelBuilder()
    {
        this.mlContext = new MLContext();
        var tfPretrainedModel = this.mlContext.Model.LoadTensorFlowModel(Path.Combine(userDesktop, @"TF\half_plus_two\1\saved_model.pb"));

        var predictionFunction = this.mlContext.Model.CreatePredictionEngine<HalfPlusTwoData, HalfPlusTwoPrediction>(tfPretrainedModel);

        HalfPlusTwoPrediction prediction = null;
        for (int i = 0; i < this.testData.Length; i++)
        {
            prediction = predictionFunction.Predict(new HalfPlusTwoData() { Input = this.testData[i] });

            Console.WriteLine($"Input {this.testData[i]}, Prediction {prediction.Prediction}, Expected {(this.testData[i] / 2) + 2}");
        }
    }
}

public class HalfPlusTwoData
{
    [LoadColumn(0), ColumnName("Label")]
    public float Input;
}

public class HalfPlusTwoPrediction
{
    [ColumnName("PredictedLabel")]
    public float Prediction { get; set; }
}

Вопросы

  • 1 Как правильно использовать LoadTensorFlowModel для создания модели или для создания конвейера?
  • 2 Является ли HalfPlusTwoData правильным способом? структурировать входные данные?
  • 3 Является ли HalfPlusTwoPrediction правильным способом структурирования класса предсказания?

1 Ответ

0 голосов
/ 20 апреля 2020

После прочтения документации вы должны получить объект TensorFlowModel из этого метода.

MS Docs:

TensorFlowModel tensorFlowModel = mlContext.Model.LoadTensorFlowModel(_modelPath);

Что касается ваших 2 классов, то это способ сделать это , Тем не менее, у вас обычно есть некоторые данные, которые подделывают и должны быть включены в первый класс. Как и в случае с вашим классом прогнозирования, он должен создавать дополнительные столбцы, такие как Оценка (и) и Вероятность. Обратите внимание, что только некоторые модели будут иметь вероятность, например, модели двоичной классификации.

MS Docs (Анализ настроений):

public class SentimentData
{
    [LoadColumn(0)]
    public string SentimentText;

    [LoadColumn(1), ColumnName("Label")]
    public bool Sentiment;
}

public class SentimentPrediction : SentimentData
{

    [ColumnName("PredictedLabel")]
    public bool Prediction { get; set; }

    public float Probability { get; set; }

    public float Score { get; set; }
}

Игнорировать, что у них разные номера столбцов. Это основано исключительно на том, как изложены ваши данные.

Ссылки:

Охватывает ввод и макет класса прогнозирования: https://docs.microsoft.com/en-us/dotnet/machine-learning/tutorials/sentiment-analysis

В частности, о Модели с тензорным потоком: https://docs.microsoft.com/en-us/dotnet/machine-learning/tutorials/text-classification-tf

...