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
相关产品推荐
相关产品推荐

