我有一个模型,大致遵循文档中为tf.estimator.BoostedTreesClassifier
提供的the tutorial。然后,按照Savedmodel文档的SavedModels from Estimators部分中所述,使用tf.Estimator.export_saved_model
方法将其导出。这会加载到TensorFlow Serving中并回答gRPC和REST请求。
我现在想将解释因素和所有预测一起包括在内。或者,不太理想的是,作为导出模型上可用的第二个签名。 tf.estimator._BoostedTreesBase.experimental_predict_with_explanations
已经实现了适当的算法,如文档的Local Interpretability部分所述。
我认为可以以某种方式“扩展”现有的估算器,使我可以将此方法公开为另一个提供服务的签名。我考虑过几种方法,但到目前为止只尝试了前两种方法:
我尝试过
更改export_saved_model
导出的签名
这并没有走太远。公开的签名有些动态,但似乎仅限于tensorflow_core.python.saved_model.model_utils.mode_keys.KerasModeKeys
定义的训练,预测或评估选项。
仅使用eval_savedmodel
?
我短暂地认为Eval可能正是我想要的,并遵循getting started guide中的一些进行TensorFlow模型分析。我走的越远,与Eval模型的主要区别似乎就在于数据的加载方式,而这不是我想要更改的。
将估算器归类
exporting subclassed models还有一些警告。最重要的是,估算器不是模型。这是一个在输入,输出和配置方面具有额外元数据的模型,因此我不清楚子类估计器是否可以像Keras模型一样导出。
我不用编写太多代码就放弃了这种子类化方法。
将BoostedTrees模型拉出估算器
我不够聪明,无法使用低级原语自己安排BoostedTrees模型。 Estimator中进行设置的代码看起来相当复杂。很好地利用这项工作,但是似乎Estimator在model_fn
内完成交易,它们根据训练/预测/评估模式而变化,并且尚不清楚与Keras模型的关系是什么
为此我写了一些代码,但很快就放弃了。
下一步是什么?
鉴于上述死胡同,我应该进一步讲哪个角度?
low-level export API和低级模型构建API看起来都可以使我更接近解决方案。设置估算器与使用任一API重新创建估算器之间的差距似乎很大。
是否可以继续使用现有的Estimator,但使用低级导出API创建带有“解释”签名并调用experimental_predict_with_explanations
的内容?甚至一步一步就能“预测和解释”?哪个教程会让我走这条路?