View source on GitHub |
Constructs an Estimator
instance from given keras model.
tf.keras.estimator.model_to_estimator(
keras_model=None,
keras_model_path=None,
custom_objects=None,
model_dir=None,
config=None,
checkpoint_format='checkpoint',
metric_names_map=None,
export_outputs=None
)
If you use infrastructure or other tooling that relies on Estimators, you can still build a Keras model and use model_to_estimator to convert the Keras model to an Estimator for use with downstream systems.
For usage example, please see: Creating estimators from Keras Models.
Sample Weights:
Estimators returned by model_to_estimator
are configured so that they can
handle sample weights (similar to keras_model.fit(x, y, sample_weights)
).
To pass sample weights when training or evaluating the Estimator, the first
item returned by the input function should be a dictionary with keys
features
and sample_weights
. Example below:
keras_model = tf.keras.Model(...)
keras_model.compile(...)
estimator = tf.keras.estimator.model_to_estimator(keras_model)
def input_fn():
return dataset_ops.Dataset.from_tensors(
({'features': features, 'sample_weights': sample_weights},
targets))
estimator.train(input_fn, steps=1)
Example with customized export signature:
inputs = {'a': tf.keras.Input(..., name='a'),
'b': tf.keras.Input(..., name='b')}
outputs = {'c': tf.keras.layers.Dense(..., name='c')(inputs['a']),
'd': tf.keras.layers.Dense(..., name='d')(inputs['b'])}
keras_model = tf.keras.Model(inputs, outputs)
keras_model.compile(...)
export_outputs = {'c': tf.estimator.export.RegressionOutput,
'd': tf.estimator.export.ClassificationOutput}
estimator = tf.keras.estimator.model_to_estimator(
keras_model, export_outputs=export_outputs)
def input_fn():
return dataset_ops.Dataset.from_tensors(
({'features': features, 'sample_weights': sample_weights},
targets))
estimator.train(input_fn, steps=1)
To customize the estimator eval_metric_ops
names, you can pass in the
metric_names_map
dictionary mapping the keras model output metric names
to the custom names as follows:
input_a = tf.keras.layers.Input(shape=(16,), name='input_a')
input_b = tf.keras.layers.Input(shape=(16,), name='input_b')
dense = tf.keras.layers.Dense(8, name='dense_1')
interm_a = dense(input_a)
interm_b = dense(input_b)
merged = tf.keras.layers.concatenate([interm_a, interm_b], name='merge')
output_a = tf.keras.layers.Dense(3, activation='softmax', name='dense_2')(
merged)
output_b = tf.keras.layers.Dense(2, activation='softmax', name='dense_3')(
merged)
keras_model = tf.keras.models.Model(
inputs=[input_a, input_b], outputs=[output_a, output_b])
keras_model.compile(
loss='categorical_crossentropy',
optimizer='rmsprop',
metrics={
'dense_2': 'categorical_accuracy',
'dense_3': 'categorical_accuracy'
})
metric_names_map = {
'dense_2_categorical_accuracy': 'acc_1',
'dense_3_categorical_accuracy': 'acc_2',
}
keras_est = tf.keras.estimator.model_to_estimator(
keras_model=keras_model,
config=config,
metric_names_map=metric_names_map)
Args | |
---|---|
keras_model
|
A compiled Keras model object. This argument is mutually
exclusive with keras_model_path . Estimator's model_fn uses the
structure of the model to clone the model. Defaults to None .
|
keras_model_path
|
Path to a compiled Keras model saved on disk, in HDF5
format, which can be generated with the save() method of a Keras
model. This argument is mutually exclusive with keras_model .
Defaults to None .
|
custom_objects
|
Dictionary for cloning customized objects. This is
used with classes that is not part of this pip package. For example, if
user maintains a relu6 class that inherits from
tf.keras.layers.Layer , then pass custom_objects={'relu6': relu6} .
Defaults to None .
|
model_dir
|
Directory to save Estimator model parameters, graph, summary
files for TensorBoard, etc. If unset a directory will be created with
tempfile.mkdtemp
|
config
|
RunConfig to config Estimator . Allows setting up things in
model_fn based on configuration such as num_ps_replicas , or
model_dir . If both config.model_dir and the
model_dir argument (above) are specified the model_dir argument
takes precedence. Defaults to None .
|
checkpoint_format
|
Sets the format of the checkpoint saved by the
estimator when training. May be saver or checkpoint , depending on
whether to save checkpoints from tf.compat.v1.train.Saver or
tf.train.Checkpoint . The default is checkpoint . Estimators use
name-based tf.train.Saver checkpoints, while Keras models use
object-based checkpoints from tf.train.Checkpoint . Currently, saving
object-based checkpoints from model_to_estimator is only supported by
Functional and Sequential models. Defaults to 'checkpoint'.
|
metric_names_map
|
Optional dictionary mapping Keras model output metric
names to custom names. This can be used to override the default Keras
model output metrics names in a multi IO model use case and provide
custom names for the eval_metric_ops in Estimator.
The Keras model metric names can be obtained using model.metrics_names
excluding any loss metrics such as total loss and output losses.
For example, if your Keras model has two outputs out_1 and out_2 ,
with mse loss and acc metric, then model.metrics_names will be
['loss', 'out_1_loss', 'out_2_loss', 'out_1_acc', 'out_2_acc'] .
The model metric names excluding the loss metrics will be
['out_1_acc', 'out_2_acc'] .
|
export_outputs
|
Optional dictionary. This can be used to override the
default Keras model output exports in a multi IO model use case and
provide custom names for the export_outputs in
tf.estimator.EstimatorSpec . Default is None, which is equivalent to
{'serving_default': tf.estimator.export.PredictOutput }. If not None,
the keys must match the keys of model.output_names .
A dict {name: output} where:
|
Returns | |
---|---|
An Estimator from given keras model. |