TensorFlow多输入模型传入PrefetchDataset预测报张量输入错误求助
报错原因
- Keras模型实例直接调用
model(inputs)的前向传播逻辑,仅支持传入张量/张量列表类型的输入,你传入的Test_dataset是tf.data.PrefetchDataset数据集对象,不属于张量类型,因此触发类型错误。 - 训练阶段调用
model.fit()无报错是因为fit方法原生适配tf.data.Dataset类型输入,内部会自动迭代数据集提取张量批次进行计算,和直接调用模型的输入要求不一致。
适配要求的解决方案
你要求必须使用model()而非predict方法推理,只需要手动迭代测试数据集,逐批次取出张量输入模型即可,示例代码如下:
# 初始化结果存储容器 predictions = [] true_labels = [] # 遍历测试集所有批次 for batch_x, batch_y in Test_dataset: # 直接调用模型传入批次输入张量,符合你要求的调用方式 batch_pred = model(batch_x) # 存储当前批次结果,调用numpy()可脱离TensorFlow计算图 predictions.append(batch_pred.numpy()) true_labels.append(batch_y.numpy())
预测结果与真实标签存储方案
你可以将所有批次的结果拼接为全量数组后按需存储,示例如下:
import numpy as np import pandas as pd # 拼接所有批次的结果为完整数组 all_predictions = np.concatenate(predictions, axis=0).flatten() all_true_labels = np.concatenate(true_labels, axis=0).flatten() # 方案1:存储为npy格式,适合后续Python读取处理 np.save("test_predictions.npy", all_predictions) np.save("test_true_labels.npy", all_true_labels) # 方案2:存储为csv格式,方便通用工具查看 result_df = pd.DataFrame({ "true_label": all_true_labels, "prediction": all_predictions }) result_df.to_csv("test_result.csv", index=False)
内容的提问来源于stack exchange,提问作者Mehdi
相关产品推荐
相关产品推荐

