Ml.net LoadFromEnumerable всегда выдает System.ArgumentOutOfRangeExceptionC#

Место общения программистов C#
Anonymous
Ml.net LoadFromEnumerable всегда выдает System.ArgumentOutOfRangeException

Сообщение Anonymous »

Я получаю следующее исключение:
System.ArgumentOutOfRangeException: Could not determine an IDataView type and registered custom types for member ValueType (Parameter 'rawType')

Для этих двух случаев:
Случай 1: (для меня вполне нормально получить здесь исключение):
MLContext mlContext = new MLContext();
var dataViewDateTimeValues = mlContext.Data.LoadFromEnumerable(dateTimeValues.Data.Values);

Случай 2: здесь есть исключение? Почему и как это решить? (не нравится «ValueType», которого здесь нет в схеме):
MLContext mlContext = new MLContext();
var dataViewDateTimeValues = mlContext.Data.LoadFromEnumerable(dateTimeValues.Data.Values);
var builder = new DataViewSchema.Builder();
builder.AddColumn("DateTimeOffset", Microsoft.ML.Data.DateTimeOffsetDataViewType.Instance);
builder.AddColumn("Value", Microsoft.ML.Data.NumberDataViewType.Single);
DataViewSchema schema = builder.ToSchema();

Для моего класса:
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using CommunityToolkit.Mvvm.ComponentModel;
using Microsoft.ML.Data;
using System.Reflection.Metadata.Ecma335;

namespace CommanDER.Forecast
{
public class DateTimeValue : ObservableObject
{
public DateTimeValue()
{
DateTimeOffset = default;
Value = 0;
}

public DateTimeValue(DateTimeOffset dateTime, float value)
{
DateTimeOffset = dateTime;
Value = value;
}

public DateTimeValue(DateTimeOffset dateTime, double value)
{
DateTimeOffset = dateTime;
ValueDouble = value;
}

public const string DateTimeValueFormat = "yyyy-MM-dd HH:mm";

[Display(AutoGenerateField = false)]
[Browsable(false)]
[LoadColumn(0)] // EO: For ML.net, for file usage in CSV or TSV (tab separarted value)
public DateTimeOffset DateTimeOffset { get; set; }

[LoadColumn(1)] // EO: for file usage in CSV ot TSV (tab separarted value) (used also in ml.net ???)
public float Value { get; set; } // Float seems to be required by ml.net

public double ValueDouble { get => Value; set => Value = (float)value; }

private double[]? _mlPrediction;

[VectorType(7)]
public double[]? MlPrediction { get => _mlPrediction; set => SetProperty(ref _mlPrediction, value); } // = new double[TotalGuessOfCount];

public string MlPredictionDisplay
{
get => MlPrediction is null ? "{null}" : string.Join(", ", MlPrediction);
}

private ValueTypeEnum _valueType = ValueTypeEnum.Raw;

[Browsable(false)]
public ValueTypeEnum ValueType { get => _valueType; set => SetProperty(ref _valueType, value); }

private DateTimeOffset _dateTimeValueCopied = default;

[Browsable(false)]
public DateTimeOffset DateTimeValueCopied { get => _dateTimeValueCopied; set => SetProperty(ref _dateTimeValueCopied, value); } // Usually not used otherwise should be a multiple of 7 at same time in order to get same day of week.

public override string ToString()
{
return $"Date: {DateTimeOffset.ToString(DateTimeValueFormat)}, Value: {Value}";
}
}
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CommanDER.Forecast
{
public enum ValueTypeEnum

{
Raw = 0,
Interpolated = 1,
CopiedFromAnotherDateTime = 2,
OutOfRange = 3,
}
}


Подробнее здесь: https://stackoverflow.com/questions/788 ... eexception

Вернуться в «C#»