在我的项目中,我有很多这样的情况:我有一个Dataset
示例,我需要从某个模型中获取对数据集中每一项的预测。model.predict()
API对此进行了完美的优化,如文档中所示。然而,似乎有一个主要问题。我还碰巧需要标签来与预测值进行比较,即数据集包含x,y
对,并且我希望在预测完成后以(y_predicted, y)
对结束,我想不出一个清晰的方法来“分割”数据集,以便将x输入模型,而保留y,以便与预测的y重新连接。
编辑:我知道手动迭代数据集并直接调用模型是非常简单的,例如。
for x, y in dataset:
y_pred = model(x)
result.append((y, y_pred))
但是,这似乎比使用内置predict()要慢一些,因为Tensorflow无法对输入管道进行多线程/优化。
有没有人有一个很好的方法来完成这一点?
1条答案
按热度按时间2jcobegt1#
考虑到您提到的问题,最好覆盖
predict
以满足您的需要。但您实际上并不需要覆盖该函数,只需覆盖该函数调用的predict_step
即可。只需使用此类而不是Model
:如果您的模型当前是
Sequential
,则从它继承。基本上,我对默认实现所做的唯一更改是将, y
添加到模型调用结果中。请注意,这也做了一些假设,例如您的数据集由(input, label)
批处理对组成。您可能需要稍微调整它以满足您的需要。下面是一个最小的示例:这显示
((10000, 10), (10000,))
--predict
现在返回outputs, labels
的元组(这可以通过检查返回的标签并与测试集中的图像进行比较来确认)。