5个EfficientNetB3堆叠模型预测时报输入张量数量不匹配错误如何解决
错误原因
你的堆叠集成模型定义了5个输入节点,分别对应5个EfficientNetB3子模型的输入。报错的核心原因是输入格式不符合模型要求:
你将zip打包后的测试集迭代后,把每个批次对应的5个输入张量全部平铺存入了X_pred列表。你的测试集batch size为2,总样本1214张对应约607个批次,最终X_pred列表总长度为607 * 5 = 3035个张量,调用predict时框架会把列表内的每个元素识别为一个独立输入,和模型要求的5个输入完全不匹配。
解决方案
方案1:直接传入TF数据集预测(推荐)
不需要把数据全部加载到内存,直接将zip后的数据集传给predict方法即可,框架会自动匹配多输入格式:
X = tf.data.Dataset.zip((dtest, dtest, dtest, dtest, dtest)) sub_df[label_cols] = stack_model.predict(X, verbose=1)
方案2:先加载全量数据到内存
如果有需要先把所有数据加载到本地内存,需要按输入维度分别拼接张量,最终传入长度为5的列表,每个元素对应一个子模型的全量输入:
X = tf.data.Dataset.zip((dtest, dtest, dtest, dtest, dtest)) # 分别收集5个输入的所有批次数据 input_collect = [[], [], [], [], []] for batch in X: for idx in range(5): input_collect[idx].append(batch[idx]) # 各输入维度批次拼接,得到5个全量输入张量 X_pred = [tf.concat(batches, axis=0) for batches in input_collect] sub_df[label_cols] = stack_model.predict(X_pred, verbose=1)
内容的提问来源于stack exchange,提问作者Arthur
相关产品推荐
相关产品推荐

