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

TensorFlow.js训练报错Received 30 Tensors,调整inputShape无效如何解决

问题解决方法

报错根本原因

你收到的报错和inputShape配置无关,问题出在数据集转换逻辑:convertedTrainingData返回的xs是长度为30的普通数值数组,TensorFlow.js会默认把数组内的每个元素解析为独立的Tensor,因此出现「收到30个Tensor但模型仅需要1个输入Tensor」的报错。

修改方案

你需要在数据映射阶段把特征、标签都转为指定形状的张量,同时给训练数据集添加batch操作,符合模型训练的输入规范,修改后完整代码如下:

const trainingUrl = "/data/wdbc-train.csv";
const trainingData = tf.data.csv(trainingUrl, {
  columnConfigs: {
    diagnosis: {
      isLabel: true,
    },
  },
});
const numOfFeatures = (await trainingData.columnNames()).length - 1;
const convertedTrainingData = trainingData
  .map(({ xs, ys }) => {
    // 把30个特征转为形状为[numOfFeatures]的单个张量
    const features = tf.tensor1d(Object.values(xs));
    // 把标签转为单个张量
    const label = tf.tensor1d(Object.values(ys));
    return { xs: features, ys: label };
  })
  // 添加batch,可根据你的硬件配置调整batchSize大小
  .batch(32);

const model = tf.sequential();
model.add(
  tf.layers.dense({ inputShape: [numOfFeatures], activation: "relu", units: 5 })
);
model.add(tf.layers.dense({ units: 1, activation: "sigmoid" }));

// 原代码缺少编译步骤,二分类任务可按需调整优化器、损失函数参数
model.compile({
  optimizer: tf.train.adam(),
  loss: 'binaryCrossentropy',
  metrics: ['accuracy']
});

await model.fitDataset(convertedTrainingData, {
  epochs: 100,
  callbacks: {
    onEpochEnd: async (epoch, logs) => {
      console.log(
        "Epoch: " + epoch + " Loss: " + logs.loss + " Accuracy: " + logs.acc
      );
    },
  },
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 00:36:02