Lihat di TensorFlow.org | Jalankan di Google Colab | Lihat sumber di GitHub | Unduh buku catatan |
Panduan ini menunjukkan cara bermigrasi dari API tf.estimator.Estimator TensorFlow 1 ke API tf.estimator.Estimator
tf.keras
2. Pertama, Anda akan menyiapkan dan menjalankan model dasar untuk pelatihan dan evaluasi dengan tf.estimator.Estimator
. Kemudian, Anda akan melakukan langkah-langkah yang setara di TensorFlow 2 dengan API tf.keras
. Anda juga akan mempelajari cara menyesuaikan langkah pelatihan dengan tf.keras.Model
dan menggunakan tf.GradientTape
.
- Di TensorFlow 1,
tf.estimator.Estimator
API tingkat tinggi memungkinkan Anda melatih dan mengevaluasi model, serta melakukan inferensi dan menyimpan model Anda (untuk disajikan). - Di TensorFlow 2, gunakan Keras API untuk melakukan tugas yang disebutkan di atas, seperti pembuatan model , aplikasi gradien, pelatihan , evaluasi, dan prediksi.
(Untuk memigrasikan alur kerja penyimpanan model/pos pemeriksaan ke TensorFlow 2, lihat panduan migrasi SavedModel dan Checkpoint .)
Mempersiapkan
Mulai dengan impor dan set data sederhana:
import tensorflow as tf
import tensorflow.compat.v1 as tf1
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: Latih dan evaluasi dengan tf.estimator.Estimator
Contoh ini menunjukkan cara melakukan pelatihan dan evaluasi dengan tf.estimator.Estimator
di TensorFlow 1.
Mulailah dengan mendefinisikan beberapa fungsi: fungsi input untuk data pelatihan, fungsi input evaluasi untuk data evaluasi, dan fungsi model yang memberi tahu Estimator
bagaimana operasi pelatihan didefinisikan dengan fitur dan label:
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)
Instansiasi Estimator
Anda, dan latih modelnya:
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/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>
Evaluasi program dengan perangkat evaluasi:
estimator.evaluate(_eval_input_fn)
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: Latih dan evaluasi dengan metode Keras bawaan
Contoh ini menunjukkan cara melakukan pelatihan dan evaluasi dengan Keras Model.fit
dan Model.evaluate
di TensorFlow 2. (Anda dapat mempelajari lebih lanjut di Pelatihan dan evaluasi dengan panduan metode bawaan.)
- Mulailah dengan menyiapkan pipeline kumpulan data dengan
tf.data.Dataset
API. - Tentukan model Keras Sequential sederhana dengan satu lapisan linier (
tf.keras.layers.Dense
). - Buat instance pengoptimal Adagrad (
tf.keras.optimizers.Adagrad
). - Konfigurasikan model untuk pelatihan dengan meneruskan variabel
optimizer
dan kesalahan kuadrat rata-rata ("mse"
) keModel.compile
.
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")
Dengan itu, Anda siap untuk melatih model dengan memanggil Model.fit
:
model.fit(dataset)
3/3 [==============================] - 0s 2ms/step - loss: 0.2785 <keras.callbacks.History at 0x7fbc4b320350>
Terakhir, evaluasi model dengan Model.evaluate
:
model.evaluate(eval_dataset, return_dict=True)
3/3 [==============================] - 0s 1ms/step - loss: 0.0451 {'loss': 0.04510306194424629}
TensorFlow 2: Latih dan evaluasi dengan langkah pelatihan khusus dan metode Keras bawaan
Di TensorFlow 2, Anda juga dapat menulis fungsi langkah pelatihan kustom Anda sendiri dengan tf.GradientTape
untuk melakukan gerakan maju dan mundur, sambil tetap memanfaatkan dukungan pelatihan bawaan, seperti tf.keras.callbacks.Callback
dan tf.distribute.Strategy
. (Pelajari lebih lanjut di Menyesuaikan apa yang terjadi di Model.fit dan Menulis loop pelatihan kustom dari awal .)
Dalam contoh ini, mulailah dengan membuat tf.keras.Model
khusus dengan mensubklasifikasikan tf.keras.Sequential
yang menggantikan Model.train_step
. (Pelajari lebih lanjut tentang subkelas tf.keras.Model ). Di dalam kelas itu, tentukan fungsi train_step
khusus yang untuk setiap kumpulan data melakukan gerakan maju dan mundur selama satu langkah pelatihan.
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}
Selanjutnya, seperti sebelumnya:
- Siapkan jalur dataset dengan
tf.data.Dataset
. - Tentukan model sederhana dengan satu lapisan
tf.keras.layers.Dense
. - Instansiasi Adagrad (
tf.keras.optimizers.Adagrad
) - Konfigurasikan model untuk pelatihan dengan
Model.compile
, saat menggunakan kesalahan kuadrat rata-rata ("mse"
) sebagai fungsi kerugian.
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")
Hubungi Model.fit
untuk melatih model:
model.fit(dataset)
3/3 [==============================] - 0s 2ms/step - loss: 0.0587 <keras.callbacks.History at 0x7fbc3873f1d0>
Dan, terakhir, evaluasi program dengan Model.evaluate
:
model.evaluate(eval_dataset, return_dict=True)
3/3 [==============================] - 0s 2ms/step - loss: 0.0197 {'loss': 0.019738242030143738}
Langkah selanjutnya
Sumber daya Keras tambahan yang mungkin berguna bagi Anda:
- Panduan: Pelatihan dan evaluasi dengan metode bawaan
- Panduan: Sesuaikan apa yang terjadi di Model.fit
- Panduan: Menulis loop pelatihan dari awal
- Panduan: Membuat layer dan model Keras baru melalui subclassing
Panduan berikut dapat membantu memigrasikan alur kerja strategi distribusi dari tf.estimator
API: