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