Tahmin Aracından Keras API'lerine Geçiş

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

Bu kılavuz, TensorFlow 1'in tf.estimator.Estimator API'lerinden TensorFlow 2'nin tf.keras API'lerine nasıl geçiş yapılacağını gösterir. İlk olarak, tf.estimator.Estimator ile eğitim ve değerlendirme için temel bir model kuracak ve çalıştıracaksınız. Ardından TensorFlow 2'deki eşdeğer adımları tf.keras API'leri ile gerçekleştireceksiniz. Ayrıca, tf.keras.Model alt sınıfını oluşturarak ve tf.keras.Model kullanarak eğitim adımını nasıl özelleştireceğinizi tf.GradientTape .

  • TensorFlow 1'de, üst düzey tf.estimator.Estimator API'leri, bir modeli eğitmenize ve değerlendirmenize, ayrıca çıkarım yapmanıza ve modelinizi kaydetmenize (sunma için) izin verir.
  • TensorFlow 2'de, model oluşturma , gradyan uygulaması, eğitim , değerlendirme ve tahmin gibi yukarıda belirtilen görevleri gerçekleştirmek için Keras API'lerini kullanın.

(Model/kontrol noktası kaydetme iş akışlarını TensorFlow 2'ye geçirmek için SavedModel ve Checkpoint geçiş kılavuzlarına bakın.)

Kurmak

İçe aktarma ve basit bir veri kümesiyle başlayın:

import tensorflow as tf
import tensorflow.compat.v1 as tf1
tutucu1 l10n-yer
features = [[1., 1.5], [2., 2.5], [3., 3.5]]
labels = [[0.3], [0.5], [0.7]]
eval_features = [[4., 4.5], [5., 5.5], [6., 6.5]]
eval_labels = [[0.8], [0.9], [1.]]

TensorFlow 1: tf.estimator.Estimator ile eğitin ve değerlendirin

Bu örnek, tf.estimator.Estimator 1'de tf.estimator.Estimator ile eğitim ve değerlendirmenin nasıl gerçekleştirileceğini gösterir.

Birkaç işlev tanımlayarak başlayın: eğitim verileri için bir giriş işlevi, değerlendirme verileri için bir değerlendirme giriş işlevi ve Estimator eğitim işleminin özellikler ve etiketlerle nasıl tanımlandığını söyleyen bir model işlevi:

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(1)(features)
  loss = tf1.losses.mean_squared_error(labels=labels, predictions=logits)
  optimizer = tf1.train.AdagradOptimizer(0.05)
  train_op = optimizer.minimize(loss, global_step=tf1.train.get_global_step())
  return tf1.estimator.EstimatorSpec(mode, loss=loss, train_op=train_op)

Estimator somutlaştırın ve modeli eğitin:

estimator = tf1.estimator.Estimator(model_fn=_model_fn)
estimator.train(_input_fn)
tutucu4 l10n-yer
INFO:tensorflow:Using default config.
WARNING:tensorflow:Using temporary folder as model directory: /tmp/tmpeovq622_
INFO:tensorflow:Using config: {'_model_dir': '/tmp/tmpeovq622_', '_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:236: 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:77: 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/tmpeovq622_/model.ckpt.
INFO:tensorflow:Calling checkpoint listeners after saving checkpoint 0...
INFO:tensorflow:loss = 2.0834494, step = 0
INFO:tensorflow:Calling checkpoint listeners before saving checkpoint 3...
INFO:tensorflow:Saving checkpoints for 3 into /tmp/tmpeovq622_/model.ckpt.
INFO:tensorflow:Calling checkpoint listeners after saving checkpoint 3...
INFO:tensorflow:Loss for final step: 9.88002.
<tensorflow_estimator.python.estimator.estimator.Estimator at 0x7fbd06673350>

Programı değerlendirme seti ile değerlendirin:

estimator.evaluate(_eval_input_fn)
tutucu6 l10n-yer
INFO:tensorflow:Calling model_fn.
INFO:tensorflow:Done calling model_fn.
INFO:tensorflow:Starting evaluation at 2021-10-26T01:32:58
INFO:tensorflow:Graph was finalized.
INFO:tensorflow:Restoring parameters from /tmp/tmpeovq622_/model.ckpt-3
INFO:tensorflow:Running local_init_op.
INFO:tensorflow:Done running local_init_op.
INFO:tensorflow:Inference Time : 0.10194s
INFO:tensorflow:Finished evaluation at 2021-10-26-01:32:58
INFO:tensorflow:Saving dict for global step 3: global_step = 3, loss = 20.543152
INFO:tensorflow:Saving 'checkpoint_path' summary for global step 3: /tmp/tmpeovq622_/model.ckpt-3
{'loss': 20.543152, 'global_step': 3}

TensorFlow 2: Yerleşik Keras yöntemleriyle eğitin ve değerlendirin

Bu örnek, TensorFlow 2'de Keras Model.fit ve Model.evaluate ile eğitim ve değerlendirmenin nasıl gerçekleştirileceğini gösterir. (Yerleşik yöntemler kılavuzuyla Eğitim ve değerlendirme bölümünde daha fazla bilgi edinebilirsiniz.)

  • tf.data.Dataset API'leri ile veri kümesi ardışık düzenini hazırlayarak başlayın.
  • Bir doğrusal ( tf.keras.layers.Dense ) katmana sahip basit bir Keras Sıralı modeli tanımlayın.
  • Bir Adagrad iyileştiricisi örneği oluşturun ( tf.keras.optimizers.Adagrad ).
  • optimizer edici değişkeni ve ortalama kare hatası ( "mse" ) kaybını Model.compile geçirerek modeli eğitim için yapılandırın.
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)

model = tf.keras.models.Sequential([tf.keras.layers.Dense(1)])
optimizer = tf.keras.optimizers.Adagrad(learning_rate=0.05)

model.compile(optimizer=optimizer, loss="mse")

Bununla, Model.fit arayarak modeli eğitmeye hazırsınız:

model.fit(dataset)
tutucu9 l10n-yer
3/3 [==============================] - 0s 2ms/step - loss: 0.2785
<keras.callbacks.History at 0x7fbc4b320350>

Son olarak, Model.evaluate ile modeli değerlendirin:

model.evaluate(eval_dataset, return_dict=True)
tutucu11 l10n-yer
3/3 [==============================] - 0s 1ms/step - loss: 0.0451
{'loss': 0.04510306194424629}

TensorFlow 2: Özel bir eğitim adımı ve yerleşik Keras yöntemleriyle eğitin ve değerlendirin

TensorFlow 2'de, tf.keras.callbacks.Callback ve tf.distribute.Strategy gibi yerleşik eğitim desteğinden yararlanmaya devam ederken ileri ve geri geçişler gerçekleştirmek için tf.GradientTape ile kendi özel eğitim adımı işlevinizi de yazabilirsiniz. tf.distribute.Strategy . ( Model.fit'te olanları Özelleştirme ve Sıfırdan özel eğitim döngüleri yazma konusunda daha fazla bilgi edinin.)

Bu örnekte, Model.train_step öğesini geçersiz kılan tf.keras.Sequential öğesini alt sınıflandırarak özel bir tf.keras.Model oluşturarak Model.train_step . ( tf.keras.Model alt sınıflandırması hakkında daha fazla bilgi edinin). Bu sınıfın içinde, her veri grubu için bir eğitim adımı sırasında bir ileri geçiş ve geri geçiş gerçekleştiren özel bir train_step işlevi tanımlayın.

class CustomModel(tf.keras.Sequential):
  """A custom sequential model that overrides `Model.train_step`."""

  def train_step(self, data):
    batch_data, labels = data

    with tf.GradientTape() as tape:
      predictions = self(batch_data, training=True)
      # Compute the loss value (the loss function is configured
      # in `Model.compile`).
      loss = self.compiled_loss(labels, predictions)

    # Compute the gradients of the parameters with respect to the loss.
    gradients = tape.gradient(loss, self.trainable_variables)
    # Perform gradient descent by updating the weights/parameters.
    self.optimizer.apply_gradients(zip(gradients, self.trainable_variables))
    # Update the metrics (includes the metric that tracks the loss).
    self.compiled_metrics.update_state(labels, predictions)
    # Return a dict mapping metric names to the current values.
    return {m.name: m.result() for m in self.metrics}

Sonra, daha önce olduğu gibi:

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)

model = CustomModel([tf.keras.layers.Dense(1)])
optimizer = tf.keras.optimizers.Adagrad(learning_rate=0.05)

model.compile(optimizer=optimizer, loss="mse")

Modeli eğitmek için Model.fit arayın:

model.fit(dataset)
tutucu15 l10n-yer
3/3 [==============================] - 0s 2ms/step - loss: 0.0587
<keras.callbacks.History at 0x7fbc3873f1d0>

Ve son olarak, programı Model.evaluate ile değerlendirin:

model.evaluate(eval_dataset, return_dict=True)
tutucu17 l10n-yer
3/3 [==============================] - 0s 2ms/step - loss: 0.0197
{'loss': 0.019738242030143738}

Sonraki adımlar

Yararlı bulabileceğiniz ek Keras kaynakları:

Aşağıdaki kılavuzlar, dağıtım stratejisi iş akışlarının tf.estimator API'lerinden taşınmasına yardımcı olabilir: