TensorFlow/Keras多输入模型验证数据输入报错求助
多输入Keras模型验证数据传入问题解决
你的问题核心是验证数据格式未与训练输入对齐:模型定义了3个输入,但验证阶段传入的是单一数据对象,导致输入数量不匹配。
1. 拆分测试集的输入与标签
从test_dataset中分离出对应训练用的三个输入特征和验证标签。假设test_dataset前3列对应Name-1、Name-2、Name-3,剩余列是验证标签(根据你的实际数据结构调整索引):
# 提取三个验证输入,确保形状与训练输入一致 val_name1 = test_dataset[:, 0].reshape(-1, 1) # 转换为(8,1),匹配训练时的(32,1) val_name2 = test_dataset[:, 1].reshape(-1, 1) val_name3 = test_dataset[:, 2].reshape(-1, 1) # 提取验证标签 val_y = test_dataset[:, 3:]
2. 按训练输入格式传入验证数据
调用fit时,validation_data要传入和训练输入完全相同的结构——包含3个输入张量的列表,搭配对应标签:
model.fit( [X_input['Name-1'], X_input['Name-2'], X_input['Name-3']], y_output, validation_data=([val_name1, val_name2, val_name3], val_y), epochs=你的训练轮数, batch_size=你的批次大小 )
若使用tf.data.Dataset格式的验证集
如果测试集是tf.data.Dataset类型,需打包成多输入数据集结构:
val_dataset = tf.data.Dataset.from_tensor_slices( ( [val_name1, val_name2, val_name3], # 也可使用字典匹配输入层名称:{'Name-1': val_name1, ...} val_y ) ).batch(你的批次大小) # 传入fit函数 model.fit( [X_input['Name-1'], X_input['Name-2'], X_input['Name-3']], y_output, validation_data=val_dataset, ... )
额外注意
- 必须保证每个验证输入的形状、数据类型与对应训练输入完全一致,比如训练时
X_input['Name-1']是float32的(32,1),验证输入也需是同类型同形状的(8,1)。 - 移除验证数据后RMSE恒定,大概率是模型未学到有效特征,解决验证数据问题后,可结合贝叶斯层参数设置进一步排查模型拟合问题。
内容的提问来源于stack exchange,提问作者United Dragons
相关产品推荐
相关产品推荐

