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

Keras搭建一元线性回归模型训练遇维度不匹配报错如何解决

报错根因

Keras的Dense层要求输入特征张量最低为2维,标准形状格式为(样本总数, 单个样本的特征数)。你当前传入的特征X是1维张量,形状为(8,),缺少显式的特征维度,因此触发expected min_ndim=2, found ndim=1. Full shape received: (None,)报错。
你之前尝试expand_dims未解决问题,通常是两个错误操作导致:

  • 维度添加位置错误:将axis参数设为0,把X转为形状(1,8)的张量,等价于1个样本含8个特征,和单特征线性回归的场景完全不匹配
  • 未接收操作返回值:TensorFlow的张量操作不是原地修改,若执行tf.expand_dims()后没有将结果重新赋值给X,X仍保持原来的1维结构
可直接运行的修正代码

数据部分修正

核心是给特征张量在最后一维添加特征轴,调整后X形状为(8,1),对应8个样本、每个样本1个特征,符合Dense层输入要求:

import numpy as np
import tensorflow as tf

X = np.array([-6,-3,0,3,6,9,12,15])
y = X+10
X = tf.constant(X)
y = tf.constant(y)
X = tf.cast(X,"float32")
y = tf.cast(y,"float32")

# 核心维度修正
X = tf.expand_dims(X, axis=-1)
y = tf.expand_dims(y, axis=-1)

模型部分修正

建议在第一层Dense显式指定输入形状,提前做维度校验,同时将metrics参数用列表包裹避免版本兼容问题:

model = tf.keras.models.Sequential([
    # 显式声明单个样本的特征数为1
    tf.keras.layers.Dense(1, input_shape=(1,))
])
model.compile(loss = tf.keras.losses.mae,
              optimizer = tf.keras.optimizers.SGD(learning_rate=0.01),
              metrics = [tf.keras.metrics.mse]
              )
# 启动训练,可自行设置epoch数观察收敛效果
model.fit(X, y, epochs=200)
补充说明

训练收敛后你可以通过model.weights查看训练得到的参数,正常会接近a=1、b=10,和你预设的y = x +10线性关系一致。

内容的提问来源于stack exchange,提问作者tzahi geller

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 17:58:01