TensorFlow.Keras训练报错:输入形状显示为()但实际为(768,8)
问题解决:输入形状不匹配报错的根源及修复方案
嘿,我一眼就揪出问题所在啦!你的输入数据形状其实完全没问题——X.shape=(768,8)完美匹配模型第一层input_shape=(8,)的要求,y.shape=(768,1)也符合二分类任务的标签格式,报错的锅根本不在数据维度上。
错误核心:validation_data参数用错了
你在model.fit()里写了validation_data = 0.1,但这个参数的正确用法是传入包含验证集特征和标签的元组(比如(X_val, y_val));如果你只是想从训练集里自动拆分出10%作为验证集,应该用的是validation_split=0.1这个参数,而不是validation_data。
当你把validation_data设成单独的数值0.1时,Keras会误把这个标量当成输入数据,它的形状是(),自然和模型期望的2维输入不匹配,才会弹出这个让你困惑的报错。
修正后的代码
只需要修改fit方法的参数即可:
model.fit(X, y, batch_size = 16, epochs = 1, validation_split = 0.1)
额外补充:手动指定验证集的正确方式
如果你已经自己拆分好了训练集和验证集,validation_data的正确用法是这样的:
# 先拆分数据(示例) from sklearn.model_selection import train_test_split X_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.1, random_state=20) # 传入验证集元组 model.fit(X_train, y_train, batch_size = 16, epochs = 1, validation_data=(X_val, y_val))
这样运行起来就不会有问题啦!
内容的提问来源于stack exchange,提问作者Togagiga
相关产品推荐
相关产品推荐

