我有一个colab和一个非常简单的演示^{
三个^{TRAIN
,EVAL
,和PREDICT
)中的每一个都返回一个^{
根据docs:
__new__(
cls,
mode,
predictions=None, # required by PREDICT
loss=None, # required by TRAIN and EVAL
train_op=None, # required by TRAIN
eval_metric_ops=None,
export_outputs=None,
training_chief_hooks=None,
training_hooks=None,
scaffold=None,
evaluation_hooks=None,
prediction_hooks=None.
)
在这些命名参数中,我想提请注意predictions
和{
predictions
: Predictions Tensor or dict of Tensor.export_outputs
: Describes the output signatures to be exported toSavedModel
and used during serving. A dict{name: output}
where:
name
: An arbitrary name for this output.output
: anExportOutput
object such asClassificationOutput
,RegressionOutput
, orPredictOutput
. Single-headed models only need to specify one entry in this dictionary. Multi-headed models should specify one entry for each head, one of which must be named usingsignature_constants.DEFAULT_SERVING_SIGNATURE_DEF_KEY
. If no entry is provided, a defaultPredictOutput
mapping to predictions will be created.
因此,我为什么要提出export_outputs
;也就是说,因为人们很可能希望使用他们在将来训练的模型(通过从SavedModel
加载它)。在
为了使这个问题更容易理解/澄清:
“单头”模型是人们遇到的最常见的模型,其中input_fn
features
被转换成单数(批处理)output
“多头”模型是指有多个输出的模型
例如,这个多头模型的input_fn
(根据^{(features, labels)
,即这个模型有两个头部)。在
如何指定signature_constants.DEFAULT_SERVING_SIGNATURE_DEF_KEY
是这个问题的核心。也就是说,一个人如何指定它?(例如,应该是dict {signature_constants.DEFAULT_SERVING_SIGNATURE_DEF_KEY: head}
)
对,所以在colab中,您可以看到我们的模型的export_outputs
实际上是以多个头部的方式定义的(尽管它不应该是):
{21}来自cd21}:
def model_fn(...):
# ...
# send the features through the graph
MODEL = build_fn(MODEL)
# prediction
MODEL['predictions'] = {'labels': MODEL['net_logits']} # <--- net_logits added in the build_fn
MODEL['export_outputs'] = {
k: tf.estimator.export.PredictOutput(v) for k, v in MODEL['predictions'].items()
}
# ...
在这个特定的例子中,如果我们扩展字典的理解,我们得到的功能等价物是:
MODEL['export_outputs'] = {
'labels': tf.estimator.export.PredictOutput(MODEL['net_logits'])
}
在这个例子中,我们的字典只有一个键,因此有一个^{model_fn
只有一个头,格式更合适:
MODEL['export_outputs'] = {
'predictions': tf.estimator.export.PredictOutput(MODEL['predictions'])
}
正如它在^{
__init__(outputs)
在哪里
outputs
:表示预测的张量或字符串到张量的dict。在因此,我的问题如下:
谢谢你的详细问题,你显然已经深挖了。在
还有一些类用于RegressionOutput和ClassificationOutput,它们不能是字典。使用导出输出dict可以对这些用例进行概括。
默认情况下,您希望从保存的模型中接收服务的头部应使用默认的签名密钥。例如:
相关问题 更多 >
编程相关推荐