#c# #ml.net #automl
#c# #ml.net #automl
Вопрос:
Я учусь ML.Net и пытаюсь использовать AutoML API и получаю исключение нулевой ссылки. Вопрос был обновлен с учетом моих недавних знаний и минимального количества кода для воспроизведения.
Поместите это в VSCode, и вы тоже можете столкнуться с двухмерным векторным взрывом.
class Program
{
static void Main(string[] args)
{
var mlContext = new MLContext();
// create schema for multidimensional vector
var autoSchema = SchemaDefinition.Create(typeof(InputData));
var col = autoSchema[1];
col.ColumnType = new VectorDataViewType(NumberDataViewType.Single, 3, 60);
// fabricate some data
var trainingData = new List<InputData>();
var inputData = new InputData();
inputData.MultiDimensional = new float[20,20];
for (int i = 0; i < inputData.MultiDimensional.GetUpperBound(0); i )
{
for (int j = 0; j < inputData.MultiDimensional.GetUpperBound(1); j )
{
inputData.MultiDimensional[i,j] = 5; // doesn't matter
}
}
trainingData.Add(inputData);
// setup a data view
IDataView trainingDataView = mlContext.Data.LoadFromEnumerable<InputData>(trainingData, autoSchema);
// preview it (goes BOOM)
var preview = trainingDataView.Preview();
// run the experiment
var settings = new BinaryExperimentSettings();
settings.MaxExperimentTimeInSeconds = 60;
ExperimentResult<BinaryClassificationMetrics> experimentResult = mlContext.Auto()
.CreateBinaryClassificationExperiment(settings)
.Execute(trainingDataView);
}
}
public class InputData
{
public bool Label { get; set; }
public float[,] MultiDimensional { get; set; }
}
Документация, похоже, указывает на правильность моей настройки: https://learn.microsoft.com/en-us/dotnet/api/microsoft.ml.data.vectortypeattribute .-ctor?view=ml-dotnet#Microsoft_ML_Data_VectorTypeAttribute__ctor_System_Int32___
Чтобы исправить мою проблему с многомерным вектором, я попытался:
- Удаление
float[,]
инициализаторов вInputData
- Указание точного размера с
[VectorType(3,60)]
соответствующим для каждого свойства [VectorType]
Полностью отключив атрибут и используя autoschema для его установки.[VectorType]
Полностью отключив атрибут и не используя autoschema, чтобы разрешить ML.net разберитесь с этим сами по себе- Добавление просто
[VectorType()]
, хотя в документах говорится, что это для одномерных массивов.
Теперь мой вопрос: как правильно использовать векторы с более чем 1 измерением в AutoML части ML.Net ? Возможно ли это вообще?
Комментарии:
1. Просто любопытно, есть ли ошибка при загрузке перечисляемого без
autoSchema
параметра?2. Это отличное предложение! Я попробовал это, хотя то же исключение.
3. Что произойдет, если вы это сделаете
trainingDataView.Preview()
? Кроме того, возможно ли получить выборку данных?4. Интересно — я получил такое же исключение при выполнении предварительного просмотра. Я только что попытался добавить атрибут [NoColumn] для всех многомерных векторов, и исключение исчезло. Есть ли что-то, что я делаю неправильно с этим? Это кажется правильным из документации: learn.microsoft.com/en-us/dotnet/api /…
5. Хорошая находка! Я видел, что вы поставили здесь проблему. Надеюсь, команда сможет исправить это для вас в ближайшее время 🙂
Ответ №1:
Ого, обнаружил, что мой собственный вопрос спустя годы все еще открыт. Из-за проблемы с github, опубликованной в комментариях, это по-прежнему невозможно. Эта проблема с github в 2022 году подтверждает, что это все еще так.