Ví dụ về di chuyển: Công cụ ước tính đóng hộp

Xem trên TensorFlow.org Chạy trong Google Colab Xem nguồn trên GitHub Tải xuống sổ ghi chép

Công cụ ước tính đóng hộp (hoặc làm sẵn) theo truyền thống được sử dụng trong TensorFlow 1 như một cách nhanh chóng và dễ dàng để đào tạo mô hình cho nhiều trường hợp sử dụng điển hình. TensorFlow 2 cung cấp các sản phẩm thay thế gần đúng đơn giản cho một số trong số chúng theo mô hình Keras. Đối với những công cụ ước tính đóng hộp không có công cụ thay thế TensorFlow 2 được tích hợp sẵn, bạn vẫn có thể xây dựng công cụ thay thế của riêng mình một cách khá dễ dàng.

Hướng dẫn này đi qua một số ví dụ về các tương đương trực tiếp và các thay thế tùy chỉnh để chứng minh cách các mô hình được xác định tf.estimator của TensorFlow 1 có thể được chuyển sang TF2 với Keras.

Cụ thể, hướng dẫn này bao gồm các ví dụ để di chuyển:

Tiền thân phổ biến của việc đào tạo mô hình là tiền xử lý tính năng, được thực hiện cho các mô hình Công cụ ước tính TensorFlow 1 với tf.feature_column . Để biết thêm thông tin về tiền xử lý tính năng trong TensorFlow 2, hãy xem hướng dẫn này về di chuyển cột tính năng .

Thành lập

Bắt đầu với một số lần nhập TensorFlow cần thiết,

pip install tensorflow_decision_forests
import keras
import pandas as pd
import tensorflow as tf
import tensorflow.compat.v1 as tf1
import tensorflow_decision_forests as tfdf
WARNING:root:TF Parameter Server distributed training not available (this is expected for the pre-build release).

chuẩn bị một số dữ liệu đơn giản để trình diễn từ bộ dữ liệu Titanic tiêu chuẩn,

x_train = pd.read_csv('https://storage.googleapis.com/tf-datasets/titanic/train.csv')
x_eval = pd.read_csv('https://storage.googleapis.com/tf-datasets/titanic/eval.csv')
x_train['sex'].replace(('male', 'female'), (0, 1), inplace=True)
x_eval['sex'].replace(('male', 'female'), (0, 1), inplace=True)

x_train['alone'].replace(('n', 'y'), (0, 1), inplace=True)
x_eval['alone'].replace(('n', 'y'), (0, 1), inplace=True)

x_train['class'].replace(('First', 'Second', 'Third'), (1, 2, 3), inplace=True)
x_eval['class'].replace(('First', 'Second', 'Third'), (1, 2, 3), inplace=True)

x_train.drop(['embark_town', 'deck'], axis=1, inplace=True)
x_eval.drop(['embark_town', 'deck'], axis=1, inplace=True)

y_train = x_train.pop('survived')
y_eval = x_eval.pop('survived')
# Data setup for TensorFlow 1 with `tf.estimator`
def _input_fn():
  return tf1.data.Dataset.from_tensor_slices((dict(x_train), y_train)).batch(32)


def _eval_input_fn():
  return tf1.data.Dataset.from_tensor_slices((dict(x_eval), y_eval)).batch(32)


FEATURE_NAMES = [
    'age', 'fare', 'sex', 'n_siblings_spouses', 'parch', 'class', 'alone'
]

feature_columns = []
for fn in FEATURE_NAMES:
  feat_col = tf1.feature_column.numeric_column(fn, dtype=tf.float32)
  feature_columns.append(feat_col)

và tạo một phương pháp để khởi tạo một trình tối ưu hóa mẫu đơn giản để sử dụng với các mô hình TensorFlow 1 Estimator và TensorFlow 2 Keras khác nhau của chúng tôi.

def create_sample_optimizer(tf_version):
  if tf_version == 'tf1':
    optimizer = lambda: tf.keras.optimizers.Ftrl(
        l1_regularization_strength=0.001,
        learning_rate=tf1.train.exponential_decay(
            learning_rate=0.1,
            global_step=tf1.train.get_global_step(),
            decay_steps=10000,
            decay_rate=0.9))
  elif tf_version == 'tf2':
    optimizer = tf.keras.optimizers.Ftrl(
        l1_regularization_strength=0.001,
        learning_rate=tf.keras.optimizers.schedules.ExponentialDecay(
            initial_learning_rate=0.1, decay_steps=10000, decay_rate=0.9))
  return optimizer

Ví dụ 1: Di chuyển từ LinearEstimator

TF1: Sử dụng Công cụ kích thích tuyến tính

Trong TensorFlow 1, bạn có thể sử dụng tf.estimator.LinearEstimator để tạo mô hình tuyến tính cơ sở cho các bài toán hồi quy và phân loại.

linear_estimator = tf.estimator.LinearEstimator(
    head=tf.estimator.BinaryClassHead(),
    feature_columns=feature_columns,
    optimizer=create_sample_optimizer('tf1'))
INFO:tensorflow:Using default config.
INFO:tensorflow:Using default config.
WARNING:tensorflow:Using temporary folder as model directory: /tmp/tmpvoycvffz
WARNING:tensorflow:Using temporary folder as model directory: /tmp/tmpvoycvffz
INFO:tensorflow:Using config: {'_model_dir': '/tmp/tmpvoycvffz', '_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:Using config: {'_model_dir': '/tmp/tmpvoycvffz', '_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}
linear_estimator.train(input_fn=_input_fn, steps=100)
linear_estimator.evaluate(input_fn=_eval_input_fn, steps=10)
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.
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.
INFO:tensorflow:Calling model_fn.
/tmpfs/src/tf_docs_env/lib/python3.7/site-packages/tensorflow_estimator/python/estimator/canned/linear.py:1478: UserWarning: `layer.add_variable` is deprecated and will be removed in a future version. Please use `layer.add_weight` method instead.
  getter=tf.compat.v1.get_variable)
WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.7/site-packages/keras/optimizer_v2/ftrl.py:149: 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
WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.7/site-packages/keras/optimizer_v2/ftrl.py:149: 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:Done calling model_fn.
INFO:tensorflow:Create CheckpointSaverHook.
INFO:tensorflow:Create CheckpointSaverHook.
INFO:tensorflow:Graph was finalized.
INFO:tensorflow:Graph was finalized.
INFO:tensorflow:Running local_init_op.
INFO:tensorflow:Running local_init_op.
INFO:tensorflow:Done running local_init_op.
INFO:tensorflow:Done running local_init_op.
INFO:tensorflow:Calling checkpoint listeners before saving checkpoint 0...
INFO:tensorflow:Calling checkpoint listeners before saving checkpoint 0...
INFO:tensorflow:Saving checkpoints for 0 into /tmp/tmpvoycvffz/model.ckpt.
INFO:tensorflow:Saving checkpoints for 0 into /tmp/tmpvoycvffz/model.ckpt.
INFO:tensorflow:Calling checkpoint listeners after saving checkpoint 0...
INFO:tensorflow:Calling checkpoint listeners after saving checkpoint 0...
INFO:tensorflow:loss = 0.6931472, step = 0
INFO:tensorflow:loss = 0.6931472, step = 0
INFO:tensorflow:Calling checkpoint listeners before saving checkpoint 20...
INFO:tensorflow:Calling checkpoint listeners before saving checkpoint 20...
INFO:tensorflow:Saving checkpoints for 20 into /tmp/tmpvoycvffz/model.ckpt.
INFO:tensorflow:Saving checkpoints for 20 into /tmp/tmpvoycvffz/model.ckpt.
INFO:tensorflow:Calling checkpoint listeners after saving checkpoint 20...
INFO:tensorflow:Calling checkpoint listeners after saving checkpoint 20...
INFO:tensorflow:Loss for final step: 0.55268794.
INFO:tensorflow:Loss for final step: 0.55268794.
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 2022-01-29T02:21:45
INFO:tensorflow:Starting evaluation at 2022-01-29T02:21:45
INFO:tensorflow:Graph was finalized.
INFO:tensorflow:Graph was finalized.
INFO:tensorflow:Restoring parameters from /tmp/tmpvoycvffz/model.ckpt-20
INFO:tensorflow:Restoring parameters from /tmp/tmpvoycvffz/model.ckpt-20
INFO:tensorflow:Running local_init_op.
INFO:tensorflow:Running local_init_op.
INFO:tensorflow:Done running local_init_op.
INFO:tensorflow:Done running local_init_op.
INFO:tensorflow:Evaluation [1/10]
INFO:tensorflow:Evaluation [1/10]
INFO:tensorflow:Evaluation [2/10]
INFO:tensorflow:Evaluation [2/10]
INFO:tensorflow:Evaluation [3/10]
INFO:tensorflow:Evaluation [3/10]
INFO:tensorflow:Evaluation [4/10]
INFO:tensorflow:Evaluation [4/10]
INFO:tensorflow:Evaluation [5/10]
INFO:tensorflow:Evaluation [5/10]
INFO:tensorflow:Evaluation [6/10]
INFO:tensorflow:Evaluation [6/10]
INFO:tensorflow:Evaluation [7/10]
INFO:tensorflow:Evaluation [7/10]
INFO:tensorflow:Evaluation [8/10]
INFO:tensorflow:Evaluation [8/10]
INFO:tensorflow:Evaluation [9/10]
INFO:tensorflow:Evaluation [9/10]
INFO:tensorflow:Inference Time : 0.50224s
INFO:tensorflow:Inference Time : 0.50224s
INFO:tensorflow:Finished evaluation at 2022-01-29-02:21:45
INFO:tensorflow:Finished evaluation at 2022-01-29-02:21:45
INFO:tensorflow:Saving dict for global step 20: accuracy = 0.70075756, accuracy_baseline = 0.625, auc = 0.75472915, auc_precision_recall = 0.65362054, average_loss = 0.5759378, global_step = 20, label/mean = 0.375, loss = 0.5704812, precision = 0.6388889, prediction/mean = 0.41331062, recall = 0.46464646
INFO:tensorflow:Saving dict for global step 20: accuracy = 0.70075756, accuracy_baseline = 0.625, auc = 0.75472915, auc_precision_recall = 0.65362054, average_loss = 0.5759378, global_step = 20, label/mean = 0.375, loss = 0.5704812, precision = 0.6388889, prediction/mean = 0.41331062, recall = 0.46464646
INFO:tensorflow:Saving 'checkpoint_path' summary for global step 20: /tmp/tmpvoycvffz/model.ckpt-20
INFO:tensorflow:Saving 'checkpoint_path' summary for global step 20: /tmp/tmpvoycvffz/model.ckpt-20
{'accuracy': 0.70075756,
 'accuracy_baseline': 0.625,
 'auc': 0.75472915,
 'auc_precision_recall': 0.65362054,
 'average_loss': 0.5759378,
 'label/mean': 0.375,
 'loss': 0.5704812,
 'precision': 0.6388889,
 'prediction/mean': 0.41331062,
 'recall': 0.46464646,
 'global_step': 20}

TF2: Sử dụng Keras LinearModel

Trong TensorFlow 2, bạn có thể tạo một phiên bản của Keras tf.compat.v1.keras.models.LinearModel thay thế cho tf.estimator.LinearEstimator . Đường dẫn tf.compat.v1.keras được sử dụng để biểu thị rằng mô hình tạo sẵn tồn tại để tương thích.

linear_model = tf.compat.v1.keras.experimental.LinearModel()
linear_model.compile(loss='mse', optimizer=create_sample_optimizer('tf2'), metrics=['accuracy'])
linear_model.fit(x_train, y_train, epochs=10)
linear_model.evaluate(x_eval, y_eval, return_dict=True)
Epoch 1/10
20/20 [==============================] - 0s 2ms/step - loss: 2.8157 - accuracy: 0.6300
Epoch 2/10
20/20 [==============================] - 0s 2ms/step - loss: 0.2758 - accuracy: 0.6427
Epoch 3/10
20/20 [==============================] - 0s 2ms/step - loss: 0.2470 - accuracy: 0.6699
Epoch 4/10
20/20 [==============================] - 0s 2ms/step - loss: 0.1954 - accuracy: 0.7177
Epoch 5/10
20/20 [==============================] - 0s 2ms/step - loss: 0.1931 - accuracy: 0.7145
Epoch 6/10
20/20 [==============================] - 0s 2ms/step - loss: 0.1816 - accuracy: 0.7496
Epoch 7/10
20/20 [==============================] - 0s 2ms/step - loss: 0.1766 - accuracy: 0.7751
Epoch 8/10
20/20 [==============================] - 0s 2ms/step - loss: 0.2198 - accuracy: 0.7560
Epoch 9/10
20/20 [==============================] - 0s 2ms/step - loss: 0.1657 - accuracy: 0.7959
Epoch 10/10
20/20 [==============================] - 0s 2ms/step - loss: 0.1738 - accuracy: 0.7959
9/9 [==============================] - 0s 2ms/step - loss: 0.2278 - accuracy: 0.6780
{'loss': 0.22778697311878204, 'accuracy': 0.6780303120613098}

Ví dụ 2: Di chuyển từ DNNEstimator

TF1: Sử dụng DNNEstimator

Trong TensorFlow 1, bạn có thể sử dụng tf.estimator.DNNEstimator để tạo mô hình DNN cơ sở cho các vấn đề hồi quy và phân loại.

dnn_estimator = tf.estimator.DNNEstimator(
    head=tf.estimator.BinaryClassHead(),
    feature_columns=feature_columns,
    hidden_units=[128],
    activation_fn=tf.nn.relu,
    optimizer=create_sample_optimizer('tf1'))
INFO:tensorflow:Using default config.
INFO:tensorflow:Using default config.
WARNING:tensorflow:Using temporary folder as model directory: /tmp/tmphckb8f81
WARNING:tensorflow:Using temporary folder as model directory: /tmp/tmphckb8f81
INFO:tensorflow:Using config: {'_model_dir': '/tmp/tmphckb8f81', '_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:Using config: {'_model_dir': '/tmp/tmphckb8f81', '_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}
dnn_estimator.train(input_fn=_input_fn, steps=100)
dnn_estimator.evaluate(input_fn=_eval_input_fn, steps=10)
INFO:tensorflow:Calling model_fn.
INFO:tensorflow:Calling model_fn.
INFO:tensorflow:Done calling model_fn.
INFO:tensorflow:Done calling model_fn.
INFO:tensorflow:Create CheckpointSaverHook.
INFO:tensorflow:Create CheckpointSaverHook.
INFO:tensorflow:Graph was finalized.
INFO:tensorflow:Graph was finalized.
INFO:tensorflow:Running local_init_op.
INFO:tensorflow:Running local_init_op.
INFO:tensorflow:Done running local_init_op.
INFO:tensorflow:Done running local_init_op.
INFO:tensorflow:Calling checkpoint listeners before saving checkpoint 0...
INFO:tensorflow:Calling checkpoint listeners before saving checkpoint 0...
INFO:tensorflow:Saving checkpoints for 0 into /tmp/tmphckb8f81/model.ckpt.
INFO:tensorflow:Saving checkpoints for 0 into /tmp/tmphckb8f81/model.ckpt.
INFO:tensorflow:Calling checkpoint listeners after saving checkpoint 0...
INFO:tensorflow:Calling checkpoint listeners after saving checkpoint 0...
INFO:tensorflow:loss = 2.1811047, step = 0
INFO:tensorflow:loss = 2.1811047, step = 0
INFO:tensorflow:Calling checkpoint listeners before saving checkpoint 20...
INFO:tensorflow:Calling checkpoint listeners before saving checkpoint 20...
INFO:tensorflow:Saving checkpoints for 20 into /tmp/tmphckb8f81/model.ckpt.
INFO:tensorflow:Saving checkpoints for 20 into /tmp/tmphckb8f81/model.ckpt.
INFO:tensorflow:Calling checkpoint listeners after saving checkpoint 20...
INFO:tensorflow:Calling checkpoint listeners after saving checkpoint 20...
INFO:tensorflow:Loss for final step: 0.5881681.
INFO:tensorflow:Loss for final step: 0.5881681.
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 2022-01-29T02:21:48
INFO:tensorflow:Starting evaluation at 2022-01-29T02:21:48
INFO:tensorflow:Graph was finalized.
INFO:tensorflow:Graph was finalized.
INFO:tensorflow:Restoring parameters from /tmp/tmphckb8f81/model.ckpt-20
INFO:tensorflow:Restoring parameters from /tmp/tmphckb8f81/model.ckpt-20
INFO:tensorflow:Running local_init_op.
INFO:tensorflow:Running local_init_op.
INFO:tensorflow:Done running local_init_op.
INFO:tensorflow:Done running local_init_op.
INFO:tensorflow:Evaluation [1/10]
INFO:tensorflow:Evaluation [1/10]
INFO:tensorflow:Evaluation [2/10]
INFO:tensorflow:Evaluation [2/10]
INFO:tensorflow:Evaluation [3/10]
INFO:tensorflow:Evaluation [3/10]
INFO:tensorflow:Evaluation [4/10]
INFO:tensorflow:Evaluation [4/10]
INFO:tensorflow:Evaluation [5/10]
INFO:tensorflow:Evaluation [5/10]
INFO:tensorflow:Evaluation [6/10]
INFO:tensorflow:Evaluation [6/10]
INFO:tensorflow:Evaluation [7/10]
INFO:tensorflow:Evaluation [7/10]
INFO:tensorflow:Evaluation [8/10]
INFO:tensorflow:Evaluation [8/10]
INFO:tensorflow:Evaluation [9/10]
INFO:tensorflow:Evaluation [9/10]
INFO:tensorflow:Inference Time : 0.47075s
INFO:tensorflow:Inference Time : 0.47075s
INFO:tensorflow:Finished evaluation at 2022-01-29-02:21:49
INFO:tensorflow:Finished evaluation at 2022-01-29-02:21:49
INFO:tensorflow:Saving dict for global step 20: accuracy = 0.7083333, accuracy_baseline = 0.625, auc = 0.70716256, auc_precision_recall = 0.6146256, average_loss = 0.60399944, global_step = 20, label/mean = 0.375, loss = 0.5986442, precision = 0.6486486, prediction/mean = 0.41256863, recall = 0.4848485
INFO:tensorflow:Saving dict for global step 20: accuracy = 0.7083333, accuracy_baseline = 0.625, auc = 0.70716256, auc_precision_recall = 0.6146256, average_loss = 0.60399944, global_step = 20, label/mean = 0.375, loss = 0.5986442, precision = 0.6486486, prediction/mean = 0.41256863, recall = 0.4848485
INFO:tensorflow:Saving 'checkpoint_path' summary for global step 20: /tmp/tmphckb8f81/model.ckpt-20
INFO:tensorflow:Saving 'checkpoint_path' summary for global step 20: /tmp/tmphckb8f81/model.ckpt-20
{'accuracy': 0.7083333,
 'accuracy_baseline': 0.625,
 'auc': 0.70716256,
 'auc_precision_recall': 0.6146256,
 'average_loss': 0.60399944,
 'label/mean': 0.375,
 'loss': 0.5986442,
 'precision': 0.6486486,
 'prediction/mean': 0.41256863,
 'recall': 0.4848485,
 'global_step': 20}

TF2: Sử dụng Keras để tạo mô hình DNN tùy chỉnh

Trong TensorFlow 2, bạn có thể tạo mô hình DNN tùy chỉnh để thay thế cho mô hình được tạo bởi tf.estimator.DNNEstimator , với các mức tùy chỉnh do người dùng chỉ định tương tự (ví dụ: như trong ví dụ trước, khả năng tùy chỉnh trình tối ưu hóa mô hình đã chọn) .

Một quy trình làm việc tương tự có thể được sử dụng để thay thế tf.estimator.experimental.RNNEstimator bằng Mô hình Keras RNN. Keras cung cấp một số lựa chọn có sẵn, có thể tùy chỉnh bằng tf.keras.layers.RNN , tf.keras.layers.LSTMtf.keras.layers.GRU - xem tại đây để biết thêm chi tiết.

dnn_model = tf.keras.models.Sequential(
    [tf.keras.layers.Dense(128, activation='relu'),
     tf.keras.layers.Dense(1)])

dnn_model.compile(loss='mse', optimizer=create_sample_optimizer('tf2'), metrics=['accuracy'])
dnn_model.fit(x_train, y_train, epochs=10)
dnn_model.evaluate(x_eval, y_eval, return_dict=True)
Epoch 1/10
20/20 [==============================] - 0s 2ms/step - loss: 551.2993 - accuracy: 0.5997
Epoch 2/10
20/20 [==============================] - 0s 2ms/step - loss: 16.8562 - accuracy: 0.6427
Epoch 3/10
20/20 [==============================] - 0s 2ms/step - loss: 0.3048 - accuracy: 0.7161
Epoch 4/10
20/20 [==============================] - 0s 2ms/step - loss: 0.2475 - accuracy: 0.7416
Epoch 5/10
20/20 [==============================] - 0s 2ms/step - loss: 0.2334 - accuracy: 0.7512
Epoch 6/10
20/20 [==============================] - 0s 2ms/step - loss: 0.2200 - accuracy: 0.7416
Epoch 7/10
20/20 [==============================] - 0s 2ms/step - loss: 0.2012 - accuracy: 0.7656
Epoch 8/10
20/20 [==============================] - 0s 2ms/step - loss: 0.2025 - accuracy: 0.7624
Epoch 9/10
20/20 [==============================] - 0s 2ms/step - loss: 0.2185 - accuracy: 0.7703
Epoch 10/10
20/20 [==============================] - 0s 2ms/step - loss: 0.2046 - accuracy: 0.7687
9/9 [==============================] - 0s 2ms/step - loss: 0.2227 - accuracy: 0.6856
{'loss': 0.2227054387331009, 'accuracy': 0.685606062412262}

Ví dụ 3: Di chuyển từ DNNLinearCombinedEstimator

TF1: Sử dụng DNNLinearCombinedEstimator

Trong TensorFlow 1, bạn có thể sử dụng tf.estimator.DNNLinearCombinedEstimator để tạo mô hình kết hợp đường cơ sở cho các vấn đề hồi quy và phân loại với khả năng tùy chỉnh cho cả thành phần tuyến tính và DNN của nó.

optimizer = create_sample_optimizer('tf1')

combined_estimator = tf.estimator.DNNLinearCombinedEstimator(
    head=tf.estimator.BinaryClassHead(),
    # Wide settings
    linear_feature_columns=feature_columns,
    linear_optimizer=optimizer,
    # Deep settings
    dnn_feature_columns=feature_columns,
    dnn_hidden_units=[128],
    dnn_optimizer=optimizer)
INFO:tensorflow:Using default config.
INFO:tensorflow:Using default config.
WARNING:tensorflow:Using temporary folder as model directory: /tmp/tmpwl5e5eaq
WARNING:tensorflow:Using temporary folder as model directory: /tmp/tmpwl5e5eaq
INFO:tensorflow:Using config: {'_model_dir': '/tmp/tmpwl5e5eaq', '_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:Using config: {'_model_dir': '/tmp/tmpwl5e5eaq', '_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}
combined_estimator.train(input_fn=_input_fn, steps=100)
combined_estimator.evaluate(input_fn=_eval_input_fn, steps=10)
INFO:tensorflow:Calling model_fn.
INFO:tensorflow:Calling model_fn.
/tmpfs/src/tf_docs_env/lib/python3.7/site-packages/tensorflow_estimator/python/estimator/canned/linear.py:1478: UserWarning: `layer.add_variable` is deprecated and will be removed in a future version. Please use `layer.add_weight` method instead.
  getter=tf.compat.v1.get_variable)
INFO:tensorflow:Done calling model_fn.
INFO:tensorflow:Done calling model_fn.
INFO:tensorflow:Create CheckpointSaverHook.
INFO:tensorflow:Create CheckpointSaverHook.
INFO:tensorflow:Graph was finalized.
INFO:tensorflow:Graph was finalized.
INFO:tensorflow:Running local_init_op.
INFO:tensorflow:Running local_init_op.
INFO:tensorflow:Done running local_init_op.
INFO:tensorflow:Done running local_init_op.
INFO:tensorflow:Calling checkpoint listeners before saving checkpoint 0...
INFO:tensorflow:Calling checkpoint listeners before saving checkpoint 0...
INFO:tensorflow:Saving checkpoints for 0 into /tmp/tmpwl5e5eaq/model.ckpt.
INFO:tensorflow:Saving checkpoints for 0 into /tmp/tmpwl5e5eaq/model.ckpt.
INFO:tensorflow:Calling checkpoint listeners after saving checkpoint 0...
INFO:tensorflow:Calling checkpoint listeners after saving checkpoint 0...
INFO:tensorflow:loss = 2.5475807, step = 0
INFO:tensorflow:loss = 2.5475807, step = 0
INFO:tensorflow:Calling checkpoint listeners before saving checkpoint 20...
INFO:tensorflow:Calling checkpoint listeners before saving checkpoint 20...
INFO:tensorflow:Saving checkpoints for 20 into /tmp/tmpwl5e5eaq/model.ckpt.
INFO:tensorflow:Saving checkpoints for 20 into /tmp/tmpwl5e5eaq/model.ckpt.
INFO:tensorflow:Calling checkpoint listeners after saving checkpoint 20...
INFO:tensorflow:Calling checkpoint listeners after saving checkpoint 20...
INFO:tensorflow:Loss for final step: 0.58060575.
INFO:tensorflow:Loss for final step: 0.58060575.
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 2022-01-29T02:21:53
INFO:tensorflow:Starting evaluation at 2022-01-29T02:21:53
INFO:tensorflow:Graph was finalized.
INFO:tensorflow:Graph was finalized.
INFO:tensorflow:Restoring parameters from /tmp/tmpwl5e5eaq/model.ckpt-20
INFO:tensorflow:Restoring parameters from /tmp/tmpwl5e5eaq/model.ckpt-20
INFO:tensorflow:Running local_init_op.
INFO:tensorflow:Running local_init_op.
INFO:tensorflow:Done running local_init_op.
INFO:tensorflow:Done running local_init_op.
INFO:tensorflow:Evaluation [1/10]
INFO:tensorflow:Evaluation [1/10]
INFO:tensorflow:Evaluation [2/10]
INFO:tensorflow:Evaluation [2/10]
INFO:tensorflow:Evaluation [3/10]
INFO:tensorflow:Evaluation [3/10]
INFO:tensorflow:Evaluation [4/10]
INFO:tensorflow:Evaluation [4/10]
INFO:tensorflow:Evaluation [5/10]
INFO:tensorflow:Evaluation [5/10]
INFO:tensorflow:Evaluation [6/10]
INFO:tensorflow:Evaluation [6/10]
INFO:tensorflow:Evaluation [7/10]
INFO:tensorflow:Evaluation [7/10]
INFO:tensorflow:Evaluation [8/10]
INFO:tensorflow:Evaluation [8/10]
INFO:tensorflow:Evaluation [9/10]
INFO:tensorflow:Evaluation [9/10]
INFO:tensorflow:Inference Time : 0.54029s
INFO:tensorflow:Inference Time : 0.54029s
INFO:tensorflow:Finished evaluation at 2022-01-29-02:21:53
INFO:tensorflow:Finished evaluation at 2022-01-29-02:21:53
INFO:tensorflow:Saving dict for global step 20: accuracy = 0.6931818, accuracy_baseline = 0.625, auc = 0.73532283, auc_precision_recall = 0.630229, average_loss = 0.65179086, global_step = 20, label/mean = 0.375, loss = 0.63768697, precision = 0.60714287, prediction/mean = 0.4162652, recall = 0.5151515
INFO:tensorflow:Saving dict for global step 20: accuracy = 0.6931818, accuracy_baseline = 0.625, auc = 0.73532283, auc_precision_recall = 0.630229, average_loss = 0.65179086, global_step = 20, label/mean = 0.375, loss = 0.63768697, precision = 0.60714287, prediction/mean = 0.4162652, recall = 0.5151515
INFO:tensorflow:Saving 'checkpoint_path' summary for global step 20: /tmp/tmpwl5e5eaq/model.ckpt-20
INFO:tensorflow:Saving 'checkpoint_path' summary for global step 20: /tmp/tmpwl5e5eaq/model.ckpt-20
{'accuracy': 0.6931818,
 'accuracy_baseline': 0.625,
 'auc': 0.73532283,
 'auc_precision_recall': 0.630229,
 'average_loss': 0.65179086,
 'label/mean': 0.375,
 'loss': 0.63768697,
 'precision': 0.60714287,
 'prediction/mean': 0.4162652,
 'recall': 0.5151515,
 'global_step': 20}

TF2: Sử dụng Keras WideDeepModel

Trong TensorFlow 2, bạn có thể tạo một phiên bản của Keras tf.compat.v1.keras.models.WideDeepModel để thay thế cho một phiên bản được tạo bởi tf.estimator.DNNLinearCombinedEstimator , với các mức tùy chỉnh tương tự do người dùng chỉ định (ví dụ: như trong ví dụ trước, khả năng tùy chỉnh trình tối ưu hóa mô hình đã chọn).

WideDeepModel này được xây dựng trên cơ sở cấu thành LinearModel hình tuyến tính và Mô hình DNN tùy chỉnh, cả hai đều được thảo luận trong hai ví dụ trước. Một mô hình tuyến tính tùy chỉnh cũng có thể được sử dụng thay cho Keras LinearModel hợp sẵn nếu muốn.

Nếu bạn muốn xây dựng mô hình của riêng mình thay vì một công cụ ước tính đóng hộp, hãy xem cách xây dựng mô hình keras.Sequential . Để biết thêm thông tin về đào tạo tùy chỉnh và trình tối ưu hóa, bạn cũng có thể xem hướng dẫn này .

# Create LinearModel and DNN Model as in Examples 1 and 2
optimizer = create_sample_optimizer('tf2')

linear_model = tf.compat.v1.keras.experimental.LinearModel()
linear_model.compile(loss='mse', optimizer=optimizer, metrics=['accuracy'])
linear_model.fit(x_train, y_train, epochs=10, verbose=0)

dnn_model = tf.keras.models.Sequential(
    [tf.keras.layers.Dense(128, activation='relu'),
     tf.keras.layers.Dense(1)])
dnn_model.compile(loss='mse', optimizer=optimizer, metrics=['accuracy'])
combined_model = tf.compat.v1.keras.experimental.WideDeepModel(linear_model,
                                                               dnn_model)
combined_model.compile(
    optimizer=[optimizer, optimizer], loss='mse', metrics=['accuracy'])
combined_model.fit([x_train, x_train], y_train, epochs=10)
combined_model.evaluate(x_eval, y_eval, return_dict=True)
Epoch 1/10
20/20 [==============================] - 0s 2ms/step - loss: 1118.0448 - accuracy: 0.6715
Epoch 2/10
20/20 [==============================] - 0s 2ms/step - loss: 0.5682 - accuracy: 0.7305
Epoch 3/10
20/20 [==============================] - 0s 2ms/step - loss: 0.2719 - accuracy: 0.7671
Epoch 4/10
20/20 [==============================] - 0s 2ms/step - loss: 0.2032 - accuracy: 0.7831
Epoch 5/10
20/20 [==============================] - 0s 2ms/step - loss: 0.1911 - accuracy: 0.7783
Epoch 6/10
20/20 [==============================] - 0s 2ms/step - loss: 0.1895 - accuracy: 0.7863
Epoch 7/10
20/20 [==============================] - 0s 2ms/step - loss: 0.1882 - accuracy: 0.7863
Epoch 8/10
20/20 [==============================] - 0s 2ms/step - loss: 0.1717 - accuracy: 0.7974
Epoch 9/10
20/20 [==============================] - 0s 2ms/step - loss: 0.1701 - accuracy: 0.7927
Epoch 10/10
20/20 [==============================] - 0s 2ms/step - loss: 0.1684 - accuracy: 0.7990
9/9 [==============================] - 0s 2ms/step - loss: 0.1930 - accuracy: 0.7424
{'loss': 0.19299836456775665, 'accuracy': 0.7424242496490479}

Ví dụ 4: Di chuyển từ BoostedTreesEstimator

TF1: Sử dụng BoostedTreesEstimator

Trong TensorFlow 1, bạn có thể sử dụng tf.estimator.BoostedTreesEstimator để tạo đường cơ sở nhằm tạo mô hình Gradient Bo boost đường cơ sở bằng cách sử dụng một nhóm cây quyết định cho các vấn đề hồi quy và phân loại. Chức năng này không còn được bao gồm trong TensorFlow 2.

bt_estimator = tf1.estimator.BoostedTreesEstimator(
    head=tf.estimator.BinaryClassHead(),
    n_batches_per_layer=1,
    max_depth=10,
    n_trees=1000,
    feature_columns=feature_columns)
bt_estimator.train(input_fn=_input_fn, steps=1000)
bt_estimator.evaluate(input_fn=_eval_input_fn, steps=100)

TF2: Sử dụng Rừng Quyết định TensorFlow

Trong TensorFlow 2, mô hình thay thế được đóng gói sẵn gần nhất cho mô hình được tạo bởi tf.estimator.BoostedTreesEstimator được tạo bằng cách sử dụng tfdf.keras.GradientBoostedTreesModel , tạo ra một chuỗi các cây quyết định nông được huấn luyện tuần tự, mỗi mô hình được thiết kế để "học" từ các lỗi được thực hiện bởi những người tiền nhiệm của nó trong trình tự.

GradientBoostedTreesModel cung cấp nhiều tùy chọn hơn để tùy chỉnh, cho phép đặc tả mọi thứ từ các ràng buộc độ sâu cơ bản đến các điều kiện dừng sớm. Xem tại đây để biết thêm chi tiết thuộc tính GradientBoostedTreesModel .

gbt_model = tfdf.keras.GradientBoostedTreesModel(
    task=tfdf.keras.Task.CLASSIFICATION)
gbt_model.compile(metrics=['mse', 'accuracy'])
Use /tmp/tmpbr1acn2_ as temporary training directory
train_df, eval_df = x_train.copy(), x_eval.copy()
train_df['survived'], eval_df['survived'] = y_train, y_eval

train_dataset = tfdf.keras.pd_dataframe_to_tf_dataset(train_df, label='survived')
eval_dataset = tfdf.keras.pd_dataframe_to_tf_dataset(eval_df, label='survived')

gbt_model.fit(train_dataset)
gbt_model.evaluate(eval_dataset, return_dict=True)
Starting reading the dataset
/tmpfs/src/tf_docs_env/lib/python3.7/site-packages/tensorflow_decision_forests/keras/core.py:2036: FutureWarning: In a future version of pandas all arguments of DataFrame.drop except for the argument 'labels' will be keyword-only
  features_dataframe = dataframe.drop(label, 1)
1/1 [==============================] - ETA: 0s
Dataset read in 0:00:03.161776
Training model
Model trained in 0:00:00.102649
Compiling model
1/1 [==============================] - 3s 3s/step
[INFO kernel.cc:1153] Loading model from path
[INFO abstract_model.cc:1063] Engine "GradientBoostedTreesQuickScorerExtended" built
[INFO kernel.cc:1001] Use fast generic engine
WARNING:tensorflow:AutoGraph could not transform <function simple_ml_inference_op_with_handle at 0x7f95e9db4e60> and will run it as-is.
Please report this to the TensorFlow team. When filing the bug, set the verbosity to 10 (on Linux, `export AUTOGRAPH_VERBOSITY=10`) and attach the full output.
Cause: could not get source code
To silence this warning, decorate the function with @tf.autograph.experimental.do_not_convert
WARNING:tensorflow:AutoGraph could not transform <function simple_ml_inference_op_with_handle at 0x7f95e9db4e60> and will run it as-is.
Please report this to the TensorFlow team. When filing the bug, set the verbosity to 10 (on Linux, `export AUTOGRAPH_VERBOSITY=10`) and attach the full output.
Cause: could not get source code
To silence this warning, decorate the function with @tf.autograph.experimental.do_not_convert
WARNING: AutoGraph could not transform <function simple_ml_inference_op_with_handle at 0x7f95e9db4e60> and will run it as-is.
Please report this to the TensorFlow team. When filing the bug, set the verbosity to 10 (on Linux, `export AUTOGRAPH_VERBOSITY=10`) and attach the full output.
Cause: could not get source code
To silence this warning, decorate the function with @tf.autograph.experimental.do_not_convert
1/1 [==============================] - 0s 388ms/step - loss: 0.0000e+00 - mse: 0.1308 - accuracy: 0.8144
{'loss': 0.0, 'mse': 0.13076548278331757, 'accuracy': 0.814393937587738}

Trong TensorFlow 2, cũng có một thay thế TFDF có sẵn khác cho mô hình được tạo bởi tf.estimator.BoostedTreesEstimator - tfdf.keras.RandomForestModel . RandomForestModel tạo ra một người học mạnh mẽ, có khả năng chống chịu quá mức bao gồm một tập hợp biểu quyết của các cây quyết định sâu, mỗi cây được đào tạo trên các tập con ngẫu nhiên của tập dữ liệu đào tạo đầu vào.

RandomForestModelGradientBoostedTreesModel cung cấp các mức độ tùy chỉnh rộng rãi tương tự. Lựa chọn giữa chúng là vấn đề cụ thể và phụ thuộc vào nhiệm vụ hoặc ứng dụng của bạn.

Kiểm tra tài liệu API để biết thêm thông tin về thuộc tính RandomForestModelGradientBoostedTreesModel .

rf_model = tfdf.keras.RandomForestModel(
    task=tfdf.keras.Task.CLASSIFICATION)
rf_model.compile(metrics=['mse', 'accuracy'])
Use /tmp/tmpluh2ebcj as temporary training directory
rf_model.fit(train_dataset)
rf_model.evaluate(eval_dataset, return_dict=True)
Starting reading the dataset
1/1 [==============================] - ETA: 0s
Dataset read in 0:00:00.094262
Training model
Model trained in 0:00:00.083656
Compiling model
1/1 [==============================] - 0s 260ms/step
[INFO kernel.cc:1153] Loading model from path
[INFO kernel.cc:1001] Use fast generic engine
1/1 [==============================] - 0s 123ms/step - loss: 0.0000e+00 - mse: 0.1270 - accuracy: 0.8636
{'loss': 0.0, 'mse': 0.12698587775230408, 'accuracy': 0.8636363744735718}