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

如何在Keras中正确定义自定义RMSE损失函数并解决张量赋值报错

报错原因
  • Keras/TensorFlow的损失函数基于静态计算图运行,Tensor类型对象不支持Python原生的下标赋值操作,你写的loss[i][j] *= xxx属于非法操作
  • 损失函数运行时y_true是张量结构,不能直接用Python原生for循环遍历、也不能直接用float()强制转换数值,这类操作会破坏计算图的构建逻辑
修复方案

直接使用张量内置的逐元素运算实现加权逻辑,不需要写循环,同时符合计算图运行要求,修复后代码如下:

import keras.backend as K

def custom_rmse(y_true, y_pred):
    loss = K.square(y_pred - y_true)
    # 生成权重掩码:y_true小于0.15的位置权重为0.2,其余为0.8,逐元素运算无需嵌套循环
    weight = K.where(y_true < 0.15, 0.2, 0.8)
    # 逐元素相乘完成加权,避开张量下标赋值的问题
    loss = loss * weight
    loss = K.sqrt(K.sum(loss, axis=1)) 
    return loss

上述代码完全实现了你原本的加权逻辑,同时兼容Keras计算图运行规则,运行效率也远高于Python原生循环实现。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 13:36:03