TensorFlow.js中model.predict()因backend未定义报错求助
TensorFlow.js调用model.predict()后移动张量到后端存储时崩溃:TypeError: Cannot read properties of undefined (reading 'backend')
系统信息
- 操作系统:Windows 10
- TensorFlow.js安装方式:npm
- TensorFlow.js版本:4.20
- 浏览器版本:127.0.6533.72(64位正式版)
- TensorFlow.js Converter版本:4.20
问题详情
调用model.predict()后,程序在尝试将张量移动到后端存储时崩溃,预期能正常完成张量的后端存储操作。
复现说明
核心逻辑在training.js文件中,使用Parcel启动服务,入口文件为bomberman.html,完整项目可复现该问题。
错误栈信息
TypeError: Cannot read properties of undefined (reading 'backend') at Engine.moveData (engine.ts:426:29) at DataStorage.get (backend.ts:55:22) at backend_webgl.ts:741:35 at Array.every (<anonymous>) at MathBackendWebGL.shouldExecuteOnCPU (backend_webgl.ts:740:16) at Object.slice [as kernelFunc] (Slice.ts:74:15) at kernelFunc (engine.ts:647:22) at engine.ts:713:23 at Engine.scopedRun (engine.ts:480:19) at Engine.runKernelFunc (engine.ts:709:10)
代码排查分析
在backend.ts第53行的get方法中,this.backend确认为WebGL后端且dataId有效,但调用moveData时,this.state.tensorInfo.get(dataId)返回undefined,导致读取info.backend时触发崩溃——问题根源是tensorInfo中不存在该dataId对应的记录。
可行排查与修复方向
- 检查张量生命周期:排查代码中是否存在提前调用
tensor.dispose()的逻辑,或是在张量未完成计算时就尝试移动存储,导致tensorInfo丢失对应记录。 - 切换后端验证:在初始化代码中添加
tf.setBackend('cpu'),切换到CPU后端测试。若问题消失,说明是WebGL后端的张量管理特定问题。 - 升级版本:执行
npm install @tensorflow/tfjs@latest --save升级到最新稳定版,查看官方Release Notes确认是否有相关bug修复。 - 同步计算时序:确保
model.predict()的结果已完全完成计算,若涉及异步操作,需使用await等待张量计算完成后再执行存储移动操作。
内容的提问来源于stack exchange,提问作者Titos Arthur
相关产品推荐
相关产品推荐

