TensorFlow.js在Node.js中loadLayersModel报fetch failed错误求助
解决TensorFlow.js Node.js环境加载本地模型报错问题
错误原因
你在Node.js环境中使用@tensorflow/tfjs的tf.loadLayersModel加载本地模型时,依赖的fetch实现(Node.js v21+内置的undici)不支持file://协议请求,因此抛出TypeError: fetch failed及not implemented... yet...错误。
解决方案
1. 切换到@tensorflow/tfjs-node
@tensorflow/tfjs-node是专为Node.js环境优化的TensorFlow.js版本,它直接通过文件系统API加载本地模型,无需依赖fetch。
先安装依赖:
npm install @tensorflow/tfjs-node
2. 修改代码加载模型
使用tf.node.loadLayersModel替代tf.loadLayersModel,并通过绝对路径确保模型文件可被正确定位:
const tf = require("@tensorflow/tfjs-node"); const path = require("path"); // 生成模型文件的绝对路径,规避相对路径和跨系统路径格式问题 const MODEL_PATH = path.resolve(__dirname, "tfjs_Model", "model.json"); const loadModel = async () => { // 使用tfjs-node的专用方法加载本地模型 const model = await tf.node.loadLayersModel(`file://${MODEL_PATH}`); return model; }; module.exports = loadModel;
备选方案(不更换依赖包)
若必须使用@tensorflow/tfjs,可自定义支持file://协议的fetch实现(比如结合node-fetch、fetch-blob等包),但该方式配置繁琐,远不如直接使用tfjs-node高效。
验证要点
- 确认
tfjs_Model目录下存在model.json及对应的权重文件(如group1-shard1ofX.bin) - 检查路径是否正确,
path.resolve可自动适配Windows/Linux的路径格式差异
内容的提问来源于stack exchange,提问作者Candar TOZAN
相关产品推荐
相关产品推荐

