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

TensorFlow.js加载转换后Keras模型报model.execute键错误如何解决

Keras模型转TensorFlow.js后React加载报错解决方案

你遇到的报错内容:

Unhandled Rejection (Error): The dict provided in model.execute(dict) has keys:

错误含义

该报错说明你调用model.predict时传入的参数不符合图模型的输入要求:

  • 直接传入DOM图片元素,没有转为符合模型要求的张量格式
  • 图模型需要传入和输入签名匹配的键值对对象,你传的是单个元素,没有对应输入key

修复步骤

  • 第一步:确认模型输入签名
    加载模型完成后打印输入信息,拿到模型要求的输入key、张量维度、数据格式:

    const model = await tf.loadGraphModel('model.json')
    console.log(model.inputs)
    

    输出中name字段就是需要传入的输入key,shape字段就是要求的张量维度。

  • 第二步:预处理图片为符合要求的张量
    不能直接传入图片DOM元素,需要按训练时的预处理逻辑转换张量:

    // 请替换代码中尺寸、归一化逻辑为你模型训练时的对应参数
    const imgTensor = tf.browser.fromPixels(imageElement)
      .resizeNearestNeighbor([224, 224]) // 替换为模型训练用的输入宽高
      .toFloat()
      .div(tf.scalar(255)) // 训练时归一化到0-1则保留,归一化到-1~1替换为.div(127.5).sub(1)
      .expandDims() // 补充batch维度,符合[batch, h, w, c]的输入要求
    
  • 第三步:按输入签名传入参数
    调用predict时传入键值对,key为上一步拿到的输入名称:

    // 把input_1替换为你拿到的实际输入key
    const predictions = await model.predict({
      "input_1": imgTensor
    }).data()
    
  • 可选优化(Keras模型专用)
    如果你是原生Keras导出的SavedModel,建议转换时修改输入格式为keras_saved_model,转换后用loadLayersModel加载,无需手动匹配输入key:
    转换命令:

    tensorflowjs_converter \
    --input_format=keras_saved_model \
    model_name \
    web_model
    

    加载代码:

    const model = await tf.loadLayersModel('model.json')
    // 预处理后的张量可直接传入,无需包装为键值对
    const predictions = await model.predict(imgTensor).data()
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 10:45:03