
在 Keras 多输出模型中,若直接使用字典格式的 y(如 {'output_a': y_a, 'output_b': y_b})配合 sample_weight,会触发 KeyError: 0 错误;正确做法是将目标变量 y 改为与输出顺序严格一致的列表,此时单个 sample_weight 数组即可被自动广播至所有输出分支。
在 keras 多输出模型中,若直接使用字典格式的 y(如 {'output_a': y_a, 'output_b': y_b})配合 sample_weight,会触发 keyerror: 0 错误;正确做法是将目标变量 y 改为**与输出顺序严格一致的列表**,此时单个 sample_weight 数组即可被自动广播至所有输出分支。
Keras 对多输出模型的 sample_weight 处理机制依赖于 y 的结构一致性。当 y 以字典形式传入(例如 {'regression_output': y_reg, 'classification_output': y_cls})时,Keras 内部在解析 sample_weight 时会尝试按输出键索引权重,但底层权重广播逻辑未适配字典 y 的键路径匹配,从而引发 KeyError: 0 —— 这并非数据形状错误,而是结构不匹配导致的路径解析失败。
✅ 正确解法:统一使用有序列表表示 y,其元素顺序必须与模型 outputs 的定义顺序完全一致(可通过 model.output_names 验证):
# ✅ 正确:y 为列表,sample_weight 为一维数组(长度 = 样本数)
history = model.fit(
X,
[y_regression, y_classification], # 注意顺序:与 model.outputs 一致
epochs=10,
batch_size=32,
sample_weight=sample_weights, # shape: (1000,)
)
此时 Keras 会将 sample_weights 自动应用于每个输出分支(即回归和分类损失均按相同样本权重加权),无需显式拆分。
python-docx Skill功能概述python-docx Skill是一项面向实际任务的技能,主要用于本Skill提供使用python-docx生成专业Word文档的标准方法和最佳实践;生成安全服务方案文档;核心要点生成技术架构设计文档;生成任何需要专业排版的Word文档;核心库 : python-docx;使用与执行辅助库 : docx.shared , docx.enum , docx.oxml.ns;标准代码模板;1. 文档初始化;2. 字体设置(必须!它将相关步骤、工具调用和结果整理方式集
⚠️ 注意事项:
- 若需为不同输出指定差异化权重(例如回归任务权重高、分类任务权重低),应使用字典格式的
sample_weight,但前提是y仍必须是列表:# ✅ 支持差异化权重:y 是列表,sample_weight 是字典 history = model.fit( X, [y_regression, y_classification], sample_weight={ 'regression_output': sample_weights * 1.5, 'classification_output': sample_weights * 0.8 } ) - 切勿混合使用:
y为字典 +sample_weight为数组/字典,均会报错; - 确保
sample_weight长度与X.shape[0]严格一致,否则触发ValueError; - 模型编译时
loss和metrics的字典键名,必须与输出层name=参数完全一致(如'regression_output'),否则权重无法对齐。
总结:Keras 多输出场景下,sample_weight 的兼容性核心在于 y 的结构——始终优先采用列表格式,既简洁又健壮;字典格式 y 仅适用于纯预测或调试,不建议用于带权重的训练流程。










