Node.js环境下TensorFlow.js报错:Cannot read property 'backend' of undefined
TensorFlow.js Node环境下执行模型报错:Cannot read properties of undefined (reading 'backend')
依赖项
"dependencies": { "@tensorflow/tfjs-backend-webgl": "^4.6.0", "@tensorflow/tfjs-core": "^4.6.0", "@tensorflow/tfjs-node": "^4.6.0", "canvas": "^2.11.2", "express": "^4.18.2", "fs": "^0.0.1-security", "jsdom": "^21.1.2", "node-cmd": "^5.0.0", "node-gyp": "^9.3.1", "path": "^0.12.7", "png-js": "^1.0.0", "xml-js": "^1.6.11" }
代码执行步骤
- 加载模块
const tf = require('@tensorflow/tfjs-node'); require('@tensorflow/tfjs-backend-webgl');
- 加载模型
const model = await tf.loadGraphModel(path);
- 图像预处理
const batched = tf.tidy(() => { const imageTensor = tf.browser.fromPixels(cnv); return ( imageTensor .resizeBilinear([width, height]) .expandDims(0) .toInt() ); });
- 执行模型
return model.executeAsync(batched,["StatefulPartitionedCall/Postprocessor/Slice","StatefulPartitionedCall/Postprocessor/ExpandDims_1"]).then(function (result){ console.log("flag 0"); } // 从未执行到该日志
报错信息
@tensorflow\tfjs-core\dist\tf-core.node.js:4519 var srcBackend = info.backend; ^ TypeError: Cannot read properties of undefined (reading 'backend') at Engine.moveData (\node_modules\@tensorflow\tfjs-core\dist\tf-core.node.js:4519:31) at DataStorage.get (\node_modules\@tensorflow\tfjs-core\dist\tf-core.node.js:230:28) at NodeJSKernelBackend.getInputTensorIds (\node_modules\@tensorflow\tfjs-node\dist\nodejs_kernel_backend.js:169:43) at NodeJSKernelBackend.executeSingleOutput (\node_modules\@tensorflow\tfjs-node\dist\nodejs_kernel_backend.js:216:73) at Object.kernelFunc (\node_modules\@tensorflow\tfjs-node\dist\kernels\Reshape.js:34:27) at kernelFunc (\node_modules\@tensorflow\tfjs-core\dist\tf-core.node.js:4704:32) at \node_modules\@tensorflow\tfjs-core\dist\tf-core.node.js:4764:27 at Engine.scopedRun (\node_modules\@tensorflow\tfjs-core\dist\tf-core.node.js:4569:23) at Engine.runKernelFunc (\node_modules\@tensorflow\tfjs-core\dist\tf-core.node.js:4760:14) at Engine.runKernel (\node_modules\@tensorflow\tfjs-core\dist\tf-core.node.js:4633:21)
运行环境
- Windows Anaconda环境
- Python 2.7(TensorFlow.js推荐版本)
- Node.js v18.15.0
问题判断
已尝试所有能找到的解决方案,仍无法解决,怀疑是TensorFlow.js的已知bug:未定义后端(tfjs-node)#7706
解决建议
移除冲突后端依赖:Node环境下使用
tfjs-node时,无需手动引入tfjs-backend-webgl,两者后端会冲突,直接删除require('@tensorflow/tfjs-backend-webgl');这一行。替换Node环境的图像读取API:
tf.browser.fromPixels是浏览器专属API,Node环境下改用tf.node.fromPixels结合canvas库读取图像,避免跨环境API导致的张量后端异常,示例:
const { createCanvas, loadImage } = require('canvas'); const img = await loadImage(imagePath); const canvas = createCanvas(img.width, img.height); const ctx = canvas.getContext('2d'); ctx.drawImage(img, 0, 0); const imageTensor = tf.node.fromPixels(canvas);
检查张量生命周期管理:避免
tf.tidy不当使用导致的张量后端信息丢失,可尝试手动构建张量替代tidy包裹的逻辑。调整版本兼容性:Node.js v18与TensorFlow.js 4.6.0可能存在兼容问题,可尝试降级Node.js到v16,或升级TensorFlow.js至最新稳定版。
内容的提问来源于stack exchange,提问作者Typo
相关产品推荐
相关产品推荐

