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-yerfeatures = [[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-yerINFO: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-yerINFO: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-yer3/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-yer3/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:
- Veri kümesi ardışık
tf.data.Dataset
ile hazırlayın. - Tek bir
tf.keras.layers.Dense
katmanıyla basit bir model tanımlayın. - Örnek Adagrad (
tf.keras.optimizers.Adagrad
) - Modeli, kayıp işlevi olarak ortalama kare hatası (
"mse"
) kullanırkenModel.compile
ile 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 = 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-yer3/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-yer3/3 [==============================] - 0s 2ms/step - loss: 0.0197 {'loss': 0.019738242030143738}
Sonraki adımlar
Yararlı bulabileceğiniz ek Keras kaynakları:
- Kılavuz: Yerleşik yöntemlerle eğitim ve değerlendirme
- Kılavuz: Model.fit'te olanları özelleştirin
- Kılavuz: Sıfırdan bir eğitim döngüsü yazma
- Kılavuz: Alt sınıflama yoluyla yeni Keras katmanları ve modelleri oluşturma
Aşağıdaki kılavuzlar, dağıtım stratejisi iş akışlarının tf.estimator
API'lerinden taşınmasına yardımcı olabilir: