You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Model Builder生成的数值预测模型代码预测结果始终为0,但Evaluate标签页测试正常

Model Builder生成的数值预测模型代码预测结果始终为0,但Evaluate标签页测试正常

嘿,我之前也碰到过Model Builder模型在界面测试正常,但代码跑出来结果不对的情况,给你几个实用的排查方向:

先确认你的环境信息:

  • Model Builder Version 17.15.0.2337001
  • Visual Studio Version 2022

你提到用Model Builder创建了数值预测模型,在工具的Evaluate标签页测试时模型工作完全正常(从截图能看到模型输出了合理的预测值),但运行生成的测试代码时,预测结果却始终是0(控制台输出固定显示0)。你的测试代码如下:

using ConsoleApp2;

//Load sample data
var sampleData = new MLModel1.ModelInput()
{
    Device = 1F,
    Temperature = 20F,
    Weather = 1F,
    Time = 2F,
};

//Load model and predict output
var result = MLModel1.Predict(sampleData);
Console.WriteLine(result.Predict);

接下来可以从这几个方面排查:

  • 核对输入数据的预处理与训练时是否一致
    Model Builder训练模型时会自动对输入特征做预处理(比如归一化、特征编码等),这些逻辑虽然会封装到生成的MLModel1类里,但如果手动构造的输入数据和训练数据的特征分布差异太大,或者代码里的预处理逻辑没有正确执行,就可能导致模型输出异常。你可以把Evaluate标签页里测试过的完全相同的输入数据放到代码里运行,如果结果正常,就说明你当前构造的sampleData存在问题。

  • 检查模型文件是否正确加载
    生成的代码默认会加载嵌入到项目里的模型文件(一般是.zip格式),你可以检查一下这个模型文件是不是最新训练的版本——有时候如果重新训练了模型但没有更新代码引用的模型文件,就会导致加载旧的、未训练完全的模型,从而输出异常。另外也可以在代码里加个异常捕获,确认模型加载过程没有报错。

  • 确认输入特征的类型和取值范围匹配
    你代码里用的是float类型的数值(比如Device = 1F),要确认训练数据里这些特征的类型是否和代码里一致。另外,训练数据里的特征取值范围也要和你构造的输入对比,比如如果训练时Temperature的取值范围是0-100,你传20F是没问题,但如果训练数据里的Temperature是经过归一化的0-1区间,那你传20F就会超出范围,导致模型输出异常。

  • 查看生成代码的预测逻辑
    可以打开MLModel1.cs文件,看看预测相关的代码逻辑,有没有对输出结果做截断、类型转换等操作,会不会是这些步骤导致预测值被强制变成0了。

如果还是解决不了,你可以尝试重新生成一次模型代码,或者在Model Builder里重新训练模型并替换项目里的模型文件,有时候工具生成代码时会出现缓存问题。

备注:内容来源于stack exchange,提问作者Ender MayDay

火山引擎 最新活动