- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个 colab用一个非常简单的演示 Estimator
为了学习/理解 Estimator
API 的目标是为即插即用模型制定一个约定,其中包含有用的交易技巧(例如,如果验证集停止改进、导出模型等,则提前停止)。
三个中的每一个 Estimator
模式(TRAIN
、EVAL
和PREDICT
)返回 EstimatorSpec
.
根据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
和 export_outputs
,它们在 docs 中进行了描述作为:
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
(根据 Estimator
api)返回一个元组 (features, labels)
即这个模型有两个头)。
def input_fn():
features = ...
labels1 = ...
labels2 = ...
return features, {'head1': labels1, 'head2': labels2}
如何指定signature_constants.DEFAULT_SERVING_SIGNATURE_DEF_KEY
是这个问题的核心。即,如何指定它? (例如,它应该是一个字典 {signature_constants.DEFAULT_SERVING_SIGNATURE_DEF_KEY: head}
)
对,所以在 colab你看到我们的模型的 export_outputs
实际上是以多头的方式定义的(虽然它不应该是):
来自 colab 的 estimator functions > model_fn
:
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'])
}
它在这种情况下有效,因为我们的字典有一个键,因此有一个 PredictOutput
, 在 colab 中我们的 model_fn
只有一个头,格式更合适:
MODEL['export_outputs'] = {
'predictions': tf.estimator.export.PredictOutput(MODEL['predictions'])
}
如 PredictOutput
中所述:
__init__(outputs)
在哪里
outputs
:表示预测的 Tensor 或字符串字典。因此我的问题如下:
如果 PredictOutput
可以是一本字典,什么时候/为什么需要多个 PredictOutput
s 作为 EstimatorSpec
的 export_outputs
?
如果有一个多头模型(比如有多个 PredictOutput
s)如何实际指定 signature_constants.DEFAULT_SERVING_SIGNATURE_DEF_KEY
predictions
在 EstimatorSpec
中有什么意义?当它在 export_outputs
中也是“必需的”(对于任何关心使用 SavedModel
的人)时?
最佳答案
感谢您的详细问题;你显然在这里挖得很深。
还有 RegressionOutput 和 ClassificationOutput 类不能是字典。使用 export_outputs 字典可以对这些用例进行概括。
您希望从保存的模型中默认提供服务的头部应该采用默认签名 key 。例如:
export_outputs = {
signature_constants.DEFAULT_SERVING_SIGNATURE_DEF_KEY:
PredictOutput(outputs={'some_output_1': output_1}),
'head-2': PredictOutput(outputs={'some_output_2': output_2}),
'head-3': PredictOutput(outputs={'some_output_3': output_3})
}
关于python - TensorFlow ExportOutputs、PredictOuput 并指定 signature_constants.DEFAULT_SERVING_SIGNATURE_DEF_KEY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53414168/
上下文 我有一个 colab用一个非常简单的演示 Estimator为了学习/理解 Estimator API 的目标是为即插即用模型制定一个约定,其中包含有用的交易技巧(例如,如果验证集停止改进、导
我是一名优秀的程序员,十分优秀!