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
相关产品推荐
相关产品推荐

