Path: blob/master/site/zh-cn/guide/migrate/metrics_optimizers.ipynb
25118 views
Copyright 2021 The TensorFlow Authors.
在 TF1 中,tf.metrics
是所有指标函数的 API 命名空间。每个指标都是一个将 label
和 prediction
作为输入参数,并返回相应指标张量作为结果的函数。在 TF2 中,tf.keras.metrics
包含所有指标函数和对象。Metric
对象可以与 tf.keras.Model
和 tf.keras.layers.layer
一起使用来计算指标值。
安装
从几个必要的 TensorFlow 导入开始:
然后,准备一个用于演示的简单数据:
TF1:具有 Estimator 的 tf.compat.v1.metrics
在 TF1 中,指标可以作为 eval_metric_ops
添加到 EstimatorSpec
中,并且运算通过 tf.metrics
中定义的所有指标函数生成。可以按照示例了解如何使用 tf.metrics.accuracy
。
此外,可以通过 tf.estimator.add_metrics()
直接将指标添加到 Estimator 中。
TF2:具有 tf.keras.Model 的 Keras Metrics API
在 TF2 中,tf.keras.metrics
包含所有指标类和函数。它们以 OOP 风格设计,并与其他 tf.keras
API 紧密集成。所有指标都可以在 tf.keras.metrics
命名空间中找到,并且 tf.compat.v1.metrics
与 tf.keras.metrics
之间通常存在直接映射。
在以下示例中,指标添加到 model.compile()
方法中。用户只需要创建指标实例,无需指定标签和预测张量。Keras 模型会将模型输出和标签发送到指标对象。
启用 Eager Execution 后,tf.keras.metrics.Metric
实例可直接用于评估 numpy 数据或 Eager 张量。tf.keras.metrics.Metric
对象是有状态容器。指标值可以通过 metric.update_state(y_true, y_pred)
进行更新,结果可以通过 metrics.result()
进行检索。
有关 tf.keras.metrics.Metric
的更多详情,请查看 tf.keras.metrics.Metric
下的 API 文档以及迁移指南。
将 TF1.x 优化器迁移到 Keras 优化器
tf.compat.v1.train
中的优化器(如 Adam 优化器和梯度下降优化器)在 tf.keras.optimizers
中具有等效项。
下表总结了如何将这些旧版优化器转换为 Keras 等效项。除非需要额外的步骤(例如更新默认学习率),否则可以直接将 TF1.x 版本替换为 TF2 版本。
请注意,转换优化器可能会使旧的检查点不兼容。
TF1.x | TF2 | 额外步骤 |
---|---|---|
`tf.v1.train.GradientDescentOptimizer` | `tf.keras.optimizers.SGD` | 无 |
`tf.v1.train.MomentumOptimizer` | `tf.keras.optimizers.SGD` | 包含 `momentum` 参数 |
`tf.v1.train.AdamOptimizer` | `tf.keras.optimizers.Adam` | 将 `beta1` 和 `beta2` 参数重命名为 `beta_1` 和 `beta_2` |
`tf.v1.train.RMSPropOptimizer` | `tf.keras.optimizers.RMSprop` | 将 `decay` 参数重命名为 `rho` |
`tf.v1.train.AdadeltaOptimizer` | `tf.keras.optimizers.Adadelta` | 无 |
`tf.v1.train.AdagradOptimizer` | `tf.keras.optimizers.Adagrad` | 无 |
`tf.v1.train.FtrlOptimizer` | `tf.keras.optimizers.Ftrl` | 移除 `accum_name` 和 `linear_name` 参数 |
`tf.contrib.AdamaxOptimizer` | `tf.keras.optimizers.Adamax` | 将 `beta1` 和 `beta2` 参数重命名为 `beta_1` 和 `beta_2` |
`tf.contrib.Nadam` | `tf.keras.optimizers.Nadam` | 将 `beta1` 和 `beta2` 参数重命名为 `beta_1` 和 `beta_2` |
注:在 TF2 中,所有 ε(数值稳定性常数)现在默认为 1e-7
,而不是 1e-8
。在大多数用例中,这种差异可以忽略不计。