如何将输入图像馈入DNN集成模型?多输入不匹配报错求解
错误原因
你定义的集成模型为多输入结构:构造时inputs参数传入了长度为5的子模型输入列表,要求训练时必须传入长度为5的输入列表,列表中每个元素对应一个子模型的输入,形状为(样本数, 160, 160, 3)。
你使用np.dstack拼接图像的操作,将5份图像在宽度维度拼接为单个形状为(300, 160, 800, 3)的张量,不符合模型的输入要求,因此触发报错。
修复步骤
1. 替换图像堆叠逻辑
删除原有的np.dstack拼接代码,直接构造符合要求的多输入列表:
stacked_img_data = [ np.array(img_data[0:300]), np.array(img_data[0:300]), np.array(img_data[0:300]), np.array(img_data[0:300]), np.array(img_data[0:300]) ]
2. 验证输入格式(可选)
执行以下代码确认输入形状匹配:
for idx, input_tensor in enumerate(stacked_img_data): print(f"子模型{idx+1}输入形状:", input_tensor.shape)
输出应为5条(300, 160, 160, 3),代表输入格式正确。
3. 执行训练
原有训练代码无需修改,直接运行即可:
history = stacked_model.fit(x = stacked_img_data, y = target_val, epochs=10)
可选优化
后续如果需要扩容数据集降低内存占用,可以使用tf.data.Dataset构造多输入流水线,避免一次性加载全量数据到内存。
内容的提问来源于stack exchange,提问作者Thulfiqar
相关产品推荐
相关产品推荐

