不同种类的TensorFlow SignatureDef的目的是什么?

时间:2018-12-03 22:14:28

标签: python tensorflow tensorflow-serving

Predict SignatureDef似乎包含了分类和回归SignatureDefs的所有功能。什么时候使用分类或回归SignatureDefs而不是仅对所有内容使用Predict会有优势?我们正在寻求在生产环境中降低复杂性,如果在所有情况下都可以仅使用Predict SignatureDef,那似乎是个好主意。

2 个答案:

答案 0 :(得分:1)

根据我在文档(https://www.tensorflow.org/serving/signature_defs上看到的内容,似乎“分类”和“回归” SigDefs试图为简单情况(分类和回归)强制使用简单且一致的界面, 分别是“输入”->“类+分数”和“输入”->“输出”。似乎还有一个额外的好处,即“分类”和“回归” SigDef不需要将服务功能构造为模型导出功能的一部分。

从文档中也可以看出,Predict SigDef似乎允许使用更通用的接口,并具有可以互换模型的优点。从文档中:

  

预测SignatureDefs可实现跨模型的可移植性。这表示   您可以交换不同的SavedModels,可能使用不同的   基本的Tensor名称(例如,代替x:0,也许您有了一个新的   Tensor z:0的备用模型),而您的客户可以保持在线状态   连续查询该模型的旧版本和新版本,而无需   客户端更改。

     

Predict SignatureDefs还允许您添加可选的其他   您可以显式查询的输出张量。比方说   除了分数下方的输出键,您还想   提取池层用于调试或其他目的。

但是 除了不需要导出服务功能的次要好处外,文档没有解释,为什么自从开始以来,为什么不将Predict SigDef用于所有功能它似乎是一个有很多上升空间的超集。我希望看到一个明确的答案,因为专用功能(分类,回归)的好处似乎很小。

答案 1 :(得分:0)

到目前为止,我看到的差异是...

1)如果在DNNClassifier模型中利用tf.feature_column.indicator_column包装tf.feature_column.categorical_column_with_vocabulary_ *,则当您查询tensorflow server时,我的Predict API有时会出现问题根据词汇文件/列表解析/映射字符串输入。另一方面,Classify API将字符串正确映射到词汇表上的索引(categorical_column),然后映射到单热点/多热点(indicator_column),并提供(似乎是)正确的分类响应。查询。

2)分类API的响应格式为[[class,score],[class,score],....],而Predict API的响应格式为[class [],score []]。如果您以后需要以某种方式解析数据,则最好选择其中一个。

TLDR;在将indicator_column包装在categorical_column_with_vocabulary_ *中之后,在与Predict API一起使用时,我遇到了词汇映射方面的问题。因此,使用Classify API。