مشاهده در TensorFlow.org | در Google Colab اجرا شود | مشاهده منبع در GitHub | دانلود دفترچه یادداشت |
برآوردگرهای کنسرو شده (یا از پیش ساخته شده) به طور سنتی در TensorFlow 1 به عنوان راههای سریع و آسان برای آموزش مدلها برای انواع موارد استفاده معمولی استفاده میشوند. TensorFlow 2 جایگزین های تقریبی ساده ای برای تعدادی از آنها از طریق مدل های Keras فراهم می کند. برای برآوردگرهای کنسرو شده ای که جایگزین های داخلی TensorFlow 2 ندارند، هنوز هم می توانید جایگزین خود را نسبتاً آسان بسازید.
این راهنما چند نمونه از معادلهای مستقیم و جایگزینهای سفارشی را نشان میدهد تا نشان دهد که چگونه مدلهای مشتق شده از tf.estimator
TensorFlow 1 را میتوان به TF2 با Keras منتقل کرد.
یعنی، این راهنما شامل نمونه هایی برای مهاجرت است:
- از
tf.estimator
'sLinearEstimator
،Classifier
یاRegressor
در TensorFlow 1 تا Kerastf.compat.v1.keras.models.LinearModel
در TensorFlow 2 - از
tf.estimator
,Classifier
یاDNNEstimator
Regressor
در TensorFlow 1 تا Keras DNN ModelKeras سفارشی در TensorFlow 2 - از
tf.estimator
,Classifier
یاDNNLinearCombinedEstimator
Regressor
در TensorFlow 1 تاtf.compat.v1.keras.models.WideDeepModel
در TensorFlow 2 - از
tf.estimator
'sBoostedTreesEstimator
،Classifier
یاRegressor
در TensorFlow 1 تاtf.compat.v1.keras.models.WideDeepModel
در TensorFlow 2
پیشروی رایج برای آموزش یک مدل، پیش پردازش ویژگی است که برای مدلهای تخمینگر TensorFlow 1 با tf.feature_column
انجام میشود. برای اطلاعات بیشتر در مورد پیش پردازش ویژگی در TensorFlow 2، به این راهنمای مهاجرت ستون های ویژگی مراجعه کنید.
برپایی
با چند وارد کردن ضروری TensorFlow شروع کنید،
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).
چند داده ساده را برای نمایش از مجموعه داده استاندارد تایتانیک آماده کنید،
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)
و روشی برای نمونه سازی یک بهینه ساز نمونه ساده برای استفاده با مدل های مختلف TensorFlow 1 Estimator و TensorFlow 2 Keras ایجاد کنید.
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
مثال 1: مهاجرت از LinearEstimator
TF1: استفاده از LinearEstimator
در TensorFlow 1، می توانید از tf.estimator.LinearEstimator
برای ایجاد یک مدل خطی پایه برای مشکلات رگرسیون و طبقه بندی استفاده کنید.
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: استفاده از Keras LinearModel
در TensorFlow 2، می توانید نمونه ای از Keras tf.compat.v1.keras.models.LinearModel
ایجاد کنید که جایگزین tf.estimator.LinearEstimator
است. مسیر tf.compat.v1.keras
برای نشان دادن اینکه مدل از پیش ساخته شده برای سازگاری وجود دارد استفاده می شود.
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}
مثال 2: مهاجرت از DNNEstimator
TF1: با استفاده از DNNEstimator
در TensorFlow 1، می توانید از tf.estimator.DNNEstimator
برای ایجاد یک مدل DNN پایه برای مشکلات رگرسیون و طبقه بندی استفاده کنید.
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: استفاده از Keras برای ایجاد یک مدل DNN سفارشی
در TensorFlow 2، می توانید یک مدل DNN سفارشی ایجاد کنید تا جایگزین مدل تولید شده توسط tf.estimator.DNNEstimator
، با سطوح مشابهی از سفارشی سازی مشخص شده توسط کاربر (به عنوان مثال، مانند مثال قبلی، توانایی سفارشی کردن بهینه ساز مدل انتخابی) .
یک گردش کار مشابه را می توان برای جایگزینی tf.estimator.experimental.RNNEstimator
با مدل Keras RNN استفاده کرد. Keras تعدادی انتخاب داخلی و قابل تنظیم را از طریق tf.keras.layers.RNN
، tf.keras.layers.LSTM
و tf.keras.layers.GRU
- برای جزئیات بیشتر اینجا را ببینید.
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}
مثال 3: مهاجرت از DNNLinearCombinedEstimator
TF1: استفاده از DNNLinearCombinedEstimator
در TensorFlow 1، می توانید از tf.estimator.DNNLinearCombinedEstimator
برای ایجاد یک مدل ترکیبی پایه برای مشکلات رگرسیون و طبقه بندی با ظرفیت سفارشی سازی برای اجزای خطی و DNN آن استفاده کنید.
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: استفاده از Keras WideDeepModel
در TensorFlow 2، میتوانید نمونهای از Keras tf.compat.v1.keras.models.WideDeepModel
را ایجاد کنید تا جایگزین نمونه تولید شده توسط tf.estimator.DNNLinearCombinedEstimator
، با سطوح مشابهی از سفارشیسازی مشخص شده توسط کاربر (به عنوان مثال، مانند مثال قبلی، توانایی سفارشی سازی بهینه ساز مدل انتخابی).
این WideDeepModel
بر اساس یک LinearModel
تشکیل دهنده و یک مدل DNN سفارشی ساخته شده است، که هر دو در دو مثال قبل مورد بحث قرار گرفتند. در صورت تمایل می توان از یک مدل خطی سفارشی نیز به جای Keras LinearModel
استفاده کرد.
اگر میخواهید به جای تخمینگر کنسرو شده مدل خود را بسازید، نحوه ساخت keras.Sequential
را بررسی کنید. مدل ترتیبی . برای اطلاعات بیشتر در مورد آموزش های سفارشی و بهینه سازها، می توانید این راهنما را نیز بررسی کنید.
# 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}
مثال 4: مهاجرت از BoostedTreesEstimator
TF1: استفاده از BoostedTreesEstimator
در TensorFlow 1، می توانید از tf.estimator.BoostedTreesEstimator
برای ایجاد یک خط مبنا برای ایجاد یک مدل تقویت گرادیان پایه با استفاده از مجموعه ای از درختان تصمیم برای مشکلات رگرسیون و طبقه بندی استفاده کنید. این قابلیت دیگر در 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: استفاده از جنگلهای تصمیمگیری TensorFlow
در TensorFlow 2، نزدیکترین جایگزین از پیش بسته بندی شده برای یک مدل تولید شده توسط tf.estimator.BoostedTreesEstimator
، مدلی است که با استفاده از tfdf.keras.GradientBoostedTreesModel
ایجاد شده است، که دنباله ای از درخت های تصمیم کم عمق آموزش داده شده را ایجاد می کند، که هر کدام از errorslear طراحی شده اند. ساخته شده توسط پیشینیان خود در سکانس.
GradientBoostedTreesModel
گزینههای بیشتری را برای سفارشیسازی فراهم میکند، که به شما امکان میدهد همه چیز از محدودیتهای عمقی اولیه تا شرایط توقف اولیه را مشخص کنید. برای جزئیات بیشتر ویژگی 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}
در TensorFlow 2، جایگزین TFDF دیگری نیز برای مدل تولید شده توسط tf.estimator.BoostedTreesEstimator
- tfdf.keras.RandomForestModel
دارد. RandomForestModel
یک یادگیر قوی و مقاوم در برابر بیش از حد برازش ایجاد می کند که از جمعیتی از درختان تصمیم گیری عمیق تشکیل شده است که هر کدام بر روی زیرمجموعه های تصادفی از مجموعه داده های آموزشی ورودی آموزش دیده اند.
RandomForestModel
و GradientBoostedTreesModel
به طور مشابه سطوح گسترده ای از سفارشی سازی را ارائه می دهند. انتخاب بین آنها به مشکل خاص بستگی دارد و به وظیفه یا برنامه شما بستگی دارد.
برای اطلاعات بیشتر در مورد ویژگی RandomForestModel
و GradientBoostedTreesModel
، اسناد API را بررسی کنید.
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}