TensorFlow线性估计器训练报Labels<=n_classes-1错误排查
错误根因
你触发报错的核心原因是任务类型和选用的估计器不匹配,代码里还附带一个特征列处理的隐藏bug:
- 你的任务是预测汽车价格,属于连续值预测的回归任务,但代码中错误使用了面向分类任务的
tf.estimator.LinearClassifier(线性分类器)。该分类器默认执行二分类任务,要求标签取值只能为0或1(即默认n_classes=2,标签必须满足<= n_classes -1 =1),但你传入的标签是几千到上万的汽车价格数值,和分类器的标签要求完全冲突,直接触发范围校验错误,报错信息里打印的[7895][10795][17710]就是你传入的价格标签,和校验阈值1的差距也能对应上这个问题。 - 识别分类特征列的代码存在笔误:遍历列时判断为object类型的分类列,你append的是临时变量
_而非当前遍历的列名cat,会导致分类列列表完全错误,就算修复估计器的问题,后续特征处理也会报错。
修复步骤
- 修复分类列识别的笔误,将分类列追加逻辑的参数改为当前遍历的列名:
# 原错误代码 for cat in lst: if train_x[cat].dtypes == 'object': categorical_columns.append(_) # 修复后 for cat in lst: if train_x[cat].dtypes == 'object': categorical_columns.append(cat)
- 将分类估计器替换为回归任务对应的线性回归估计器:
# 原错误代码 linear_est = tf.estimator.LinearClassifier(feature_columns=feature_columns) # 修复后 linear_est = tf.estimator.LinearRegressor(feature_columns=feature_columns)
修改完成后重新运行代码即可正常启动训练,后续评估时调用linear_est.evaluate(eval_input_function)就能获取回归任务对应的损失、MSE等评估指标。
内容的提问来源于stack exchange,提问作者Michael Water
相关产品推荐
相关产品推荐

