Class BestExporter
Inherits From: Exporter
This class exports the serving graph and checkpoints of the best models.
This class performs a model export everytime the new model is better than any existing model.
__init__
__init__(
name='best_exporter',
serving_input_receiver_fn=None,
event_file_pattern='eval/*.tfevents.*',
compare_fn=_loss_smaller,
assets_extra=None,
as_text=False,
exports_to_keep=5
)
Create an Exporter
to use with tf.estimator.EvalSpec
.
Example of creating a BestExporter for training and evaluation:
def make_train_and_eval_fn():
# Set up feature columns.
categorical_feature_a = (
tf.feature_column.categorical_column_with_hash_bucket(...))
categorical_feature_a_emb = embedding_column(
categorical_column=categorical_feature_a, ...)
... # other feature columns
estimator = tf.estimator.DNNClassifier(
config=tf.estimator.RunConfig(
model_dir='/my_model', save_summary_steps=100),
feature_columns=[categorical_feature_a_emb, ...],
hidden_units=[1024, 512, 256])
serving_feature_spec = tf.feature_column.make_parse_example_spec(
categorical_feature_a_emb)
serving_input_receiver_fn = (
tf.estimator.export.build_parsing_serving_input_receiver_fn(
serving_feature_spec))
exporter = tf.estimator.BestExporter(
name="best_exporter",
serving_input_receiver_fn=serving_input_receiver_fn,
exports_to_keep=5)
train_spec = tf.estimator.TrainSpec(...)
eval_spec = [tf.estimator.EvalSpec(
input_fn=eval_input_fn,
steps=100,
exporters=exporter,
start_delay_secs=0,
throttle_secs=5)]
return tf.estimator.DistributedTrainingSpec(estimator, train_spec,
eval_spec)
Args:
name
: unique name of thisExporter
that is going to be used in the export path.serving_input_receiver_fn
: a function that takes no arguments and returns aServingInputReceiver
.event_file_pattern
: event file name pattern relative to model_dir. If None, however, the exporter would not be preemption-safe. To be preemption-safe, event_file_pattern must be specified.compare_fn
: a function that compares two evaluation results and returns true if current evaluation result is better. Follows the signature:- Args:
best_eval_result
: This is the evaluation result of the best model.current_eval_result
: This is the evaluation result of current candidate model.
- Returns: True if current evaluation result is better; otherwise, False.
- Args:
assets_extra
: An optional dict specifying how to populate the assets.extra directory within the exported SavedModel. Each key should give the destination path (including the filename) relative to the assets.extra directory. The corresponding value gives the full path of the source file to be copied. For example, the simple case of copying a single file without renaming it is specified as{'my_asset_file.txt': '/path/to/my_asset_file.txt'}
.as_text
: whether to write the SavedModel proto in text format. Defaults toFalse
.exports_to_keep
: Number of exports to keep. Older exports will be garbage-collected. Defaults to 5. Set toNone
to disable garbage collection.
Raises:
ValueError
: if any argument is invalid.
Properties
name
Directory name.
A directory name under the export base directory where exports of
this type are written. Should not be None
nor empty.
Methods
tf.estimator.BestExporter.export
export(
estimator,
export_path,
checkpoint_path,
eval_result,
is_the_final_export
)
Exports the given Estimator
to a specific format.
Args:
estimator
: theEstimator
to export.export_path
: A string containing a directory where to write the export.checkpoint_path
: The checkpoint path to export.eval_result
: The output ofEstimator.evaluate
on this checkpoint.is_the_final_export
: This boolean is True when this is an export in the end of training. It is False for the intermediate exports during the training. When passingExporter
totf.estimator.train_and_evaluate
is_the_final_export
is always False ifTrainSpec.max_steps
isNone
.
Returns:
The string path to the exported directory or None
if export is skipped.