ترجمت واجهة Cloud Translation API‏ هذه الصفحة.
Switch to English

مقدّرون

عرض على TensorFlow.org تشغيل في Google Colab عرض المصدر على جيثب تحميل دفتر

يقدم هذا المستند tf.estimator - واجهة برمجة تطبيقات TensorFlow عالية المستوى. يلخص المقدّرون الإجراءات التالية:

  • تدريب
  • تقييم
  • تنبؤ
  • تصدير للخدمة

يمكنك إما استخدام المُقدِرات المعدة مسبقًا التي نقدمها أو كتابة المُقدِّرات المخصصة الخاصة بك. جميع المقدرين - سواء كانوا معدة مسبقًا أو مخصصة - هي فئات تعتمد على فئة tf.estimator.Estimator .

للحصول على مثال سريع ، جرب البرامج التعليمية لـ Estimator . للحصول على نظرة عامة على تصميم API ، راجع المستند التقني .

مزايا

على غرار نموذج tf.keras.Model ، estimator هو تجريد على مستوى النموذج. يوفر tf.estimator بعض الإمكانات التي لا تزال قيد التطوير حاليًا لـ tf.keras . هؤلاء هم:

  • التدريب على أساس خادم المعلمات
  • تكامل TFX الكامل.

قدرات المقدرين

يوفر المقدّرون الفوائد التالية:

  • يمكنك تشغيل النماذج المستندة إلى المقدر على مضيف محلي أو على بيئة متعددة الخوادم الموزعة دون تغيير النموذج الخاص بك. علاوة على ذلك ، يمكنك تشغيل النماذج المستندة إلى Estimator على وحدات المعالجة المركزية (CPU) أو وحدات معالجة الرسومات (GPU) أو وحدات المعالجة المركزية (TPU) دون إعادة ترميز النموذج الخاص بك.
  • يوفر المقدّرون حلقة تدريب آمنة موزّعة تتحكم في كيفية ووقت:
    • تحميل البيانات
    • التعامل مع الاستثناءات
    • إنشاء ملفات نقاط التفتيش والتعافي من حالات الفشل
    • حفظ الملخصات للوحة TensorBoard

عند كتابة تطبيق باستخدام Estimators ، يجب أن تفصل مسار إدخال البيانات عن النموذج. يبسط هذا الفصل التجارب مع مجموعات البيانات المختلفة.

مقدرات مسبقة الصنع

تمكّنك المقدّرات المعدة مسبقًا من العمل بمستوى مفاهيمي أعلى بكثير من واجهات برمجة تطبيقات TensorFlow الأساسية. لا داعي للقلق بعد الآن بشأن إنشاء الرسم البياني الحسابي أو الجلسات نظرًا لأن "المقدرون" يتعاملون مع جميع "السباكة" نيابة عنك. علاوة على ذلك ، تتيح لك أدوات المقدّر المعدة مسبقًا تجربة بنى نموذجية مختلفة عن طريق إجراء تغييرات بسيطة فقط في التعليمات البرمجية. tf.estimator.DNNClassifier ، على سبيل المثال ، عبارة عن فئة مقدرة مسبقة الصنع تقوم بتدريب نماذج التصنيف على أساس الشبكات العصبية الكثيفة ذات التغذية الأمامية.

هيكل برنامج المقدرين المعدة مسبقًا

يتكون برنامج TensorFlow الذي يعتمد على مقدر مسبق الصنع من الخطوات الأربع التالية:

1. اكتب وظيفة واحدة أو أكثر من وظائف استيراد مجموعة البيانات.

على سبيل المثال ، يمكنك إنشاء وظيفة واحدة لاستيراد مجموعة التدريب ووظيفة أخرى لاستيراد مجموعة الاختبار. يجب أن تُرجع كل دالة لاستيراد مجموعة البيانات كائنين:

  • قاموس تكون فيه المفاتيح عبارة عن أسماء ميزات والقيم عبارة عن Tensors (أو SparseTensors) تحتوي على بيانات الميزة المقابلة
  • موتر يحتوي على ملصق واحد أو أكثر

على سبيل المثال ، يوضح الكود التالي الهيكل الأساسي لوظيفة الإدخال:

def input_fn(dataset):
    ...  # manipulate dataset, extracting the feature dict and the label
    return feature_dict, label

انظر دليل البيانات للحصول على التفاصيل.

2. تحديد أعمدة الميزة.

يحدد كل tf.feature_column اسم الميزة ونوعه وأي إدخال معالجة مسبقة. على سبيل المثال ، يُنشئ المقتطف التالي ثلاثة أعمدة ميزة تحتوي على بيانات عدد صحيح أو فاصلة عائمة. يحدد أول عمودين للميزات ببساطة اسم العنصر ونوعه. يحدد عمود الميزة الثالث أيضًا lambda الذي سيستدعيه البرنامج لقياس البيانات الأولية:

# Define three numeric feature columns.
population = tf.feature_column.numeric_column('population')
crime_rate = tf.feature_column.numeric_column('crime_rate')
median_education = tf.feature_column.numeric_column(
  'median_education',
  normalizer_fn=lambda x: x - global_education_mean)

لمزيد من المعلومات ، راجع البرنامج التعليمي لأعمدة المعالم .

3. إنشاء المقدر ذي الصلة المعدة مسبقًا.

على سبيل المثال ، إليك نموذج إنشاء مثيل LinearClassifier باسم LinearClassifier :

# Instantiate an estimator, passing the feature columns.
estimator = tf.estimator.LinearClassifier(
  feature_columns=[population, crime_rate, median_education])

لمزيد من المعلومات ، راجع البرنامج التعليمي للمصنف الخطي .

4. استدعاء أسلوب التدريب أو التقييم أو الاستدلال.

على سبيل المثال ، يوفر جميع "مقدِّرون" طريقة train تقوم بتدريب أحد النماذج.

# `input_fn` is the function created in Step 1
estimator.train(input_fn=my_training_set, steps=2000)

يمكنك رؤية مثال على ذلك أدناه.

فوائد مقدرات مسبقة الصنع

تعمل أداة التقدير المعدة مسبقًا على ترميز أفضل الممارسات ، مما يوفر الفوائد التالية:

  • أفضل الممارسات لتحديد مكان تشغيل أجزاء مختلفة من الرسم البياني الحسابي ، وتنفيذ الاستراتيجيات على جهاز واحد أو على مجموعة.
  • أفضل الممارسات لكتابة الأحداث (الملخص) والملخصات المفيدة عالميًا.

إذا كنت لا تستخدم المقدّرات المعدة مسبقًا ، فيجب عليك تنفيذ الميزات السابقة بنفسك.

مقدرات مخصصة

إن جوهر كل مقدر - سواء كان مُعدًا مسبقًا أو مخصصًا - هو وظيفته النموذجية ، وهي طريقة تبني الرسوم البيانية للتدريب والتقييم والتنبؤ. عند استخدام مقدر معد مسبقًا ، يكون شخص آخر قد نفذ بالفعل وظيفة النموذج. عند الاعتماد على مقدر مخصص ، يجب عليك كتابة دالة النموذج بنفسك.

  1. بافتراض وجود مُقيِّم مُعد مسبقًا مناسب ، استخدمه لبناء نموذجك الأول واستخدم نتائجه لإنشاء خط أساس.
  2. قم ببناء واختبار خط الأنابيب العام الخاص بك ، بما في ذلك سلامة وموثوقية بياناتك باستخدام هذا المقدّر المُعد مسبقًا.
  3. في حالة توفر مقدرات بديلة مناسبة مسبقة الإعداد ، قم بإجراء تجارب لتحديد المقدر المعد مسبقًا الذي ينتج أفضل النتائج.
  4. من المحتمل ، زيادة تحسين النموذج الخاص بك عن طريق بناء المقدر المخصص الخاص بك.
import tensorflow as tf
import tensorflow_datasets as tfds

قم بإنشاء مقدر من نموذج Keras

يمكنك تحويل نماذج Keras الحالية إلى أجهزة تقدير باستخدام tf.keras.estimator.model_to_estimator . يؤدي القيام بذلك إلى تمكين نموذج Keras الخاص بك من الوصول إلى نقاط القوة في 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 [==============================] - 1s 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/tmpk2yc1sw_
INFO:tensorflow:Using the Keras model provided.
WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.6/site-packages/tensorflow_estimator/python/estimator/keras.py:220: set_learning_phase (from tensorflow.python.keras.backend) is deprecated and will be removed after 2020-10-11.
Instructions for updating:
Simply pass a True/False value to the `training` argument of the `__call__` method of your layer or model.
INFO:tensorflow:Using config: {'_model_dir': '/tmp/tmpk2yc1sw_', '_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, '_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=500)
WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.6/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.
Downloading and preparing dataset cats_vs_dogs/4.0.0 (download: 786.68 MiB, generated: Unknown size, total: 786.68 MiB) to /home/kbuilder/tensorflow_datasets/cats_vs_dogs/4.0.0...

Warning:absl:1738 images were corrupted and were skipped

Shuffling and writing examples to /home/kbuilder/tensorflow_datasets/cats_vs_dogs/4.0.0.incompleteBO81F5/cats_vs_dogs-train.tfrecord
Dataset cats_vs_dogs downloaded and prepared to /home/kbuilder/tensorflow_datasets/cats_vs_dogs/4.0.0. Subsequent calls will reuse this data.
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/tmpk2yc1sw_/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/tmpk2yc1sw_/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/tmpk2yc1sw_/keras/keras_model.ckpt

INFO:tensorflow:Warm-starting from: /tmp/tmpk2yc1sw_/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/tmpk2yc1sw_/model.ckpt.

INFO:tensorflow:Saving checkpoints for 0 into /tmp/tmpk2yc1sw_/model.ckpt.

INFO:tensorflow:Calling checkpoint listeners after saving checkpoint 0...

INFO:tensorflow:Calling checkpoint listeners after saving checkpoint 0...

INFO:tensorflow:loss = 0.8240633, step = 0

INFO:tensorflow:loss = 0.8240633, step = 0

INFO:tensorflow:global_step/sec: 22.1268

INFO:tensorflow:global_step/sec: 22.1268

INFO:tensorflow:loss = 0.66763145, step = 100 (4.521 sec)

INFO:tensorflow:loss = 0.66763145, step = 100 (4.521 sec)

INFO:tensorflow:global_step/sec: 23.8348

INFO:tensorflow:global_step/sec: 23.8348

INFO:tensorflow:loss = 0.6708636, step = 200 (4.195 sec)

INFO:tensorflow:loss = 0.6708636, step = 200 (4.195 sec)

INFO:tensorflow:global_step/sec: 23.9713

INFO:tensorflow:global_step/sec: 23.9713

INFO:tensorflow:loss = 0.61437285, step = 300 (4.172 sec)

INFO:tensorflow:loss = 0.61437285, step = 300 (4.172 sec)

INFO:tensorflow:global_step/sec: 23.8109

INFO:tensorflow:global_step/sec: 23.8109

INFO:tensorflow:loss = 0.65069425, step = 400 (4.199 sec)

INFO:tensorflow:loss = 0.65069425, step = 400 (4.199 sec)

INFO:tensorflow:Calling checkpoint listeners before saving checkpoint 500...

INFO:tensorflow:Calling checkpoint listeners before saving checkpoint 500...

INFO:tensorflow:Saving checkpoints for 500 into /tmp/tmpk2yc1sw_/model.ckpt.

INFO:tensorflow:Saving checkpoints for 500 into /tmp/tmpk2yc1sw_/model.ckpt.

INFO:tensorflow:Calling checkpoint listeners after saving checkpoint 500...

INFO:tensorflow:Calling checkpoint listeners after saving checkpoint 500...

INFO:tensorflow:Loss for final step: 0.5952678.

INFO:tensorflow:Loss for final step: 0.5952678.

<tensorflow_estimator.python.estimator.estimator.EstimatorV2 at 0x7f6a584aeb70>

وبالمثل ، للتقييم ، استدع دالة التقييم للمقدر:

est_mobilenet_v2.evaluate(input_fn=lambda: train_input_fn(32), steps=10)
INFO:tensorflow:Calling model_fn.

INFO:tensorflow:Calling model_fn.

Warning:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.6/site-packages/tensorflow/python/keras/engine/training_v1.py:2048: Model.state_updates (from tensorflow.python.keras.engine.training) is deprecated and will be removed in a future version.
Instructions for updating:
This property should not be used in TensorFlow 2.0, as updates are applied automatically.

Warning:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.6/site-packages/tensorflow/python/keras/engine/training_v1.py:2048: Model.state_updates (from tensorflow.python.keras.engine.training) is deprecated and will be removed in a future version.
Instructions for updating:
This property should not be used in TensorFlow 2.0, as updates are applied automatically.

INFO:tensorflow:Done calling model_fn.

INFO:tensorflow:Done calling model_fn.

INFO:tensorflow:Starting evaluation at 2020-09-11T01:22:33Z

INFO:tensorflow:Starting evaluation at 2020-09-11T01:22:33Z

INFO:tensorflow:Graph was finalized.

INFO:tensorflow:Graph was finalized.

INFO:tensorflow:Restoring parameters from /tmp/tmpk2yc1sw_/model.ckpt-500

INFO:tensorflow:Restoring parameters from /tmp/tmpk2yc1sw_/model.ckpt-500

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 : 2.07820s

INFO:tensorflow:Inference Time : 2.07820s

INFO:tensorflow:Finished evaluation at 2020-09-11-01:22:35

INFO:tensorflow:Finished evaluation at 2020-09-11-01:22:35

INFO:tensorflow:Saving dict for global step 500: accuracy = 0.63125, global_step = 500, loss = 0.630646

INFO:tensorflow:Saving dict for global step 500: accuracy = 0.63125, global_step = 500, loss = 0.630646

INFO:tensorflow:Saving 'checkpoint_path' summary for global step 500: /tmp/tmpk2yc1sw_/model.ckpt-500

INFO:tensorflow:Saving 'checkpoint_path' summary for global step 500: /tmp/tmpk2yc1sw_/model.ckpt-500

{'accuracy': 0.63125, 'loss': 0.630646, 'global_step': 500}

لمزيد من التفاصيل ، يرجى الرجوع إلى وثائق tf.keras.estimator.model_to_estimator .