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

使用tf.data.Dataset训练线性回归模型的方法及报错解决

解答

完全可以使用tf.data.Dataset训练线性回归模型,你遇到的报错是Dataset格式不符合Keras输入要求导致的。

报错根因

当你向model.fit()传入tf.data.Dataset用于监督学习训练时,Dataset的每个输出元素必须是**(输入特征, 对应标签)**的二元元组结构。
你原代码中使用list(zip(x, y))将特征和标签合并为了单个数值序列,生成的Dataset每个元素是一个包含两个数值的一阶张量,而非拆分的特征+标签结构,Keras无法从中识别出目标标签,因此抛出缺失目标数据的错误。

正确实现步骤

  • 创建Dataset时直接向from_tensor_slices传入(特征数组, 标签数组)的元组,框架会自动按第一维度切分样本,生成符合要求的(特征,标签)对
  • 为Dataset添加.batch()方法指定批大小,默认配置下Dataset每次仅返回1个样本,训练效率极低,可按需搭配.shuffle()打乱样本顺序提升训练效果
  • 简单线性回归任务无需使用带激活函数的隐藏层,单个无激活的全连接层即可完成线性关系拟合,当然保留原网络结构也可正常训练,仅会增加不必要的计算量。

修正后可运行代码

import tensorflow as tf
import numpy as np

x = np.linspace(1, 10, num=10**2)
y = 54 * x + 33

# 正确构建适配训练的Dataset
ds = tf.data.Dataset.from_tensor_slices((x, y)).shuffle(100).batch(16)

# 线性回归最简模型结构
model = tf.keras.models.Sequential([
    tf.keras.layers.Dense(1, input_shape=[1,])
])

model.compile(loss="mean_absolute_error", optimizer="adam")
model.fit(ds, epochs=50)

训练完成后你可以通过model.weights查看参数,会收敛到权重约54、偏置约33,和你预设的线性公式一致。

如果需要保留你原有的多层网络结构,仅替换Dataset创建部分的代码即可解决报错,无需修改网络结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 16:06:23