You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无y输出场景下如何为Keras自定义数据生成器添加样本权重?

解决方案

不改动现有输入格式的样本权重接入方法

你遇到的核心问题是Keras 2.3.1版本的训练引擎逻辑中,只有当y不为None时才会保留传入的样本权重,针对你的场景可以用两种方案解决:

  • 方案1(最小改动):将生成器返回的None替换为和batch size等长的占位空数组,仅用来绕开y is None的判断逻辑,这个占位数组不会被你的模型实际使用,不会触发格式报错。
    生成器的yield代码修改如下:
    # 替换原有的yield [batch_token_ids, batch_segment_ids], None, sample_weights
    yield [batch_token_ids, batch_segment_ids], np.zeros((self.batch_size,)), sample_weights
    
    Keras检测到y不为None后,就会正常保留你传入的样本权重进入后续计算流程。
  • 方案2(兼容性最高):将样本权重作为第三个输入项合并到x中,完全绕开Keras原生样本权重的处理逻辑,生成器返回二元组即可:
    yield [batch_token_ids, batch_segment_ids, sample_weights], None
    
    后续直接在模型的损失计算层,手动将每个样本的损失乘上对应权重即可。

自定义损失函数的适配要求

  • 如果使用Keras原生损失函数,只要完成上面的修改让样本权重被Keras正常接收,不需要额外调整损失函数,Keras会自动完成损失加权计算。
  • 如果使用自定义损失函数:
    • 采用方案1的原生样本权重逻辑时,不需要修改损失函数,Keras会在损失计算完成后自动应用权重。
    • 采用方案2的手动传入权重逻辑时,需要在损失函数中取出对应权重,和单样本损失相乘后再返回平均损失即可。

内容的提问来源于stack exchange,提问作者New_Programmer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 17:45:03