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

TensorFlow.js中model.predict与onBatchEnd回调返回undefined问题求助

问题修复方案

1. onBatchEnd回调返回undefined修复

  • 你在model.compile中仅配置了MAE作为评估指标,没有加入准确率指标,因此logs对象不存在acc属性,打印结果自然为undefined。
  • 你的训练样本总数只有18条,TensorFlow.js默认batchSize为32,样本数小于batchSize时训练不会拆分批次,onBatchEnd回调根本不会被触发,需要在fit配置中手动设置更小的batchSize。
  • 输出层配置错误:units=1搭配softmax激活函数完全无法正常训练,softmax会对所有输出单元做归一化,单单元场景下输出永远固定为1:
    • 二分类任务将激活函数改为sigmoid
    • 回归任务去掉激活函数配置,保持线性输出
      修改后的代码示例:
// 输出层调整(二分类场景示例)
model.add(tf.layers.dense({name:'layer2',units: 1, activation: 'sigmoid'}))

// compile配置补充acc指标
model.compile({
  loss: 'meanSquaredError', 
  optimizer: 'sgd',
  metrics: ['MAE', 'acc']
});

// fit配置调整batchSize
model.fit(xs, ys, {
  epochs: 500, 
  batchSize: 6,
  callbacks:{onBatchEnd}
})

2. model.predict().print无输出修复

你调用predict时传入的张量没有明确指定形状和类型,和训练输入的int32类型、[1,30]形状不匹配,会导致输出异常,需显式声明预测输入张量的参数:

const predictInput = tf.tensor2d(
  [[104,111,117,32,97,111,101,32,121,111,117,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32]],
  [1, 30],
  'int32'
)
model.predict(predictInput).print()

其他注意事项

你代码中使用了fs.readFile但没有引入fs模块,需补充const fs = require('fs'),否则文件读取逻辑会直接报错,训练流程不会执行,自然也不会走到predict步骤。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 04:54:02