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

React Native Expo中TensorFlow.js加载模型报错:modelWeightsID需为数字或数字数组

解决React Native Expo中tfjs加载本地模型报错modelWeightsID的问题

问题重现

在React Native Expo项目中使用@tensorflow/tfjs和@tensorflow/tfjs-react-native加载本地模型时,执行以下代码:

import modelJSON from '../../../assets/model/model.json'
import modelWeights from '../../../assets/model/group1-shard.bin'

const model = await tf.loadLayersModel(
  bundleResourceIO(modelJSON, modelWeights),
).catch((error) => {
  console.error(error)
})

出现错误:

Error: modelWeightsID must be a number or number array.
Have you wrapped your asset paths in a require() statements?

尝试用require导入权重后问题依旧。

解决方案

1. 正确配置Expo资产

首先确保模型文件被Expo正确识别打包:

  • 在app.json或app.config.js的assets数组中添加模型所在目录:
    "assets": [
      "./assets/model/"
    ]
    
  • 执行expo start -c清除缓存并重启项目,让Expo重新打包资产。

2. 修正资源导入方式

bundleResourceIO的第二个参数需要的是资源的ID(require返回的数字),而非文件内容,正确写法如下:

// 导入model.json作为JSON对象
import modelJSON from '../../../assets/model/model.json';
// 用require获取权重文件的资源ID
const modelWeights = require('../../../assets/model/group1-shard.bin');

// 先确保tfjs初始化完成
await tf.ready();

// 加载模型
const model = await tf.loadLayersModel(
  bundleResourceIO(modelJSON, modelWeights)
).catch(error => {
  console.error(error);
});

3. 检查模型文件有效性

  • 打开model.json,确认weightsManifest中的分片文件名(如group1-shard.bin)和实际文件完全一致,包括大小写。
  • 确保模型是通过官方tfjs-converter工具转换的,符合TensorFlow.js的格式规范。

4. 适配Expo高版本(SDK 49+)

如果使用Expo SDK 49及以上版本,资产路径需严格对应,避免相对路径层级错误,可尝试使用绝对路径或者调整导入路径的层级。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 13:05:30