TensorFlow.js二分类fitDataset训练logits与labels形状不匹配问题
问题根因
报错的核心是标签张量与模型输出张量形状不匹配:
- 模型最后一层是
units=1的sigmoid激活输出,单批次(batch size=2)的输出形状为[2, 1] - 直接从数组生成的标签经过batch操作后,单批次形状为
[2] - 二元交叉熵损失要求两者形状完全一致,因此触发错误。
修复方案
只需在数据集构造阶段增加一步维度对齐操作即可,修改数据集构造的代码段:
// 原代码 // const xyDataset = tf.data.zip({xs: xDataset, ys: yDataset}).batch(2).shuffle(2) // 修改后代码 const xyDataset = tf.data.zip({xs: xDataset, ys: yDataset}) // 给每个标签增加最后一维,从标量转为[1]形状的张量 .map(sample => ({ xs: sample.xs, ys: tf.expandDims(sample.ys, -1) })) .shuffle(4) .batch(2)
修改后标签的批次形状会变为[2, 1],和模型输出形状完全匹配,即可正常训练。额外调整了shuffle和batch的顺序,符合数据集处理的常规规范,避免打乱批次内部的样本对应关系。
内容的提问来源于stack exchange,提问作者Vasiliy
相关产品推荐
相关产品推荐

