微软ML.NET情感分析教程运行报错splitDataView不存在当前上下文
问题原因
- 直接报错根源:你在
Evaluate方法首行写了Evaluate(mlContext, model, splitDataView.TestSet);,splitDataView是Main函数内定义的局部变量,作用域仅覆盖Main函数内部,Evaluate方法无法访问该变量,因此直接触发上下文不存在的错误。 - 隐藏逻辑错误:
Evaluate、UseModelWithSingleItem、UseModelWithBatchItems三个方法的首行都存在自我调用,属于无限递归逻辑,即使解决变量报错,运行后也会直接栈溢出崩溃。 - 流程缺失:
Main函数完成模型训练后,没有主动调用评估、预测相关的方法,完整逻辑没有执行。
修复方案
- 修改
Main方法,训练完成后新增后续方法调用:
static void Main(string[] args) { MLContext mlContext = new MLContext(); TrainTestData splitDataView = LoadData(mlContext); ITransformer model = BuildAndTrainModel(mlContext, splitDataView.TrainSet); // 新增以下三行调用 Evaluate(mlContext, model, splitDataView.TestSet); UseModelWithSingleItem(mlContext, model); UseModelWithBatchItems(mlContext, model); }
- 删掉
Evaluate方法首行的自我调用代码:
public static void Evaluate(MLContext mlContext, ITransformer model, IDataView splitTestSet) { // 删除原首行的Evaluate(mlContext, model, splitDataView.TestSet); Console.WriteLine("=============== Evaluating Model accuracy with Test data==============="); // 剩余原有逻辑保持不变 }
- 分别删掉
UseModelWithSingleItem、UseModelWithBatchItems两个方法首行的自我调用代码,剩余原有逻辑保持不变即可。
内容的提问来源于stack exchange,提问作者MattHodson
相关产品推荐
相关产品推荐

