ML.NET для прогнозирования тарифов на такси в Нью-Йорке - Программа не содержит статического метода "Main", подходящего для точки входа

Я пытался сделать пример ML.net, чтобы предсказать тарифы на такси в Нью-Йорке, но когда я закончил учебник, было сообщение: Программа не содержит статический метод "Main", подходящий для точки входа.

Вот код, который я сделал:

Класс Program.cs

using System;
using System.IO;
using Microsoft.ML;
using Microsoft.ML.Data;
using Microsoft.ML.Models;
using Microsoft.ML.Trainers;
using Microsoft.ML.Transforms;
using System.Threading.Tasks;

namespace TaxiFarePrediction2
{
    public class Program
    {
        static readonly string _datapath = Path.Combine(Environment.CurrentDirectory, "Data", "taxi-fare-train.csv");
        static readonly string _testdatapath = Path.Combine(Environment.CurrentDirectory, "Data", "taxi-fare-test.csv");
        static readonly string _modelpath = Path.Combine(Environment.CurrentDirectory, "Data", "Model.zip");


        static async Task Main(string[] args)
        {
            PredictionModel<TaxiTrip, TaxiTripFarePrediction> model = await Train();
            Evaluate(model);
            TaxiTripFarePrediction prediction = model.Predict(TestTrips.Trip1);
            Console.WriteLine("Predicted fare: {0}, actual fare: 29.5", prediction.FareAmount);
        }


        public static async Task<PredictionModel<TaxiTrip, TaxiTripFarePrediction>> Train()
        {
            var pipeline = new LearningPipeline
            {
                new TextLoader(_datapath).CreateFrom<TaxiTrip>(useHeader: true, separator: ','),
                new ColumnCopier(("FareAmount", "Label")),
                new CategoricalOneHotVectorizer(
                    "VendorId",
                    "RateCode",
                    "PaymentType"),
                new ColumnConcatenator(
                    "Features",
                    "VendorId",
                    "RateCode",
                    "PassengerCount",
                    "TripDistance",
                    "PaymentType"),
                new FastTreeRegressor()
            };
            PredictionModel<TaxiTrip, TaxiTripFarePrediction> model = pipeline.Train<TaxiTrip, TaxiTripFarePrediction>();
            await model.WriteAsync(_modelpath);
            return model;
        }

        private static void Evaluate(PredictionModel<TaxiTrip, TaxiTripFarePrediction> model)
        {
            var testData = new TextLoader(_testdatapath).CreateFrom<TaxiTrip>(useHeader: true, separator: ',');
            var evaluator = new RegressionEvaluator();
            RegressionMetrics metrics = evaluator.Evaluate(model, testData);
            Console.WriteLine($"Rms = {metrics.Rms}");
            Console.WriteLine($"RSquared = {metrics.RSquared}");
        }


    }
}

Класс TaxiTrip.cs

using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.ML.Runtime.Api;

namespace TaxiFarePrediction2
{
    public class TaxiTrip
    {
        [Column("0")]
        public string VendorId;

        [Column("1")]
        public string RateCode;

        [Column("2")]
        public float PassengerCount;

        [Column("3")]
        public float TripTime;

        [Column("4")]
        public float TripDistance;

        [Column("5")]
        public string PaymentType;

        [Column("6")]
        public float FareAmount;
    }

    public class TaxiTripFarePrediction
    {
        [ColumnName("Score")]
        public float FareAmount;
    }
}

Класс TestTrips.cs

using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.ML.Runtime.Api;

namespace TaxiFarePrediction2
{
    public class TaxiTrip
    {
        [Column("0")]
        public string VendorId;

        [Column("1")]
        public string RateCode;

        [Column("2")]
        public float PassengerCount;

        [Column("3")]
        public float TripTime;

        [Column("4")]
        public float TripDistance;

        [Column("5")]
        public string PaymentType;

        [Column("6")]
        public float FareAmount;
    }

    public class TaxiTripFarePrediction
    {
        [ColumnName("Score")]
        public float FareAmount;
    }
}

Руководство находится по адресу: https://docs.microsoft.com/en-us/dotnet/machine-learning/tutorials/taxi-fare

Пожалуйста, помогите мне сделать этот пример.

1 ответ

Метод main не может поддерживать asycn до C# 7.1. Вы можете запустить main один раз, а затем создать задачи в методе main, которые могут быть асинхронными, если вы используете более ранние версии.

Вы можете написать что-то упомянутое Крисом Москини

class Program
{
static void Main(string[] args)
{
    Task.Run(async () =>
    {
        // Do any async anything you need here without worry
    }).GetAwaiter().GetResult();
}

Ссылка, которую вы разместили, четко упоминает об указанной версии C#...

Поскольку асинхронный метод Main является функцией, добавленной в C# 7.1, и языковой версией проекта по умолчанию является C# 7.0, вам необходимо изменить версию языка на C# 7.1 или выше. Для этого щелкните правой кнопкой мыши узел проекта в обозревателе решений и выберите Свойства. Выберите вкладку Build и нажмите кнопку Advanced. В раскрывающемся списке выберите C# 7.1 (или более позднюю версию). Выберите кнопку ОК.

Хорошее чтение на главном с асинхронным

Другие вопросы по тегам