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-yerINFO: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-yer3/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.75yer 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 |