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 (или более позднюю версию). Выберите кнопку ОК.