首页 > 解决方案 > 我可以扩展一个 Tensorflow Estimator 来返回解释值吗?

问题描述

我大致按照文档中提供的教程构建了一个模型。tf.estimator.BoostedTreesClassifier然后,我使用SavedModel 文档的SavedModels from Estimators部分中tf.Estimator.export_saved_model描述的方法将其导出。这会加载到 TensorFlow Serving 并回答 gRPC 和 REST 请求。

我现在想包括解释因素以及任何预测。或者,不太理想的是,作为导出模型上可用的第二个签名。tf.estimator._BoostedTreesBase.experimental_predict_with_explanations已经实现了适当的算法,如文档的本地可解释性部分所述。

我认为有可能以某种方式“扩展”现有的估计器,让我将此方法公开为另一个服务签名。我已经想到了几种方法,但到目前为止只尝试了前两种:

我试过了

export_saved_model更改导出哪些签名

这并没有走得太远。暴露的签名有点动态,但似乎仅限于定义的训练、预测或评估选项tensorflow_core.python.saved_model.model_utils.mode_keys.KerasModeKeys

只需使用eval_savedmodel?

我短暂地认为 Eval 可能是我正在寻找的东西,并遵循了一些 TensorFlow 模型分析的入门指南。我在这条路上走得越远,Eval 模型的主要区别似乎就是数据的加载方式,而这不是我想要改变的。

子类化估计器

导出子类模型有额外的注意事项。最重要的是,估计器不是模型。这是一个在输入、输出和配置周围有额外元数据的模型,所以我不清楚子类估计器是否可以像 Keras 模型一样导出。

我没有编写太多代码就放弃了这种子类化方法。

将 BoostedTrees 模型拉出 Estimator

我不够精明,无法自己使用低级原语来安排 BoostedTrees 模型。设置它的 Estimator 中的代码看起来相当复杂。利用这项工作会很好,但似乎 Estimator 处理model_fns,它们根据训练/预测/评估模式而变化,并且不清楚与 Keras 模型的关系是什么。

我为此写了一点代码,但也很快放弃了。

接下来是什么?

鉴于上述死胡同,我应该进一步说服哪个角度?

低级导出 API和低级模型构建 API 看起来都可以让我更接近解决方案。设置 Estimator 与使用任一 API 重新创建 Estimator 之间的差距似乎相当大。

我是否可以继续使用现有的 Estimator,但使用低级导出 API 创建带有“解释”签名的东西experimental_predict_with_explanations?甚至是一步“预测和解释”?哪个教程会让我走上这条路?

标签: pythontensorflowtensorflow-servingtensorflow2.0tensorflow-estimator

解决方案


推荐阅读