【问题标题】:ML.Net error in showing which score relates to which labelML.Net 显示哪个分数与哪个标签相关的错误
【发布时间】:2019-11-09 10:41:42
【问题描述】:

我想确定哪个分数与哪个标签相关,但出现运行时错误。

我有一个方法负责...

public static List<string> GetSlotNames(string name)
{
    var schema = predEngine.OutputSchema;
    var column = schema.GetColumnOrNull(name);

    var slotNames = new VBuffer<ReadOnlyMemory<char>>();
    column.Value.GetSlotNames(ref slotNames); //here is the error
    var names = new string[slotNames.Length];
    var num = 0;
    foreach (var denseValue in slotNames.DenseValues())
    {
        names[num++] = denseValue.ToString();
    }

    return names.ToList();
}

但我得到一个运行时异常:

System.InvalidOperationException:'对'GetValue'的无效调用'

编辑:我用模型构建器训练了模型,所以代码是 ml.net 使用的标准代码,在我的例子中是三类分类。GetSlotNames 的参数是“分数”

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

【问题讨论】:

  • 提供的代码看起来没有任何异常。我的猜测是,预测引擎的输出模式可能与您的预期不同。如果您可以发布用于训练模型的代码、实例化 predEngine 以及您正在使用哪个 name 调用此方法,将会有所帮助。

标签: c# ml.net


【解决方案1】:

我知道这是一个老问题,您要么放弃了,要么以另一种方式解决了它,但我希望这对某人有所帮助。

我也为此苦苦挣扎。我从“github tag”示例项目中获取了代码。我发现它只适用于“文本”数据类型。在我的需要中,如果我将输入(自然是单一的)输入到字符串中,那么上面的“GetSlotNames”f(x) 就可以工作了。如果我把它换回去,它就坏了。

我只能假设这是底层框架没有正确 GetValue 的问题,因为如果您检查数据,键映射就在那里。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多