Xem trên TensorFlow.org | Chạy trong Google Colab | Xem nguồn trên GitHub | Tải xuống sổ ghi chép |
Hướng dẫn này trình bày cách di chuyển từ các API tf.keras
của TensorFlow 1 sang các API tf.estimator.Estimator
của TensorFlow 2. Đầu tiên, bạn sẽ thiết lập và chạy một mô hình cơ bản để đào tạo và đánh giá với tf.estimator.Estimator
. Sau đó, bạn sẽ thực hiện các bước tương tự trong TensorFlow 2 với các API tf.keras
. Bạn cũng sẽ học cách tùy chỉnh bước đào tạo bằng cách phân lớp tf.keras.Model
và sử dụng tf.GradientTape
.
- Trong TensorFlow 1, các API
tf.estimator.Estimator
cấp cao cho phép bạn đào tạo và đánh giá một mô hình, cũng như thực hiện suy luận và lưu mô hình của bạn (để phục vụ). - Trong TensorFlow 2, sử dụng API Keras để thực hiện các tác vụ nói trên, chẳng hạn như xây dựng mô hình , ứng dụng gradient, đào tạo , đánh giá và dự đoán.
(Để di chuyển dòng công việc lưu mô hình / điểm kiểm tra sang TensorFlow 2, hãy xem hướng dẫn di chuyển SavedModel và Checkpoint .)
Thành lập
Bắt đầu với nhập và một tập dữ liệu đơn giản:
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: Huấn luyện và đánh giá với tf.estimator.Estimator
Ví dụ này cho thấy cách thực hiện đào tạo và đánh giá với tf.estimator.Estimator
trong TensorFlow 1.
Bắt đầu bằng cách xác định một số chức năng: một chức năng đầu vào cho dữ liệu đào tạo, một chức năng đầu vào đánh giá cho dữ liệu đánh giá và một chức năng mô hình cho Estimator
biết cách op đào tạo được xác định với các tính năng và nhãn:
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)
Khởi tạo Estimator
của bạn và đào tạo mô hình:
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>
Đánh giá chương trình với bộ đánh giá:
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: Đào tạo và đánh giá bằng các phương pháp Keras tích hợp sẵn
Ví dụ này trình bày cách thực hiện đào tạo và đánh giá với Keras Model.fit
và Model.evaluate
trong TensorFlow 2. (Bạn có thể tìm hiểu thêm trong phần Đào tạo và đánh giá với hướng dẫn phương pháp tích hợp sẵn .)
- Bắt đầu bằng cách chuẩn bị đường dẫn tập dữ liệu với các API
tf.data.Dataset
. - Xác định một mô hình Tuần tự Keras đơn giản với một lớp tuyến tính (
tf.keras.layers.Dense
). - Khởi tạo trình tối ưu hóa Adagrad (
tf.keras.optimizers.Adagrad
). - Định cấu hình mô hình để đào tạo bằng cách chuyển biến trình
optimizer
và lỗi bình phương trung bình ("mse"
) vàoModel.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")
Cùng với đó, bạn đã sẵn sàng đào tạo người mẫu bằng cách gọi Model.fit
:
model.fit(dataset)
3/3 [==============================] - 0s 2ms/step - loss: 0.2785 <keras.callbacks.History at 0x7fbc4b320350>
Cuối cùng, đánh giá mô hình với Model.evaluate
:
model.evaluate(eval_dataset, return_dict=True)
3/3 [==============================] - 0s 1ms/step - loss: 0.0451 {'loss': 0.04510306194424629}
TensorFlow 2: Đào tạo và đánh giá với một bước đào tạo tùy chỉnh và các phương pháp Keras tích hợp sẵn
Trong TensorFlow 2, bạn cũng có thể viết hàm bước huấn luyện tùy chỉnh của riêng mình với tf.GradientTape
để thực hiện các đường chuyền tiến và lùi, trong khi vẫn tận dụng được tính năng hỗ trợ huấn luyện tích hợp, chẳng hạn như tf.keras.callbacks.Callback
và tf.distribute.Strategy
. (Tìm hiểu thêm trong Tùy chỉnh những gì xảy ra trong Model.fit và Viết các vòng đào tạo tùy chỉnh từ đầu .)
Trong ví dụ này, hãy bắt đầu bằng cách tạo tf.keras.Model
tùy chỉnh bằng cách phân lớp tf.keras.Sequential
ghi đè Model.train_step
. (Tìm hiểu thêm về phân lớp tf.keras.Model ). Bên trong lớp đó, hãy xác định một hàm train_step
tùy chỉnh mà đối với mỗi lô dữ liệu thực hiện chuyển tiếp và chuyển lùi trong một bước huấn luyệ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}
Tiếp theo, như trước:
- Chuẩn bị đường dẫn tập dữ liệu với
tf.data.Dataset
. - Xác định một mô hình đơn giản với một lớp
tf.keras.layers.Dense
. - Khởi tạo Adagrad (
tf.keras.optimizers.Adagrad
) - Định cấu hình mô hình để huấn luyện với
Model.compile
, trong khi sử dụng lỗi bình phương trung bình ("mse"
) làm hàm mất mát.
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")
Gọi Model.fit
để đào tạo người mẫu:
model.fit(dataset)
3/3 [==============================] - 0s 2ms/step - loss: 0.0587 <keras.callbacks.History at 0x7fbc3873f1d0>
Và cuối cùng, hãy đánh giá chương trình với Model.evaluate
:
model.evaluate(eval_dataset, return_dict=True)
3/3 [==============================] - 0s 2ms/step - loss: 0.0197 {'loss': 0.019738242030143738}
Bước tiếp theo
Các tài nguyên Keras bổ sung mà bạn có thể thấy hữu ích:
- Hướng dẫn: Đào tạo và đánh giá bằng các phương pháp tích hợp
- Hướng dẫn: Tùy chỉnh những gì xảy ra trong Model.fit
- Hướng dẫn: Viết một vòng đào tạo từ đầu
- Hướng dẫn: Tạo các lớp và mô hình Keras mới thông qua phân lớp
Các hướng dẫn sau có thể hỗ trợ di chuyển quy trình công việc của chiến lược phân phối từ API tf.estimator
: