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

Keras模型训练报错:维度不匹配(ValueError: Dimensions must be equal)

神经网络训练维度不匹配错误排查

你的问题根本不是损失函数的问题,而是特征和标签的定义完全搞反了!

你要预测的是casual和registered这两个数值,但当前代码里:

  • dat_features是包含所有列的原始数据(包括要预测的两个目标列)
  • dat_labels是去掉目标列后的10列数据

而你的模型最后一层输出是2维(对应两个目标值),但训练时传入的标签是10维,两者维度不匹配,所以才会报Dimensions must be equal, but are 2 and 10的错误。

修正后的代码

import pandas as pd
import numpy as np
import tensorflow as tf
from tensorflow.keras import layers

dat = pd.read_csv('https://raw.githubusercontent.com/byui-cse/cse450-course/master/data/bikes.csv')

dat['dteday'] = pd.to_datetime(dat['dteday'])
dat['dteday'] = dat['dteday'].values.astype('float64')

for col in dat.columns:
    dat[col] = dat[col].astype(np.float64)

# 修正特征与标签的定义:特征是除目标列外的所有列,标签是要预测的两个数值
dat_features = dat.drop(columns=['casual', 'registered'])
dat_labels = dat[['casual', 'registered']]

# 转换为数组
dat_features = np.array(dat_features)
dat_labels = np.array(dat_labels)

bike_model1 = tf.keras.Sequential([
    layers.Dense(10),
    # layers.Dense(20),
    layers.Dense(2)
])

bike_model1.compile(loss=tf.keras.losses.MeanSquaredError(),
                    optimizer=tf.keras.optimizers.Adam())

bike_model1.fit(dat_features, dat_labels, epochs=10)

补充说明

  • MeanSquaredError损失函数对于回归任务(预测连续数值)是完全合适的,不需要更换。
  • 核心错误就是特征和标签的赋值颠倒,导致维度不匹配,修正后即可正常训练。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 23:06:33