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

Keras自定义相对均方根误差损失函数类型不匹配报错如何解决

问题修复方案

报错信息:TypeError: Input 'y' of 'Sub' Op has type uint8 that does not match type float32 of argument 'x'

该报错核心原因是张量运算类型不匹配:Keras模型输出的预测值y_pred默认是float32类型,而你传入的真实标签y_train、验证集标签为uint8类型(多为未做类型转换的原始数据常见类型),减法运算要求运算符两边数据类型一致,因此触发错误。

你可以按以下步骤修复:

  • 第一步:修正标签数据类型与验证集配置错误
    你当前验证集的标签参数填写错误,不应该传入预测值y_predict,需替换为测试集真实标签y_test,同时将所有标签统一转换为float32类型:
# 转换标签类型
y_train = y_train.astype("float32")
y_test = y_test.astype("float32")

# 修正后的训练代码,验证集标签替换为真实值y_test
model_history = model.fit(
    x=[l_train, s_train,w_train], y=y_train,
    validation_data=([l_test, s_test , w_test], y_test),
    epochs=500, batch_size=10, verbose=1)
  • 第二步:优化自定义损失函数,彻底避免类型问题
    你当前损失函数中的变量n如果未提前定义为全局变量也会触发报错,且分子分母的n可以直接约掉,同时可以在损失函数内部主动做类型转换,避免后续再出现同类问题:
def relative_root_mean_squared_error(y_true, y_pred):
    # 主动将y_true转换为和y_pred一致的类型
    y_true = K.cast(y_true, K.dtype(y_pred))
    # 约掉分子分母的n,简化计算公式
    return K.sqrt(K.mean(K.square(y_pred - y_true))) / K.mean(y_true) * 100
  • 可选优化点
    你当前是回归任务,metrics选择accuracy没有实际意义,准确率是分类任务的评估指标,可以替换为回归常用的评估指标:
model.compile(optimizer = "adam", loss = relative_root_mean_squared_error, 
          metrics =["mae", "mse"])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 09:24:01