Xem trên TensorFlow.org | Chạy trong Google Colab | Xem nguồn trên GitHub | Tải xuống sổ ghi chép |
Trong TF1, tf.metrics
là không gian tên API cho tất cả các hàm số liệu. Mỗi chỉ số là một hàm lấy label
và prediction
làm tham số đầu vào và trả về kết quả là tensor chỉ số tương ứng. Trong TF2, tf.keras.metrics
chứa tất cả các chức năng và đối tượng số liệu. Đối tượng Metric
có thể được sử dụng với tf.keras.Model
và tf.keras.layers.layer
để tính toán các giá trị của chỉ số.
Thành lập
Hãy bắt đầu với một số lần nhập TensorFlow cần thiết,
import tensorflow as tf
import tensorflow.compat.v1 as tf1
và chuẩn bị một số dữ liệu đơn giản để trình diễn:
features = [[1., 1.5], [2., 2.5], [3., 3.5]]
labels = [0, 0, 1]
eval_features = [[4., 4.5], [5., 5.5], [6., 6.5]]
eval_labels = [0, 1, 1]
TF1: tf.compat.v1.metrics với Công cụ ước tính
Trong TF1, các số liệu có thể được thêm vào EstimatorSpec
dưới dạng eval_metric_ops
và op được tạo thông qua tất cả các hàm số liệu được xác định trong tf.metrics
. Bạn có thể làm theo ví dụ để biết cách sử dụng tf.metrics.accuracy
.
def _input_fn():
return tf1.data.Dataset.from_tensor_slices((features, labels)).batch(1)
def _eval_input_fn():
return tf1.data.Dataset.from_tensor_slices(
(eval_features, eval_labels)).batch(1)
def _model_fn(features, labels, mode):
logits = tf1.layers.Dense(2)(features)
predictions = tf.argmax(input=logits, axis=1)
loss = tf1.nn.sparse_softmax_cross_entropy_with_logits(labels=labels, logits=logits)
optimizer = tf1.train.AdagradOptimizer(0.05)
train_op = optimizer.minimize(loss, global_step=tf1.train.get_global_step())
accuracy = tf1.metrics.accuracy(labels=labels, predictions=predictions)
return tf1.estimator.EstimatorSpec(mode,
predictions=predictions,
loss=loss,
train_op=train_op,
eval_metric_ops={'accuracy': accuracy})
estimator = tf1.estimator.Estimator(model_fn=_model_fn)
estimator.train(_input_fn)
INFO:tensorflow:Using default config. WARNING:tensorflow:Using temporary folder as model directory: /tmp/tmpnfk2kv3b INFO:tensorflow:Using config: {'_model_dir': '/tmp/tmpnfk2kv3b', '_tf_random_seed': None, '_save_summary_steps': 100, '_save_checkpoints_steps': None, '_save_checkpoints_secs': 600, '_session_config': allow_soft_placement: true graph_options { rewrite_options { meta_optimizer_iterations: ONE } } , '_keep_checkpoint_max': 5, '_keep_checkpoint_every_n_hours': 10000, '_log_step_count_steps': 100, '_train_distribute': None, '_device_fn': None, '_protocol': None, '_eval_distribute': None, '_experimental_distribute': None, '_experimental_max_worker_delay_secs': None, '_session_creation_timeout_secs': 7200, '_checkpoint_save_graph_def': True, '_service': None, '_cluster_spec': ClusterSpec({}), '_task_type': 'worker', '_task_id': 0, '_global_id_in_cluster': 0, '_master': '', '_evaluation_master': '', '_is_chief': True, '_num_ps_replicas': 0, '_num_worker_replicas': 1} WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.7/site-packages/tensorflow/python/training/training_util.py:401: Variable.initialized_value (from tensorflow.python.ops.variables) is deprecated and will be removed in a future version. Instructions for updating: Use Variable.read_value. Variables in 2.X are initialized automatically both in eager and graph (inside tf.defun) contexts. INFO:tensorflow:Calling model_fn. WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.7/site-packages/tensorflow/python/training/adagrad.py:143: calling Constant.__init__ (from tensorflow.python.ops.init_ops) with dtype is deprecated and will be removed in a future version. Instructions for updating: Call initializer instance with the dtype argument instead of passing it to the constructor INFO:tensorflow:Done calling model_fn. INFO:tensorflow:Create CheckpointSaverHook. INFO:tensorflow:Graph was finalized. INFO:tensorflow:Running local_init_op. INFO:tensorflow:Done running local_init_op. INFO:tensorflow:Calling checkpoint listeners before saving checkpoint 0... INFO:tensorflow:Saving checkpoints for 0 into /tmp/tmpnfk2kv3b/model.ckpt. INFO:tensorflow:Calling checkpoint listeners after saving checkpoint 0... INFO:tensorflow:loss = 1.0451624, step = 0 INFO:tensorflow:Calling checkpoint listeners before saving checkpoint 3... INFO:tensorflow:Saving checkpoints for 3 into /tmp/tmpnfk2kv3b/model.ckpt. INFO:tensorflow:Calling checkpoint listeners after saving checkpoint 3... INFO:tensorflow:Loss for final step: 0.54487616. <tensorflow_estimator.python.estimator.estimator.Estimator at 0x7f894c163990>
estimator.evaluate(_eval_input_fn)
INFO:tensorflow:Calling model_fn. INFO:tensorflow:Done calling model_fn. INFO:tensorflow:Starting evaluation at 2021-11-19T02:25:11 INFO:tensorflow:Graph was finalized. INFO:tensorflow:Restoring parameters from /tmp/tmpnfk2kv3b/model.ckpt-3 INFO:tensorflow:Running local_init_op. INFO:tensorflow:Done running local_init_op. INFO:tensorflow:Inference Time : 0.14330s INFO:tensorflow:Finished evaluation at 2021-11-19-02:25:11 INFO:tensorflow:Saving dict for global step 3: accuracy = 0.6666667, global_step = 3, loss = 0.588699 INFO:tensorflow:Saving 'checkpoint_path' summary for global step 3: /tmp/tmpnfk2kv3b/model.ckpt-3 {'accuracy': 0.6666667, 'loss': 0.588699, 'global_step': 3}
Ngoài ra, các chỉ số có thể được thêm trực tiếp vào công cụ ước tính thông qua tf.estimator.add_metrics()
.
def mean_squared_error(labels, predictions):
labels = tf.cast(labels, predictions.dtype)
return {"mean_squared_error":
tf1.metrics.mean_squared_error(labels=labels, predictions=predictions)}
estimator = tf1.estimator.add_metrics(estimator, mean_squared_error)
estimator.evaluate(_eval_input_fn)
INFO:tensorflow:Using config: {'_model_dir': '/tmp/tmpnfk2kv3b', '_tf_random_seed': None, '_save_summary_steps': 100, '_save_checkpoints_steps': None, '_save_checkpoints_secs': 600, '_session_config': allow_soft_placement: true graph_options { rewrite_options { meta_optimizer_iterations: ONE } } , '_keep_checkpoint_max': 5, '_keep_checkpoint_every_n_hours': 10000, '_log_step_count_steps': 100, '_train_distribute': None, '_device_fn': None, '_protocol': None, '_eval_distribute': None, '_experimental_distribute': None, '_experimental_max_worker_delay_secs': None, '_session_creation_timeout_secs': 7200, '_checkpoint_save_graph_def': True, '_service': None, '_cluster_spec': ClusterSpec({}), '_task_type': 'worker', '_task_id': 0, '_global_id_in_cluster': 0, '_master': '', '_evaluation_master': '', '_is_chief': True, '_num_ps_replicas': 0, '_num_worker_replicas': 1} INFO:tensorflow:Calling model_fn. INFO:tensorflow:Calling model_fn. INFO:tensorflow:Done calling model_fn. INFO:tensorflow:Done calling model_fn. INFO:tensorflow:Starting evaluation at 2021-11-19T02:25:12 INFO:tensorflow:Graph was finalized. INFO:tensorflow:Restoring parameters from /tmp/tmpnfk2kv3b/model.ckpt-3 INFO:tensorflow:Running local_init_op. INFO:tensorflow:Done running local_init_op. INFO:tensorflow:Inference Time : 0.14966s INFO:tensorflow:Finished evaluation at 2021-11-19-02:25:12 INFO:tensorflow:Saving dict for global step 3: accuracy = 0.6666667, global_step = 3, loss = 0.588699, mean_squared_error = 0.33333334 INFO:tensorflow:Saving 'checkpoint_path' summary for global step 3: /tmp/tmpnfk2kv3b/model.ckpt-3 {'accuracy': 0.6666667, 'loss': 0.588699, 'mean_squared_error': 0.33333334, 'global_step': 3}
TF2: Keras Metrics API với tf.keras.Model
Trong TF2, tf.keras.metrics
chứa tất cả các lớp và hàm số liệu. Chúng được thiết kế theo phong cách OOP và tích hợp chặt chẽ với API tf.keras
khác. Tất cả các số liệu có thể được tìm thấy trong không gian tên tf.keras.metrics
và thường có ánh xạ trực tiếp giữa tf.compat.v1.metrics
với tf.keras.metrics
.
Trong ví dụ sau, các chỉ số được thêm vào trong phương thức model.compile()
. Người dùng chỉ cần tạo phiên bản số liệu mà không cần chỉ định nhãn và bộ căng dự đoán. Mô hình Keras sẽ định tuyến đầu ra và nhãn của mô hình tới đối tượng số liệu.
dataset = tf.data.Dataset.from_tensor_slices((features, labels)).batch(1)
eval_dataset = tf.data.Dataset.from_tensor_slices(
(eval_features, eval_labels)).batch(1)
inputs = tf.keras.Input((2,))
logits = tf.keras.layers.Dense(2)(inputs)
predictions = tf.argmax(input=logits, axis=1)
model = tf.keras.models.Model(inputs, predictions)
optimizer = tf.keras.optimizers.Adagrad(learning_rate=0.05)
model.compile(optimizer, loss='mse', metrics=[tf.keras.metrics.Accuracy()])
model.evaluate(eval_dataset, return_dict=True)
3/3 [==============================] - 0s 2ms/step - loss: 0.3333 - accuracy: 0.6667 {'loss': 0.3333333432674408, 'accuracy': 0.6666666865348816}
Với việc kích hoạt thực thi háo hức, các thể hiện tf.keras.metrics.Metric
có thể được sử dụng trực tiếp để đánh giá dữ liệu thô hoặc căng thẳng háo hức. các đối tượng tf.keras.metrics.Metric
là các vùng chứa trạng thái. Giá trị chỉ số có thể được cập nhật qua metric.update_state(y_true, y_pred)
và kết quả có thể được truy xuất bằng metrics.result()
.
accuracy = tf.keras.metrics.Accuracy()
accuracy.update_state(y_true=[0, 0, 1, 1], y_pred=[0, 0, 0, 1])
accuracy.result().numpy()
0.75
accuracy.update_state(y_true=[0, 0, 1, 1], y_pred=[0, 0, 0, 0])
accuracy.update_state(y_true=[0, 0, 1, 1], y_pred=[1, 1, 0, 0])
accuracy.result().numpy()
0.41666666
Để biết thêm chi tiết về tf.keras.metrics.Metric
, vui lòng xem tài liệu API tại tf.keras.metrics.Metric
, cũng như hướng dẫn di chuyển .
Di chuyển trình tối ưu hóa TF1.x sang trình tối ưu hóa Keras
Các trình tối ưu hóa trong tf.compat.v1.train
, chẳng hạn như trình tối ưu hóa Adam và trình tối ưu hóa gradient , có các tính năng tương đương trong tf.keras.optimizers
.
Bảng dưới đây tóm tắt cách bạn có thể chuyển đổi các trình tối ưu hóa kế thừa này thành các trình tối ưu hóa Keras tương đương của chúng. Bạn có thể thay thế trực tiếp phiên bản TF1.x bằng phiên bản TF2 trừ khi cần có các bước bổ sung (chẳng hạn như cập nhật tốc độ học mặc định ).
Lưu ý rằng việc chuyển đổi các trình tối ưu hóa của bạn có thể làm cho các điểm kiểm tra cũ không tương thích .
TF1.x | TF2 | Các bước bổ sung |
---|---|---|
`tf.v1.train.GradientDescentOptimizer` | tf.keras.optimizers.SGD | Không có |
`tf.v1.train.MomentumOptimizer` | tf.keras.optimizers.SGD | Bao gồm đối số `động lượng` |
`tf.v1.train.AdamOptimizer` | tf.keras.optimizers.Adam | Đổi tên các đối số `beta1` và` beta2` thành `beta_1` và` beta_2` |
`tf.v1.train.RMSPropOptimizer` | tf.keras.optimizers.RMSprop | Đổi tên đối số `phân rã` thành` rho` |
`tf.v1.train.AdadeltaOptimizer` | tf.keras.optimizers.Adadelta | Không có |
`tf.v1.train.AdagradOptimizer` | tf.keras.optimizers.Adagrad | Không có |
`tf.v1.train.FtrlOptimizer` | tf.keras.optimizers.Ftrl | Loại bỏ các đối số `Accu_name` và` linear_name` |
`tf.contrib.AdamaxOptimizer` | tf.keras.optimizers.Adamax | Đổi tên các đối số `beta1` và` beta2` thành `beta_1` và` beta_2` |
`tf.contrib.Nadam` | tf.keras.optimizers.Nadam | Đổi tên các đối số `beta1` và` beta2` thành `beta_1` và` beta_2` |