Metrikleri ve optimize edicileri taşıyın

TensorFlow.org'da görüntüleyin Google Colab'da çalıştırın Kaynağı GitHub'da görüntüleyin Not defterini indir

TF1'de tf.metrics , tüm metrik işlevleri için API ad alanıdır. Metriklerin her biri, girdi parametreleri olarak label ve prediction alan ve sonuç olarak ilgili metrik tensörünü döndüren bir fonksiyondur. tf.keras.metrics tüm metrik fonksiyonlarını ve nesnelerini içerir. Metric nesnesi, metrik değerleri hesaplamak için tf.keras.Model ve tf.keras.layers.layer ile birlikte kullanılabilir.

Kurmak

Birkaç gerekli TensorFlow içe aktarmasıyla başlayalım,

import tensorflow as tf
import tensorflow.compat.v1 as tf1

ve gösteri için bazı basit veriler hazırlayı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: Tahmin Edici ile tf.compat.v1.metrics

TF1'de metrikler, eval_metric_ops olarak EstimatorSpec eklenebilir ve op, tf.metrics içinde tanımlanan tüm metrik işlevleri aracılığıyla oluşturulur. tf.metrics.accuracy nasıl kullanılacağını görmek için örneği takip edebilirsiniz.

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>
yer tutucu4 l10n-yer
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}

Ayrıca, metrikler doğrudan tahmin tf.estimator.add_metrics() yoluyla eklenebilir.

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)
tutucu7 l10n-yer
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: tf.keras.Model ile Keras Metrics API

tf.keras.metrics , tüm metrik sınıflarını ve işlevlerini içerir. OOP tarzında tasarlanmışlardır ve diğer tf.keras API'leriyle yakından bütünleşirler. Tüm metrikler tf.keras.metrics ad alanında bulunabilir ve genellikle tf.compat.v1.metrics ile tf.keras.metrics arasında doğrudan bir eşleme vardır.

Aşağıdaki örnekte, metrikler model.compile() yöntemine eklenir. Kullanıcıların, etiket ve tahmin tensörünü belirtmeden yalnızca metrik örneği oluşturması gerekir. Keras modeli, model çıktısını ve etiketini metrik nesnesine yönlendirecektir.

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)
-yer tutucu10 l10n-yer
3/3 [==============================] - 0s 2ms/step - loss: 0.3333 - accuracy: 0.6667
{'loss': 0.3333333432674408, 'accuracy': 0.6666666865348816}

İstekli yürütme etkinleştirildiğinde, tf.keras.metrics.Metric örnekleri, numpy verilerini veya istekli tensörleri değerlendirmek için doğrudan kullanılabilir. tf.keras.metrics.Metric nesneleri durum bilgisi olan kapsayıcılardır. Metrik değeri metric.update_state(y_true, y_pred) aracılığıyla güncellenebilir ve sonuç metrics.result() tarafından alınabilir.

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
yer tutucu13 l10n-yer
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

tf.keras.metrics.Metric hakkında daha fazla ayrıntı için lütfen tf.keras.metrics.Metric adresindeki API belgelerine ve geçiş kılavuzuna bakın.

TF1.x optimize edicilerini Keras optimize edicilerine taşıyın

Adam optimize edici ve gradyan iniş iyileştirici gibi tf.compat.v1.train içindeki optimize tf.keras.optimizers eşdeğerleri vardır.

Aşağıdaki tablo, bu eski optimize edicileri Keras eşdeğerlerine nasıl dönüştürebileceğinizi özetlemektedir. Ek adımlar ( varsayılan öğrenme oranını güncelleme gibi) gerekmedikçe, TF1.x sürümünü doğrudan TF2 sürümüyle değiştirebilirsiniz.

Optimize edicilerinizi dönüştürmenin eski kontrol noktalarını uyumsuz hale getirebileceğini unutmayın.

TF1.x TF2 Ek adımlar
`tf.v1.train.GradientDescentOptimizer` tf.keras.optimizers.SGD Hiçbiri
`tf.v1.train.MomentumOptimizer` tf.keras.optimizers.SGD "Momentum" argümanını dahil et
`tf.v1.train.AdamOptimizer` tf.keras.optimizers.Adam "beta1" ve "beta2" bağımsız değişkenlerini "beta_1" ve "beta_2" olarak yeniden adlandırın
`tf.v1.train.RMSPropOptimizer` tf.keras.optimizers.RMSprop "decay" argümanını "rho" olarak yeniden adlandırın
`tf.v1.train.AdadeltaOptimizer` tf.keras.optimizers.Adadelta Hiçbiri
`tf.v1.train.AdagradOptimizer` tf.keras.optimizers.Adagrad Hiçbiri
`tf.v1.train.FtrlOptimizer` tf.keras.optimizers.Ftrl 'accum_name' ve 'linear_name' bağımsız değişkenlerini kaldırın
`tf.contrib.AdamaxOptimizer` tf.keras.optimizers.Adamax "beta1" ve "beta2" bağımsız değişkenlerini "beta_1" ve "beta_2" olarak yeniden adlandırın
"tf.contrib.Nadam" tf.keras.optimizers.Nadam "beta1" ve "beta2" bağımsız değişkenlerini "beta_1" ve "beta_2" olarak yeniden adlandırın