برآوردگرها

مشاهده در TensorFlow.org در Google Colab اجرا کنید مشاهده منبع در GitHub دانلود دفترچه یادداشت

این سند معرفی tf.estimator -a سطح بالا TensorFlow API. برآورد کنندگان اقدامات زیر را شامل می شوند:

  • آموزش
  • ارزیابی
  • پیش بینی
  • صادرات برای سرو

TensorFlow چندین برآورد کننده از پیش ساخته شده را پیاده می کند. برآوردگرهای سفارشی هنوز پشتیبانی می شوند ، اما عمدتا به عنوان معیار سازگاری با گذشته هستند. برآوردگرهای سفارشی باید برای کد جدید استفاده نمی شود. همه برآوردگرهای-پیش ساخته شده و یا سفارشی کلاس را بر اساس آنهایی که هستند tf.estimator.Estimator کلاس.

برای یک مثال سریع، سعی کنید آموزش برآورد . برای یک مرور کلی از طراحی API، بررسی کاغذ سفید .

برپایی

pip install -U tensorflow_datasets
import tempfile
import os

import tensorflow as tf
import tensorflow_datasets as tfds

مزایای

شبیه به یک tf.keras.Model ، یک estimator یک انتزاع سطح مدل است. tf.estimator برای فراهم می کند برخی قابلیت های در حال حاضر هنوز در حال توسعه tf.keras . اینها هستند:

  • آموزش مبتنی بر پارامتر سرور
  • کامل TFX ادغام

برآورد کننده قابلیت ها

برآورد کنندگان مزایای زیر را ارائه می دهند:

  • می توانید مدلهای مبتنی بر برآورد کننده را در میزبان محلی یا در محیط چند سرور توزیع شده بدون تغییر مدل خود اجرا کنید. علاوه بر این ، می توانید مدلهای مبتنی بر برآوردگر را بر روی CPU ها ، GPU ها یا TPU ها بدون کدگذاری مجدد مدل خود اجرا کنید.
  • برآوردگران یک حلقه آموزشی توزیع شده ایمن ارائه می دهند که نحوه و زمان انجام آن را کنترل می کند.
    • بارگیری داده ها
    • موارد استثنا را مدیریت کنید
    • پرونده های بازرسی ایجاد کرده و از خرابی ها بازیابی کنید
    • خلاصه ها را برای TensorBoard ذخیره کنید

هنگام نوشتن یک برنامه با برآورد کننده ها ، باید خط لوله ورودی داده را از مدل جدا کنید. این جداسازی آزمایش ها را با مجموعه داده های مختلف ساده می کند.

استفاده از برآوردگرهای از پیش ساخته شده

برآوردگرهای از پیش ساخته شده شما را قادر می سازد تا در سطح مفهومی بسیار بالاتر از API های اصلی TensorFlow کار کنید. دیگر نیازی نیست نگران ایجاد نمودار محاسباتی یا جلسات باشید زیرا برآوردکنندگان تمام "لوله کشی" را برای شما انجام می دهند. علاوه بر این ، برآوردگرهای از پیش ساخته شده به شما امکان می دهند معماری مدلهای مختلف را با ایجاد حداقل تغییرات کد آزمایش کنید. tf.estimator.DNNClassifier ، برای مثال، یک کلاس برآورد از پیش ساخته شده که مدل های طبقه بندی قطار در متراکم، شبکه های عصبی غذا به جلو بر اساس است.

یک برنامه TensorFlow با تکیه بر برآوردگر از پیش ساخته شده معمولاً شامل چهار مرحله زیر است:

1. توابع ورودی را بنویسید

به عنوان مثال ، ممکن است یک تابع برای وارد کردن مجموعه آموزش و یک تابع دیگر برای وارد کردن مجموعه آزمایش ایجاد کنید. برآوردگران انتظار دارند ورودی های آنها به صورت جفت شیء قالب بندی شود:

  • فرهنگ لغتی که در آن کلیدها نام ویژگی ها هستند و مقادیر Tensors (یا SparseTensors) حاوی اطلاعات ویژگی مربوطه است
  • تنسور حاوی یک یا چند برچسب

input_fn باید یک بازگشت tf.data.Dataset که بازده جفت در آن قالب.

به عنوان مثال، کد زیر را ایجاد tf.data.Dataset را از مجموعه داده تایتانیک train.csv فایل:

def train_input_fn():
  titanic_file = tf.keras.utils.get_file("train.csv", "https://storage.googleapis.com/tf-datasets/titanic/train.csv")
  titanic = tf.data.experimental.make_csv_dataset(
      titanic_file, batch_size=32,
      label_name="survived")
  titanic_batches = (
      titanic.cache().repeat().shuffle(500)
      .prefetch(tf.data.AUTOTUNE))
  return titanic_batches

input_fn در یک اعدام tf.Graph و همچنین می تواند به طور مستقیم بازگشت (features_dics, labels) جفت حاوی تانسورها نمودار، اما این خطا خارج مستعد از موارد ساده مانند ثابت بازگشت است.

2. ستون های ویژگی را تعریف کنید.

هر tf.feature_column شناسایی نام یک ویژگی، نوع آن، و هر ورودی قبل از پردازش.

به عنوان مثال ، قطعه زیر سه ستون ویژگی ایجاد می کند.

  • اولین استفاده از age ویژگی به طور مستقیم به عنوان یک ورودی ممیز شناور.
  • دومین با استفاده از class ویژگی به عنوان یک ورودی قطعی.
  • کاربردهای سوم embark_town به عنوان یک ورودی طبقه، اما با استفاده از hashing trick برای اجتناب از نیاز به شمردن گزینه ها، و برای تنظیم تعداد از گزینه.

برای کسب اطلاعات بیشتر، بررسی آموزش ستون ویژگی .

age = tf.feature_column.numeric_column('age')
cls = tf.feature_column.categorical_column_with_vocabulary_list('class', ['First', 'Second', 'Third']) 
embark = tf.feature_column.categorical_column_with_hash_bucket('embark_town', 32)

3. برآورد کننده از پیش ساخته مربوطه را فوریت دهید.

به عنوان مثال، در اینجا یک نمونه نمونه از یک برآورد به نام از پیش ساخته شده است LinearClassifier :

model_dir = tempfile.mkdtemp()
model = tf.estimator.LinearClassifier(
    model_dir=model_dir,
    feature_columns=[embark, cls, age],
    n_classes=2
)
INFO:tensorflow:Using default config.
INFO:tensorflow:Using config: {'_model_dir': '/tmp/tmpr_ditsvt', '_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}

برای اطلاعات بیشتر، شما می توانید رفتن خطی طبقه بندی آموزش .

4. با یک روش آموزش ، ارزیابی یا استنتاج تماس بگیرید.

همه برآوردگرهای ارائه train ، evaluate ، و predict روش.

model = model.train(input_fn=train_input_fn, steps=100)
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.
/tmpfs/src/tf_docs_env/lib/python3.7/site-packages/keras/engine/base_layer_v1.py:1684: UserWarning: `layer.add_variable` is deprecated and will be removed in a future version. Please use `layer.add_weight` method instead.
  warnings.warn('`layer.add_variable` is deprecated and '
WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.7/site-packages/keras/optimizer_v2/ftrl.py:147: 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/tmpr_ditsvt/model.ckpt.
INFO:tensorflow:Calling checkpoint listeners after saving checkpoint 0...
INFO:tensorflow:loss = 0.6931472, step = 0
INFO:tensorflow:Calling checkpoint listeners before saving checkpoint 100...
INFO:tensorflow:Saving checkpoints for 100 into /tmp/tmpr_ditsvt/model.ckpt.
INFO:tensorflow:Calling checkpoint listeners after saving checkpoint 100...
INFO:tensorflow:Loss for final step: 0.617588.
2021-08-28 01:41:00.871385: W tensorflow/core/kernels/data/cache_dataset_ops.cc:768] The calling iterator did not fully read the dataset being cached. In order to avoid unexpected truncation of the dataset, the partially cached contents of the dataset  will be discarded. This can happen if you have an input pipeline similar to `dataset.cache().take(k).repeat()`. You should use `dataset.take(k).cache().repeat()` instead.
result = model.evaluate(train_input_fn, steps=10)

for key, value in result.items():
  print(key, ":", value)
INFO:tensorflow:Calling model_fn.
INFO:tensorflow:Done calling model_fn.
INFO:tensorflow:Starting evaluation at 2021-08-28T01:41:01
INFO:tensorflow:Graph was finalized.
INFO:tensorflow:Restoring parameters from /tmp/tmpr_ditsvt/model.ckpt-100
INFO:tensorflow:Running local_init_op.
INFO:tensorflow:Done running local_init_op.
INFO:tensorflow:Evaluation [1/10]
INFO:tensorflow:Evaluation [2/10]
INFO:tensorflow:Evaluation [3/10]
INFO:tensorflow:Evaluation [4/10]
INFO:tensorflow:Evaluation [5/10]
INFO:tensorflow:Evaluation [6/10]
INFO:tensorflow:Evaluation [7/10]
INFO:tensorflow:Evaluation [8/10]
INFO:tensorflow:Evaluation [9/10]
INFO:tensorflow:Evaluation [10/10]
INFO:tensorflow:Inference Time : 0.62957s
INFO:tensorflow:Finished evaluation at 2021-08-28-01:41:02
INFO:tensorflow:Saving dict for global step 100: accuracy = 0.6375, accuracy_baseline = 0.6125, auc = 0.71408004, auc_precision_recall = 0.59793115, average_loss = 0.63505936, global_step = 100, label/mean = 0.3875, loss = 0.63505936, precision = 0.525, prediction/mean = 0.51330584, recall = 0.67741936
INFO:tensorflow:Saving 'checkpoint_path' summary for global step 100: /tmp/tmpr_ditsvt/model.ckpt-100
accuracy : 0.6375
accuracy_baseline : 0.6125
auc : 0.71408004
auc_precision_recall : 0.59793115
average_loss : 0.63505936
label/mean : 0.3875
loss : 0.63505936
precision : 0.525
prediction/mean : 0.51330584
recall : 0.67741936
global_step : 100
2021-08-28 01:41:02.211817: W tensorflow/core/kernels/data/cache_dataset_ops.cc:768] The calling iterator did not fully read the dataset being cached. In order to avoid unexpected truncation of the dataset, the partially cached contents of the dataset  will be discarded. This can happen if you have an input pipeline similar to `dataset.cache().take(k).repeat()`. You should use `dataset.take(k).cache().repeat()` instead.
for pred in model.predict(train_input_fn):
  for key, value in pred.items():
    print(key, ":", value)
  break
INFO:tensorflow:Calling model_fn.
INFO:tensorflow:Done calling model_fn.
INFO:tensorflow:Graph was finalized.
INFO:tensorflow:Restoring parameters from /tmp/tmpr_ditsvt/model.ckpt-100
INFO:tensorflow:Running local_init_op.
INFO:tensorflow:Done running local_init_op.
logits : [-0.67344487]
logistic : [0.3377259]
probabilities : [0.66227406 0.3377259 ]
class_ids : [0]
classes : [b'0']
all_class_ids : [0 1]
all_classes : [b'0' b'1']
2021-08-28 01:41:03.085864: W tensorflow/core/kernels/data/cache_dataset_ops.cc:768] The calling iterator did not fully read the dataset being cached. In order to avoid unexpected truncation of the dataset, the partially cached contents of the dataset  will be discarded. This can happen if you have an input pipeline similar to `dataset.cache().take(k).repeat()`. You should use `dataset.take(k).cache().repeat()` instead.

مزایای برآوردگرهای از پیش ساخته شده

برآوردگران از پیش ساخته شده بهترین شیوه ها را رمزگذاری می کنند و مزایای زیر را ارائه می دهند:

  • بهترین شیوه ها برای تعیین محل اجرای قسمت های مختلف نمودار محاسباتی ، اجرای استراتژی ها روی یک دستگاه یا روی یک خوشه.
  • بهترین شیوه ها برای نوشتن رویداد (خلاصه) و خلاصه های مفید جهانی.

اگر از برآوردگرهای از پیش ساخته شده استفاده نمی کنید ، باید خودتان ویژگی های قبلی را پیاده سازی کنید.

برآوردگرهای سفارشی

قلب هر برآورد-آیا از پیش ساخته شده و یا تابع مدل، آن سفارشی است model_fn است که یک روش است که ایجاد نمودار برای آموزش، ارزیابی و پیش بینی. وقتی از برآوردگر از پیش ساخته شده استفاده می کنید ، شخص دیگری قبلاً تابع مدل را پیاده کرده است. هنگام تکیه بر یک برآوردگر سفارشی ، باید خود تابع مدل را بنویسید.

برآورد کننده ای از مدل Keras ایجاد کنید

شما می توانید مدل Keras موجود به برآوردگرهای با تبدیل tf.keras.estimator.model_to_estimator . این می تواند مفید باشد اگر می خواهید کد مدل خود را مدرن کنید ، اما برنامه آموزشی شما هنوز نیاز به برآورد کننده دارد.

از مدل Keras MobileNet V2 استفاده کنید و مدل را با بهینه ساز ، ضرر و معیارها برای آموزش با موارد زیر کامپایل کنید:

keras_mobilenet_v2 = tf.keras.applications.MobileNetV2(
    input_shape=(160, 160, 3), include_top=False)
keras_mobilenet_v2.trainable = False

estimator_model = tf.keras.Sequential([
    keras_mobilenet_v2,
    tf.keras.layers.GlobalAveragePooling2D(),
    tf.keras.layers.Dense(1)
])

# Compile the model
estimator_model.compile(
    optimizer='adam',
    loss=tf.keras.losses.BinaryCrossentropy(from_logits=True),
    metrics=['accuracy'])
Downloading data from https://storage.googleapis.com/tensorflow/keras-applications/mobilenet_v2/mobilenet_v2_weights_tf_dim_ordering_tf_kernels_1.0_160_no_top.h5
9412608/9406464 [==============================] - 0s 0us/step
9420800/9406464 [==============================] - 0s 0us/step

ایجاد یک Estimator از مدل Keras وارد شده است. دولت مدل اولیه از مدل Keras در ایجاد حفظ Estimator :

est_mobilenet_v2 = tf.keras.estimator.model_to_estimator(keras_model=estimator_model)
INFO:tensorflow:Using default config.
WARNING:tensorflow:Using temporary folder as model directory: /tmp/tmp3_e4p5uk
INFO:tensorflow:Using the Keras model provided.
/tmpfs/src/tf_docs_env/lib/python3.7/site-packages/keras/backend.py:401: UserWarning: `tf.keras.backend.set_learning_phase` is deprecated and will be removed after 2020-10-11. To update it, simply pass a True/False value to the `training` argument of the `__call__` method of your layer or model.
  warnings.warn('`tf.keras.backend.set_learning_phase` is deprecated and '
/tmpfs/src/tf_docs_env/lib/python3.7/site-packages/keras/utils/generic_utils.py:497: CustomMaskWarning: Custom mask layers require a config and must override get_config. When loading, the custom mask layer must be passed to the custom_objects argument.
  category=CustomMaskWarning)
INFO:tensorflow:Using config: {'_model_dir': '/tmp/tmp3_e4p5uk', '_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}

درمان مشتق شده Estimator به عنوان شما را با هر نوع دیگر Estimator .

IMG_SIZE = 160  # All images will be resized to 160x160

def preprocess(image, label):
  image = tf.cast(image, tf.float32)
  image = (image/127.5) - 1
  image = tf.image.resize(image, (IMG_SIZE, IMG_SIZE))
  return image, label
def train_input_fn(batch_size):
  data = tfds.load('cats_vs_dogs', as_supervised=True)
  train_data = data['train']
  train_data = train_data.map(preprocess).shuffle(500).batch(batch_size)
  return train_data

برای آموزش ، با عملکرد قطار Estimator تماس بگیرید:

est_mobilenet_v2.train(input_fn=lambda: train_input_fn(32), steps=50)
INFO:tensorflow:Calling model_fn.
INFO:tensorflow:Calling model_fn.
INFO:tensorflow:Done calling model_fn.
INFO:tensorflow:Done calling model_fn.
INFO:tensorflow:Warm-starting with WarmStartSettings: WarmStartSettings(ckpt_to_initialize_from='/tmp/tmp3_e4p5uk/keras/keras_model.ckpt', vars_to_warm_start='.*', var_name_to_vocab_info={}, var_name_to_prev_var_name={})
INFO:tensorflow:Warm-starting with WarmStartSettings: WarmStartSettings(ckpt_to_initialize_from='/tmp/tmp3_e4p5uk/keras/keras_model.ckpt', vars_to_warm_start='.*', var_name_to_vocab_info={}, var_name_to_prev_var_name={})
INFO:tensorflow:Warm-starting from: /tmp/tmp3_e4p5uk/keras/keras_model.ckpt
INFO:tensorflow:Warm-starting from: /tmp/tmp3_e4p5uk/keras/keras_model.ckpt
INFO:tensorflow:Warm-starting variables only in TRAINABLE_VARIABLES.
INFO:tensorflow:Warm-starting variables only in TRAINABLE_VARIABLES.
INFO:tensorflow:Warm-started 158 variables.
INFO:tensorflow:Warm-started 158 variables.
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/tmp3_e4p5uk/model.ckpt.
INFO:tensorflow:Saving checkpoints for 0 into /tmp/tmp3_e4p5uk/model.ckpt.
INFO:tensorflow:Calling checkpoint listeners after saving checkpoint 0...
INFO:tensorflow:Calling checkpoint listeners after saving checkpoint 0...
INFO:tensorflow:loss = 0.7921847, step = 0
INFO:tensorflow:loss = 0.7921847, step = 0
INFO:tensorflow:Calling checkpoint listeners before saving checkpoint 50...
INFO:tensorflow:Calling checkpoint listeners before saving checkpoint 50...
INFO:tensorflow:Saving checkpoints for 50 into /tmp/tmp3_e4p5uk/model.ckpt.
INFO:tensorflow:Saving checkpoints for 50 into /tmp/tmp3_e4p5uk/model.ckpt.
INFO:tensorflow:Calling checkpoint listeners after saving checkpoint 50...
INFO:tensorflow:Calling checkpoint listeners after saving checkpoint 50...
INFO:tensorflow:Loss for final step: 0.64612174.
INFO:tensorflow:Loss for final step: 0.64612174.
<tensorflow_estimator.python.estimator.estimator.EstimatorV2 at 0x7fe8c4524310>

به طور مشابه ، برای ارزیابی ، تابع ارزیابی برآورد کننده را فراخوانی کنید:

est_mobilenet_v2.evaluate(input_fn=lambda: train_input_fn(32), steps=10)
INFO:tensorflow:Calling model_fn.
INFO:tensorflow:Calling model_fn.
/tmpfs/src/tf_docs_env/lib/python3.7/site-packages/keras/engine/training.py:2470: UserWarning: `Model.state_updates` will be removed in a future version. This property should not be used in TensorFlow 2.0, as `updates` are applied automatically.
  warnings.warn('`Model.state_updates` will be removed in a future version. '
INFO:tensorflow:Done calling model_fn.
INFO:tensorflow:Done calling model_fn.
INFO:tensorflow:Starting evaluation at 2021-08-28T01:41:32
INFO:tensorflow:Starting evaluation at 2021-08-28T01:41:32
INFO:tensorflow:Graph was finalized.
INFO:tensorflow:Graph was finalized.
INFO:tensorflow:Restoring parameters from /tmp/tmp3_e4p5uk/model.ckpt-50
INFO:tensorflow:Restoring parameters from /tmp/tmp3_e4p5uk/model.ckpt-50
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:Evaluation [10/10]
INFO:tensorflow:Evaluation [10/10]
INFO:tensorflow:Inference Time : 5.56003s
INFO:tensorflow:Inference Time : 5.56003s
INFO:tensorflow:Finished evaluation at 2021-08-28-01:41:37
INFO:tensorflow:Finished evaluation at 2021-08-28-01:41:37
INFO:tensorflow:Saving dict for global step 50: accuracy = 0.5125, global_step = 50, loss = 0.6737833
INFO:tensorflow:Saving dict for global step 50: accuracy = 0.5125, global_step = 50, loss = 0.6737833
INFO:tensorflow:Saving 'checkpoint_path' summary for global step 50: /tmp/tmp3_e4p5uk/model.ckpt-50
INFO:tensorflow:Saving 'checkpoint_path' summary for global step 50: /tmp/tmp3_e4p5uk/model.ckpt-50
{'accuracy': 0.5125, 'loss': 0.6737833, 'global_step': 50}

برای جزئیات بیشتر، لطفا به اسناد و مدارک برای مراجعه tf.keras.estimator.model_to_estimator .

صرفه جویی در بازرسی های مبتنی بر شی با برآوردگر

برآوردگرهای به طور پیش فرض صرفه جویی پست های بازرسی با نام متغیر به جای نمودار شی شرح داده شده در راهنمای بازرسی . tf.train.Checkpoint خواهد ایست های بازرسی بر اساس نام خوانده شده، اما نام متغیر ممکن است در هنگام حرکت بخش هایی از یک خارج مدل از برآورد را تغییر دهید model_fn . برای پیش سازگاری ، صرفه جویی در نقاط بازرسی مبتنی بر شیء ، آموزش مدل را در داخل یک برآورد کننده و سپس استفاده از آن در خارج از یک مدل ساده تر می کند.

import tensorflow.compat.v1 as tf_compat
def toy_dataset():
  inputs = tf.range(10.)[:, None]
  labels = inputs * 5. + tf.range(5.)[None, :]
  return tf.data.Dataset.from_tensor_slices(
    dict(x=inputs, y=labels)).repeat().batch(2)
class Net(tf.keras.Model):
  """A simple linear model."""

  def __init__(self):
    super(Net, self).__init__()
    self.l1 = tf.keras.layers.Dense(5)

  def call(self, x):
    return self.l1(x)
def model_fn(features, labels, mode):
  net = Net()
  opt = tf.keras.optimizers.Adam(0.1)
  ckpt = tf.train.Checkpoint(step=tf_compat.train.get_global_step(),
                             optimizer=opt, net=net)
  with tf.GradientTape() as tape:
    output = net(features['x'])
    loss = tf.reduce_mean(tf.abs(output - features['y']))
  variables = net.trainable_variables
  gradients = tape.gradient(loss, variables)
  return tf.estimator.EstimatorSpec(
    mode,
    loss=loss,
    train_op=tf.group(opt.apply_gradients(zip(gradients, variables)),
                      ckpt.step.assign_add(1)),
    # Tell the Estimator to save "ckpt" in an object-based format.
    scaffold=tf_compat.train.Scaffold(saver=ckpt))

tf.keras.backend.clear_session()
est = tf.estimator.Estimator(model_fn, './tf_estimator_example/')
est.train(toy_dataset, steps=10)
INFO:tensorflow:Using default config.
INFO:tensorflow:Using default config.
INFO:tensorflow:Using config: {'_model_dir': './tf_estimator_example/', '_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': './tf_estimator_example/', '_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: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 ./tf_estimator_example/model.ckpt.
INFO:tensorflow:Saving checkpoints for 0 into ./tf_estimator_example/model.ckpt.
INFO:tensorflow:Calling checkpoint listeners after saving checkpoint 0...
INFO:tensorflow:Calling checkpoint listeners after saving checkpoint 0...
INFO:tensorflow:loss = 4.2813673, step = 0
INFO:tensorflow:loss = 4.2813673, step = 0
INFO:tensorflow:Calling checkpoint listeners before saving checkpoint 10...
INFO:tensorflow:Calling checkpoint listeners before saving checkpoint 10...
INFO:tensorflow:Saving checkpoints for 10 into ./tf_estimator_example/model.ckpt.
INFO:tensorflow:Saving checkpoints for 10 into ./tf_estimator_example/model.ckpt.
INFO:tensorflow:Calling checkpoint listeners after saving checkpoint 10...
INFO:tensorflow:Calling checkpoint listeners after saving checkpoint 10...
INFO:tensorflow:Loss for final step: 33.1623.
INFO:tensorflow:Loss for final step: 33.1623.
<tensorflow_estimator.python.estimator.estimator.EstimatorV2 at 0x7fe8b8393b90>

tf.train.Checkpoint سپس می توانید از آن بار پست های بازرسی برآورد است model_dir .

opt = tf.keras.optimizers.Adam(0.1)
net = Net()
ckpt = tf.train.Checkpoint(
  step=tf.Variable(1, dtype=tf.int64), optimizer=opt, net=net)
ckpt.restore(tf.train.latest_checkpoint('./tf_estimator_example/'))
ckpt.step.numpy()  # From est.train(..., steps=10)
10

مدلهای ذخیره شده از برآوردکنندگان

برآوردگرهای صادرات SavedModels طریق tf.Estimator.export_saved_model .

input_column = tf.feature_column.numeric_column("x")

estimator = tf.estimator.LinearClassifier(feature_columns=[input_column])

def input_fn():
  return tf.data.Dataset.from_tensor_slices(
    ({"x": [1., 2., 3., 4.]}, [1, 1, 0, 0])).repeat(200).shuffle(64).batch(16)
estimator.train(input_fn)
INFO:tensorflow:Using default config.
INFO:tensorflow:Using default config.
WARNING:tensorflow:Using temporary folder as model directory: /tmp/tmpzoxucggh
WARNING:tensorflow:Using temporary folder as model directory: /tmp/tmpzoxucggh
INFO:tensorflow:Using config: {'_model_dir': '/tmp/tmpzoxucggh', '_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/tmpzoxucggh', '_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: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/tmpzoxucggh/model.ckpt.
INFO:tensorflow:Saving checkpoints for 0 into /tmp/tmpzoxucggh/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 50...
INFO:tensorflow:Calling checkpoint listeners before saving checkpoint 50...
INFO:tensorflow:Saving checkpoints for 50 into /tmp/tmpzoxucggh/model.ckpt.
INFO:tensorflow:Saving checkpoints for 50 into /tmp/tmpzoxucggh/model.ckpt.
INFO:tensorflow:Calling checkpoint listeners after saving checkpoint 50...
INFO:tensorflow:Calling checkpoint listeners after saving checkpoint 50...
INFO:tensorflow:Loss for final step: 0.44376355.
INFO:tensorflow:Loss for final step: 0.44376355.
<tensorflow_estimator.python.estimator.canned.linear.LinearClassifierV2 at 0x7fe8b857a7d0>

برای ذخیره یک Estimator شما نیاز به ایجاد یک serving_input_receiver . این تابع یک بخشی از یک ایجاد tf.Graph که تجزیه داده های خام دریافت شده توسط SavedModel.

tf.estimator.export ماژول شامل توابع برای کمک به ساخت این receivers .

کد زیر را ایجاد یک گیرنده، بر اساس feature_columns ، که سریال را می پذیرد tf.Example بافر پروتکل، که اغلب با استفاده TF-خدمت .

tmpdir = tempfile.mkdtemp()

serving_input_fn = tf.estimator.export.build_parsing_serving_input_receiver_fn(
  tf.feature_column.make_parse_example_spec([input_column]))

estimator_base_path = os.path.join(tmpdir, 'from_estimator')
estimator_path = estimator.export_saved_model(estimator_base_path, serving_input_fn)
INFO:tensorflow:Calling model_fn.
INFO:tensorflow:Calling model_fn.
INFO:tensorflow:Done calling model_fn.
INFO:tensorflow:Done calling model_fn.
WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.7/site-packages/tensorflow/python/saved_model/signature_def_utils_impl.py:145: build_tensor_info (from tensorflow.python.saved_model.utils_impl) is deprecated and will be removed in a future version.
Instructions for updating:
This function will only be available through the v1 compatibility library as tf.compat.v1.saved_model.utils.build_tensor_info or tf.compat.v1.saved_model.build_tensor_info.
WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.7/site-packages/tensorflow/python/saved_model/signature_def_utils_impl.py:145: build_tensor_info (from tensorflow.python.saved_model.utils_impl) is deprecated and will be removed in a future version.
Instructions for updating:
This function will only be available through the v1 compatibility library as tf.compat.v1.saved_model.utils.build_tensor_info or tf.compat.v1.saved_model.build_tensor_info.
INFO:tensorflow:Signatures INCLUDED in export for Classify: ['serving_default', 'classification']
INFO:tensorflow:Signatures INCLUDED in export for Classify: ['serving_default', 'classification']
INFO:tensorflow:Signatures INCLUDED in export for Regress: ['regression']
INFO:tensorflow:Signatures INCLUDED in export for Regress: ['regression']
INFO:tensorflow:Signatures INCLUDED in export for Predict: ['predict']
INFO:tensorflow:Signatures INCLUDED in export for Predict: ['predict']
INFO:tensorflow:Signatures INCLUDED in export for Train: None
INFO:tensorflow:Signatures INCLUDED in export for Train: None
INFO:tensorflow:Signatures INCLUDED in export for Eval: None
INFO:tensorflow:Signatures INCLUDED in export for Eval: None
INFO:tensorflow:Restoring parameters from /tmp/tmpzoxucggh/model.ckpt-50
INFO:tensorflow:Restoring parameters from /tmp/tmpzoxucggh/model.ckpt-50
INFO:tensorflow:Assets added to graph.
INFO:tensorflow:Assets added to graph.
INFO:tensorflow:No assets to write.
INFO:tensorflow:No assets to write.
INFO:tensorflow:SavedModel written to: /tmp/tmpdexgg0w2/from_estimator/temp-1630114899/saved_model.pb
INFO:tensorflow:SavedModel written to: /tmp/tmpdexgg0w2/from_estimator/temp-1630114899/saved_model.pb

همچنین می توانید آن مدل را از python بارگیری و اجرا کنید:

imported = tf.saved_model.load(estimator_path)

def predict(x):
  example = tf.train.Example()
  example.features.feature["x"].float_list.value.extend([x])
  return imported.signatures["predict"](
    examples=tf.constant([example.SerializeToString()]))
print(predict(1.5))
print(predict(3.5))
{'probabilities': <tf.Tensor: shape=(1, 2), dtype=float32, numpy=array([[0.43685353, 0.5631464 ]], dtype=float32)>, 'logistic': <tf.Tensor: shape=(1, 1), dtype=float32, numpy=array([[0.5631464]], dtype=float32)>, 'classes': <tf.Tensor: shape=(1, 1), dtype=string, numpy=array([[b'1']], dtype=object)>, 'all_class_ids': <tf.Tensor: shape=(1, 2), dtype=int32, numpy=array([[0, 1]], dtype=int32)>, 'all_classes': <tf.Tensor: shape=(1, 2), dtype=string, numpy=array([[b'0', b'1']], dtype=object)>, 'logits': <tf.Tensor: shape=(1, 1), dtype=float32, numpy=array([[0.25394177]], dtype=float32)>, 'class_ids': <tf.Tensor: shape=(1, 1), dtype=int64, numpy=array([[1]])>}
{'probabilities': <tf.Tensor: shape=(1, 2), dtype=float32, numpy=array([[0.77109075, 0.22890931]], dtype=float32)>, 'logistic': <tf.Tensor: shape=(1, 1), dtype=float32, numpy=array([[0.22890928]], dtype=float32)>, 'classes': <tf.Tensor: shape=(1, 1), dtype=string, numpy=array([[b'0']], dtype=object)>, 'all_class_ids': <tf.Tensor: shape=(1, 2), dtype=int32, numpy=array([[0, 1]], dtype=int32)>, 'all_classes': <tf.Tensor: shape=(1, 2), dtype=string, numpy=array([[b'0', b'1']], dtype=object)>, 'logits': <tf.Tensor: shape=(1, 1), dtype=float32, numpy=array([[-1.2144802]], dtype=float32)>, 'class_ids': <tf.Tensor: shape=(1, 1), dtype=int64, numpy=array([[0]])>}

tf.estimator.export.build_raw_serving_input_receiver_fn اجازه می دهد تا به شما برای ایجاد توابع ورودی را که تانسورها خام به جای tf.train.Example است.

با استفاده از tf.distribute.Strategy با برآورد (پشتیبانی محدود)

tf.estimator یک API آموزش TensorFlow توزیع شده است که در اصل روش سرور پارامتر async است پشتیبانی می کند. tf.estimator در حال حاضر پشتیبانی tf.distribute.Strategy . اگر شما با استفاده tf.estimator ، شما می توانید به آموزش توزیع شده با تعداد کمی از تغییرات کد خود را تغییر دهید. با استفاده از این ، کاربران Estimator اکنون می توانند آموزش توزیع همزمان را در چندین GPU و چندین کارگر ، و همچنین از TPU ها انجام دهند. با این حال ، این پشتیبانی در Estimator محدود است. اتمام در حال حاضر پشتیبانی چه خبر بخش زیر برای جزئیات بیشتر.

با استفاده از tf.distribute.Strategy با برآورد کمی متفاوت تر از در مورد Keras است. به جای استفاده از strategy.scope ، در حال حاضر شما شی استراتژی به تصویب RunConfig برای برآورد.

شما می توانید به مراجعه راهنمای آموزش توزیع برای اطلاعات بیشتر.

در اینجا یک قطعه از کد است که نشان می دهد این کار را با از پیش ساخته شده برآورد LinearRegressor و MirroredStrategy :

mirrored_strategy = tf.distribute.MirroredStrategy()
config = tf.estimator.RunConfig(
    train_distribute=mirrored_strategy, eval_distribute=mirrored_strategy)
regressor = tf.estimator.LinearRegressor(
    feature_columns=[tf.feature_column.numeric_column('feats')],
    optimizer='SGD',
    config=config)
INFO:tensorflow:Using MirroredStrategy with devices ('/job:localhost/replica:0/task:0/device:GPU:0',)
INFO:tensorflow:Using MirroredStrategy with devices ('/job:localhost/replica:0/task:0/device:GPU:0',)
INFO:tensorflow:Initializing RunConfig with distribution strategies.
INFO:tensorflow:Initializing RunConfig with distribution strategies.
INFO:tensorflow:Not using Distribute Coordinator.
INFO:tensorflow:Not using Distribute Coordinator.
WARNING:tensorflow:Using temporary folder as model directory: /tmp/tmpjvzbia52
WARNING:tensorflow:Using temporary folder as model directory: /tmp/tmpjvzbia52
INFO:tensorflow:Using config: {'_model_dir': '/tmp/tmpjvzbia52', '_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': <tensorflow.python.distribute.mirrored_strategy.MirroredStrategy object at 0x7fe8c438ded0>, '_device_fn': None, '_protocol': None, '_eval_distribute': <tensorflow.python.distribute.mirrored_strategy.MirroredStrategy object at 0x7fe8c438ded0>, '_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, '_distribute_coordinator_mode': None}
INFO:tensorflow:Using config: {'_model_dir': '/tmp/tmpjvzbia52', '_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': <tensorflow.python.distribute.mirrored_strategy.MirroredStrategy object at 0x7fe8c438ded0>, '_device_fn': None, '_protocol': None, '_eval_distribute': <tensorflow.python.distribute.mirrored_strategy.MirroredStrategy object at 0x7fe8c438ded0>, '_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, '_distribute_coordinator_mode': None}

در اینجا ، از برآوردگر از پیش ساخته استفاده می کنید ، اما همان کد با برآورد کننده سفارشی نیز کار می کند. train_distribute تعیین آموزش چگونه توزیع خواهد شد، و eval_distribute تعیین میکند که چگونه ارزیابی توزیع خواهد شد. این تفاوت دیگری با Keras است که در آن شما از استراتژی یکسانی برای آموزش و تمرین استفاده می کنید.

اکنون می توانید این برآوردگر را با یک تابع ورودی آموزش دهید و ارزیابی کنید:

def input_fn():
  dataset = tf.data.Dataset.from_tensors(({"feats":[1.]}, [1.]))
  return dataset.repeat(1000).batch(10)
regressor.train(input_fn=input_fn, steps=10)
regressor.evaluate(input_fn=input_fn, steps=10)
INFO:tensorflow:Calling model_fn.
/tmpfs/src/tf_docs_env/lib/python3.7/site-packages/tensorflow/python/data/ops/dataset_ops.py:374: UserWarning: To make it possible to preserve tf.data options across serialization boundaries, their implementation has moved to be part of the TensorFlow graph. As a consequence, the options value is in general no longer known at graph construction time. Invoking this method in graph mode retains the legacy behavior of the original implementation, but note that the returned value might not reflect the actual value of the options.
  warnings.warn("To make it possible to preserve tf.data options across "
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.
WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.7/site-packages/tensorflow_estimator/python/estimator/util.py:95: DistributedIteratorV1.initialize (from tensorflow.python.distribute.input_lib) is deprecated and will be removed in a future version.
Instructions for updating:
Use the iterator's `initializer` property instead.
WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.7/site-packages/tensorflow_estimator/python/estimator/util.py:95: DistributedIteratorV1.initialize (from tensorflow.python.distribute.input_lib) is deprecated and will be removed in a future version.
Instructions for updating:
Use the iterator's `initializer` property instead.
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/tmpjvzbia52/model.ckpt.
INFO:tensorflow:Saving checkpoints for 0 into /tmp/tmpjvzbia52/model.ckpt.
INFO:tensorflow:Calling checkpoint listeners after saving checkpoint 0...
INFO:tensorflow:Calling checkpoint listeners after saving checkpoint 0...
2021-08-28 01:41:43.214993: W tensorflow/core/grappler/utils/graph_view.cc:836] No registered 'MultiDeviceIteratorFromStringHandle' OpKernel for GPU devices compatible with node { {node MultiDeviceIteratorFromStringHandle} }
    .  Registered:  device='CPU'

2021-08-28 01:41:43.216335: W tensorflow/core/grappler/utils/graph_view.cc:836] No registered 'MultiDeviceIteratorGetNextFromShard' OpKernel for GPU devices compatible with node { {node MultiDeviceIteratorGetNextFromShard} }
    .  Registered:  device='CPU'
INFO:tensorflow:loss = 1.0, step = 0
INFO:tensorflow:loss = 1.0, step = 0
INFO:tensorflow:Calling checkpoint listeners before saving checkpoint 10...
INFO:tensorflow:Calling checkpoint listeners before saving checkpoint 10...
INFO:tensorflow:Saving checkpoints for 10 into /tmp/tmpjvzbia52/model.ckpt.
INFO:tensorflow:Saving checkpoints for 10 into /tmp/tmpjvzbia52/model.ckpt.
INFO:tensorflow:Calling checkpoint listeners after saving checkpoint 10...
INFO:tensorflow:Calling checkpoint listeners after saving checkpoint 10...
INFO:tensorflow:Loss for final step: 2.877698e-13.
INFO:tensorflow:Loss for final step: 2.877698e-13.
INFO:tensorflow:Calling model_fn.
INFO:tensorflow:Calling model_fn.
INFO:tensorflow:Reduce to /replica:0/task:0/device:CPU:0 then broadcast to ('/replica:0/task:0/device:CPU:0',).
INFO:tensorflow:Reduce to /replica:0/task:0/device:CPU:0 then broadcast to ('/replica:0/task:0/device:CPU:0',).
INFO:tensorflow:Reduce to /replica:0/task:0/device:CPU:0 then broadcast to ('/replica:0/task:0/device:CPU:0',).
INFO:tensorflow:Reduce to /replica:0/task:0/device:CPU:0 then broadcast to ('/replica:0/task:0/device:CPU:0',).
INFO:tensorflow:Reduce to /replica:0/task:0/device:CPU:0 then broadcast to ('/replica:0/task:0/device:CPU:0',).
INFO:tensorflow:Reduce to /replica:0/task:0/device:CPU:0 then broadcast to ('/replica:0/task:0/device:CPU:0',).
INFO:tensorflow:Reduce to /replica:0/task:0/device:CPU:0 then broadcast to ('/replica:0/task:0/device:CPU:0',).
INFO:tensorflow:Reduce to /replica:0/task:0/device:CPU:0 then broadcast to ('/replica:0/task:0/device:CPU:0',).
INFO:tensorflow:Reduce to /replica:0/task:0/device:CPU:0 then broadcast to ('/replica:0/task:0/device:CPU:0',).
INFO:tensorflow:Reduce to /replica:0/task:0/device:CPU:0 then broadcast to ('/replica:0/task:0/device:CPU:0',).
INFO:tensorflow:Reduce to /replica:0/task:0/device:CPU:0 then broadcast to ('/replica:0/task:0/device:CPU:0',).
INFO:tensorflow:Reduce to /replica:0/task:0/device:CPU:0 then broadcast to ('/replica:0/task:0/device:CPU:0',).
INFO:tensorflow:Reduce to /replica:0/task:0/device:CPU:0 then broadcast to ('/replica:0/task:0/device:CPU:0',).
INFO:tensorflow:Reduce to /replica:0/task:0/device:CPU:0 then broadcast to ('/replica:0/task:0/device:CPU:0',).
INFO:tensorflow:Reduce to /replica:0/task:0/device:CPU:0 then broadcast to ('/replica:0/task:0/device:CPU:0',).
INFO:tensorflow:Reduce to /replica:0/task:0/device:CPU:0 then broadcast to ('/replica:0/task:0/device:CPU:0',).
INFO:tensorflow:Reduce to /replica:0/task:0/device:CPU:0 then broadcast to ('/replica:0/task:0/device:CPU:0',).
INFO:tensorflow:Reduce to /replica:0/task:0/device:CPU:0 then broadcast to ('/replica:0/task:0/device:CPU:0',).
INFO:tensorflow:Reduce to /replica:0/task:0/device:CPU:0 then broadcast to ('/replica:0/task:0/device:CPU:0',).
INFO:tensorflow:Reduce to /replica:0/task:0/device:CPU:0 then broadcast to ('/replica:0/task:0/device:CPU:0',).
INFO:tensorflow:Done calling model_fn.
INFO:tensorflow:Done calling model_fn.
INFO:tensorflow:Starting evaluation at 2021-08-28T01:41:43
INFO:tensorflow:Starting evaluation at 2021-08-28T01:41:43
INFO:tensorflow:Graph was finalized.
INFO:tensorflow:Graph was finalized.
INFO:tensorflow:Restoring parameters from /tmp/tmpjvzbia52/model.ckpt-10
INFO:tensorflow:Restoring parameters from /tmp/tmpjvzbia52/model.ckpt-10
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.
2021-08-28 01:41:44.060848: W tensorflow/core/grappler/utils/graph_view.cc:836] No registered 'MultiDeviceIteratorFromStringHandle' OpKernel for GPU devices compatible with node { {node MultiDeviceIteratorFromStringHandle} }
    .  Registered:  device='CPU'

2021-08-28 01:41:44.062121: W tensorflow/core/grappler/utils/graph_view.cc:836] No registered 'MultiDeviceIteratorGetNextFromShard' OpKernel for GPU devices compatible with node { {node MultiDeviceIteratorGetNextFromShard} }
    .  Registered:  device='CPU'
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:Evaluation [10/10]
INFO:tensorflow:Evaluation [10/10]
INFO:tensorflow:Inference Time : 0.22219s
INFO:tensorflow:Inference Time : 0.22219s
INFO:tensorflow:Finished evaluation at 2021-08-28-01:41:44
INFO:tensorflow:Finished evaluation at 2021-08-28-01:41:44
INFO:tensorflow:Saving dict for global step 10: average_loss = 1.4210855e-14, global_step = 10, label/mean = 1.0, loss = 1.4210855e-14, prediction/mean = 0.99999994
INFO:tensorflow:Saving dict for global step 10: average_loss = 1.4210855e-14, global_step = 10, label/mean = 1.0, loss = 1.4210855e-14, prediction/mean = 0.99999994
INFO:tensorflow:Saving 'checkpoint_path' summary for global step 10: /tmp/tmpjvzbia52/model.ckpt-10
INFO:tensorflow:Saving 'checkpoint_path' summary for global step 10: /tmp/tmpjvzbia52/model.ckpt-10
{'average_loss': 1.4210855e-14,
 'label/mean': 1.0,
 'loss': 1.4210855e-14,
 'prediction/mean': 0.99999994,
 'global_step': 10}

تفاوت دیگری که باید در اینجا بین Estimator و Keras برجسته شود ، دست زدن به ورودی است. در Keras ، هر دسته از مجموعه داده به طور خودکار در چندین نسخه تکراری تقسیم می شود. با این حال ، در برآوردگر ، شما تقسیم خودکار دسته ای را انجام نمی دهید ، و همچنین داده ها را به طور خودکار در کارگران مختلف خرد نمی کنید. شما باید کنترل کامل بر چگونه می خواهید اطلاعات خود را به در سراسر کارگران و دستگاه های توزیع شده، و شما باید یک ارائه input_fn مشخص کنید که چگونه برای توزیع داده خود را.

شما input_fn است یک بار در کارگر نامیده می شود، در نتیجه دادن یک مجموعه داده هر کارگر. سپس یک دسته از آن مجموعه داده به یک نسخه در آن کارگر داده می شود ، در نتیجه N دسته برای N تکراری روی 1 کارگر مصرف می شود. به عبارت دیگر، مجموعه داده های بازگردانده شده توسط input_fn باید دسته از اندازه ارائه PER_REPLICA_BATCH_SIZE . و اندازه دسته ای جهانی برای یک گام می تواند به عنوان به دست آمده PER_REPLICA_BATCH_SIZE * strategy.num_replicas_in_sync .

هنگام انجام آموزش چند کارگر ، یا باید داده های خود را در بین کارگران تقسیم کنید ، یا روی هر کدام یک دانه تصادفی قرار دهید. شما می توانید یک نمونه از چگونگی انجام این کار در بررسی آموزش چند کارگر با برآورد آموزش.

و به طور مشابه ، می توانید از استراتژی های سرور چند کارگر و پارامتر نیز استفاده کنید. کد یکسان باقی می ماند، اما شما نیاز به استفاده از tf.estimator.train_and_evaluate ، و مجموعه ای TF_CONFIG متغیرهای محیطی برای هر در حال اجرا باینری در خوشه خود را.

اکنون چه چیزی پشتیبانی می شود؟

است پشتیبانی محدود برای آموزش با برآورد با استفاده از تمام استراتژی های به جز وجود دارد TPUStrategy . آموزش عمومی و ارزیابی باید کار کند، اما تعدادی از ویژگی های پیشرفته مانند v1.train.Scaffold نیست. همچنین ممکن است تعدادی اشکال در این ادغام وجود داشته باشد و هیچ برنامه ای برای بهبود فعال این پشتیبانی وجود ندارد (تمرکز بر Keras و پشتیبانی حلقه آموزش سفارشی است). اگر در همه ممکن، شما باید ترجیح می دهند به استفاده از tf.distribute با به جای آن رابط های برنامه کاربردی.

API آموزش استراتژی آینه ای TPUS استراتژی استراتژی MultiWorkerMirrored استراتژی مرکزی ذخیره سازی ParameterServerStrategy
API برآورد کننده پشتیبانی محدود پشتیبانی نشده پشتیبانی محدود پشتیبانی محدود پشتیبانی محدود

مثالها و آموزشها

در اینجا چند نمونه به انتها آمده است که نحوه استفاده از استراتژی های مختلف با برآورد کننده را نشان می دهد:

  1. آموزش چند کارگر با آموزش برآورد نشان می دهد که چگونه می توانید با کارگران متعدد با استفاده از آموزش MultiWorkerMirroredStrategy در مجموعه داده MNIST است.
  2. به عنوان مثال پایان به پایان در حال اجرا آموزش چند کارگر با استراتژی توزیع در tensorflow/ecosystem با استفاده از قالب Kubernetes. آن را با یک مدل Keras شروع می شود و آن را تبدیل به یک برآورد با استفاده از tf.keras.estimator.model_to_estimator API.
  3. این مقام ResNet50 مدل، که می تواند با استفاده از آموزش دیده MirroredStrategy یا MultiWorkerMirroredStrategy .