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

TensorFlow.js model.predict()输出NaN值,新手求问题排查方案

解决TensorFlow.js预测返回NaN的问题

嘿,作为TensorFlow.js新手遇到NaN预测结果真的很常见,我来帮你梳理几个最可能的原因,结合你给出的代码片段逐一分析:

1. 训练数据未做归一化/标准化

这是最常见的诱因!如果你的输入数据(xs)或者标签数据(ys)数值跨度极大(比如有的值是几千,有的是0.001),训练时梯度会直接“爆炸”,导致模型权重变成NaN。

解决办法:把数据缩放到0-1或者-1到1的区间,比如用标准化(减去均值除以标准差):

// 假设xs是你的输入张量
const normalizedXs = xs.sub(xs.mean()).div(xs.std());
// 标签数据也建议做同样处理,预测后再反转换回去

2. 输入数据本身包含无效值

如果你的原始数据(也就是传入myFirstTfjs的arr)里有NaN、null或者无穷大的值,模型训练时直接就会输出NaN结果。

解决办法:先清洗数据,过滤掉无效条目:

// 假设arr是[[特征1, 特征2], ...]的结构,先检查每个值是否有效
const cleanArr = arr.filter(item => !isNaN(item[0]) && !isNaN(item[1]));
// 再转换成张量
const xs = tf.tensor2d(cleanArr, [cleanArr.length, 2]);

3. SGD优化器的学习率过高

你用的是sgd(随机梯度下降)优化器,默认的学习率可能太大,导致权重更新时直接跳过合理范围,变成NaN。

解决办法:手动设置更小的学习率试试:

model.compile({
  loss: 'meanSquaredError',
  optimizer: tf.train.sgd(0.001) // 把学习率调到0.001或者更小,根据数据调整
});

4. 输入形状与模型不匹配

你的模型定义了inputShape: [2],意味着每个输入样本必须是2维的。如果你的xs张量形状不对(比如是1维或者3维),训练过程也会出问题。

解决办法:检查张量形状,确保xs是[样本数量, 2]的2D张量:

// 比如arr是包含10个2维样本的数组,转换时指定形状
const xs = tf.tensor2d(arr, [arr.length, 2]);
// 可以用print()查看形状和数据
xs.print();

另外,你的代码里const xs =...没写完,记得要把输入数据正确转换成TensorFlow.js的张量,同时确保标签数据ys的形状和模型输出(1维)匹配哦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:08:11