برنامج تعليمي لـ TensorBoard: تصور الرسوم البيانية باستخدام TensorFlow

⚡ ملخص ذكي

TensorBoard هي واجهة المستخدم الرسومية لعمليات تدريب TensorFlow، حيث ترسم منحنيات الخسارة، ومخططات النماذج، ومخططات توزيع الأوزان، والتضمينات. يشرح هذا الدليل كيفية كتابة ملفات الأحداث باستخدام مُقدِّر، ثم يفتح لوحة التحكم على المنفذ 6006.

  • 🔘 خمس لوحات معلومات: تقرأ كل من Scalars و Graphs و Distributions و Histograms و Projector نوعًا مختلفًا من الملخصات.
  • ☑️ دليل السجل: تحدد وسيطة model_dir المكان الذي يكتب فيه TensorFlow ملفات events.out.tfevents.
  • ✅ أمر التشغيل: قم بتشغيل الأمر tensorboard –logdir=PATH، ثم افتح الرابط http://localhost:6006 في أي متصفح.
  • 🧪 معدل التعلم: يشير منحنى الخسارة المتقطع إلى معدل مرتفع للغاية بحيث لا يمكن للنموذج أن يتقارب.
  • 🛠️ TensorFlow 2: يستبدل رد نداء Keras TensorBoard تسجيل المقدر الموضح في المثال الأصلي.
  • ⚠️ استكشاف الأخطاء وإصلاحها: لوحة التحكم الفارغة تعني في أغلب الأحيان أن مسار دليل السجلات لا يتطابق مع عملية التدريب.

برنامج تعليمي لـ TensorBoard: تصور الرسوم البيانية باستخدام TensorFlow

ما هو TensorBoard؟

TensorBoard هي واجهة تُستخدم لعرض الرسم البياني وأدوات أخرى لفهم النموذج وتصحيح أخطائه وتحسينه. وهي أداة توفر قياسات وتصورات لسير عمل التعلم الآلي. tracمقاييس مثل الخسارة والدقة، وتصور الرسم البياني للنموذج، وإسقاط التضمينات في مساحات ذات أبعاد أقل.

يأتي TensorBoard مزودًا بـ TensorFlow ويعمل كخادم ويب محلي صغير يقرأ ملفات الأحداث التي تكتبها مهمة التدريب على القرص.

مثال على تصور الرسم البياني باستخدام TensorBoard

الصورة أدناه مأخوذة من الرسم البياني TensorBoard الذي ستنشئه في هذا الدرس. وهي اللوحة الرئيسية:

لوحة معلومات TensorBoard Scalars تعرض منحنى متوسط ​​الخسارة لمُنحدر الشبكة العصبية العميقة المُدرَّب

من الصورة أدناه، يمكنك رؤية لوحة تصور الرسم البياني TensorBoard. تحتوي اللوحة على علامات تبويب مختلفة مرتبطة بمستوى المعلومات التي تضيفها عند تشغيل النموذج.

شريط التنقل في TensorBoard مع علامات التبويب الخاصة بالكميات العددية، والرسوم البيانية، والتوزيعات، والمدرجات التكرارية، وجهاز العرض.

  • العددية: عرض معلومات مفيدة مختلفة أثناء تدريب النموذج
  • الرسوم البيانية: اعرض النموذج
  • الرسم البياني: عرض الأوزان باستخدام الرسم البياني التكراري
  • التوزيع: اعرض توزيع الوزن
  • كشاف ضوئي: عرض تحليل المكونات الرئيسية وخوارزمية T-SNE. التقنية المستخدمة لتقليل الأبعاد

خلال هذا الدرس التعليمي لـ TensorBoard، ستقوم بتدريب نموذج بسيط التعلم العميق النموذج، ويتم قراءة الرسم البياني الناتج من الأسفل إلى الأعلى.

إذا نظرت إلى الرسم البياني، يمكنك فهم كيفية عمل النموذج. تشير الشارات المرقمة في لقطة الشاشة أدناه إلى هذه المراحل الأربع:

  1. إدراج البيانات في النموذج: ادفع كمية من البيانات مساوية لحجم الدُفعة إلى النموذج، أي عدد تغذية البيانات بعد كل تكرار
  2. قم بتغذية البيانات إلى Tensors
  3. درب النموذج
  4. عرض عدد الدفعات أثناء التدريب. احفظ النموذج على القرص.

رسم بياني لـ TensorFlow في TensorBoard مع عقد مرقمة لقائمة انتظار الإدخال، وكتلة الشبكة العصبية العميقة، وعملية الحفظ

تعتمد الفكرة الأساسية وراء TensorBoard على أن الشبكة العصبية قد تتصرف كصندوق أسود، وتحتاج إلى أداة لفحص ما بداخله. تخيل TensorBoard كمصباح يدوي للغوص في أعماق الشبكة.

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

لإعطائك فكرة عن مدى فائدة الرسم البياني لـ TensorBoard، انظر إلى منحنيي الخسارة أدناه:

منحنيان لخسارة TensorBoard جنبًا إلى جنب يقارنان نموذجًا لا يتعلم بنموذج يتقارب

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

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

يُعدّ TensorBoard أداةً رائعةً لتصوّر هذه المقاييس وتسليط الضوء على المشكلات المحتملة. قد تستغرق الشبكة العصبية ساعاتٍ أو أسابيع قبل أن تجد حلاً، ويقوم TensorBoard بتحديث المقاييس أثناء تشغيل المهمة. لذا، لستَ بحاجةٍ إلى الانتظار حتى النهاية لمعرفة ما إذا كان النموذج يتدرب بشكلٍ صحيح: افتح TensorBoard، وتحقق من سير التدريب، وأجرِ التغيير المناسب إذا لزم الأمر.

كيفية استخدام TensorBoard؟

في هذا القسم، ستتعلم كيفية فتح TensorBoard من الطرفية على macOS ومن سطر الأوامر Windowsينصب التركيز هنا على الأداة وليس على النموذج، لذلك يتم الحفاظ على رمز التدريب قصيرًا عمدًا.

أولاً، عليك استيراد المكتبات التي ستستخدمها أثناء التدريب.

## Import the library
import tensorflow as tf
import numpy as np

أنت تقوم بإنشاء البيانات. وهي عبارة عن مصفوفة مكونة من 10000 صف و5 أعمدة.

X_train = (np.random.sample((10000,5)))
y_train =  (np.random.sample((10000,1)))
X_train.shape

الناتج

(10000, 5)

يقوم الكود أدناه بتحويل البيانات وإنشاء النموذج.

لاحظ أن معدل التعلم يساوي 0.1. إذا قمت بتغيير هذا المعدل إلى قيمة أعلى، فلن يجد النموذج حلاً. هذا ما حدث في الجانب الأيسر من الصورة أعلاه.

يستخدم هذا المثال مُقدِّر TensorFlow، وهو واجهة برمجة تطبيقات عالية المستوى تُغلِّف العمليات الحسابية الرياضية. تنتمي المُقدِّرات إلى واجهة برمجة تطبيقات TensorFlow 1.x، لذا فإن المقتطفين البرمجيين أدناه يعملان ضمن تثبيت 1.x أو من خلال tf.compat.v1 مساحة الاسم.

لإنشاء ملفات السجل، عليك تحديد المسار. يتم ذلك باستخدام الوسيطة model_dir.

في مثال TensorBoard أدناه، تقوم بتخزين النموذج داخل دليل العمل، أي المكان الذي تخزن فيه دفتر الملاحظات أو Python داخل هذا المسار، سيقوم TensorFlow بإنشاء مجلد يسمى train مع مجلد فرعي يسمى linreg.

feature_columns = [
      tf.feature_column.numeric_column('x', shape=X_train.shape[1:])]
DNN_reg = tf.estimator.DNNRegressor(feature_columns=feature_columns,
# Indicate where to store the log file    
     model_dir='train/linreg',    
     hidden_units=[500, 300],    
     optimizer=tf.train.ProximalAdagradOptimizer(      
          learning_rate=0.1,      
          l1_regularization_strength=0.001    
      )
)

الناتج

INFO:tensorflow:Using default config.
INFO:tensorflow:Using config: {&#x27;_model_dir': 'train/linreg', '_tf_random_seed': None, '_save_summary_steps': 100, '_save_checkpoints_steps': None, '_save_checkpoints_secs': 600, '_session_config': None, '_keep_checkpoint_max': 5, '_keep_checkpoint_every_n_hours': 10000, '_log_step_count_steps': 100, '_train_distribute': None, '_service': None, '_cluster_spec': <tensorflow.python.training.server_lib.ClusterSpec object at 0x1818e63828>, '_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}

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

# Train the estimator
train_input = tf.estimator.inputs.numpy_input_fn(    
     x={"x": X_train},    
     y=y_train, shuffle=False,num_epochs=None)
DNN_reg.train(train_input,steps=3000)

الناتج

INFO:tensorflow:Calling model_fn.
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:Saving checkpoints for 1 into train/linreg/model.ckpt.
INFO:tensorflow:loss = 40.060104, step = 1
INFO:tensorflow:global_step/sec: 197.061
INFO:tensorflow:loss = 10.62989, step = 101 (0.508 sec)
INFO:tensorflow:global_step/sec: 172.487
INFO:tensorflow:loss = 11.255318, step = 201 (0.584 sec)
INFO:tensorflow:global_step/sec: 193.295
INFO:tensorflow:loss = 10.604872, step = 301 (0.513 sec)
INFO:tensorflow:global_step/sec: 175.378
INFO:tensorflow:loss = 10.090343, step = 401 (0.572 sec)
INFO:tensorflow:global_step/sec: 209.737
INFO:tensorflow:loss = 10.057928, step = 501 (0.476 sec)
INFO:tensorflow:global_step/sec: 171.646
INFO:tensorflow:loss = 10.460144, step = 601 (0.583 sec)
INFO:tensorflow:global_step/sec: 192.269
INFO:tensorflow:loss = 10.529617, step = 701 (0.519 sec)
INFO:tensorflow:global_step/sec: 198.264
INFO:tensorflow:loss = 9.100082, step = 801 (0.504 sec)
INFO:tensorflow:global_step/sec: 226.842
INFO:tensorflow:loss = 10.485607, step = 901 (0.441 sec)
INFO:tensorflow:global_step/sec: 152.929
INFO:tensorflow:loss = 10.052481, step = 1001 (0.655 sec)
INFO:tensorflow:global_step/sec: 166.745
INFO:tensorflow:loss = 11.320213, step = 1101 (0.600 sec)
INFO:tensorflow:global_step/sec: 161.854
INFO:tensorflow:loss = 9.603306, step = 1201 (0.619 sec)
INFO:tensorflow:global_step/sec: 179.074
INFO:tensorflow:loss = 11.110269, step = 1301 (0.556 sec)
INFO:tensorflow:global_step/sec: 202.776
INFO:tensorflow:loss = 11.929443, step = 1401 (0.494 sec)
INFO:tensorflow:global_step/sec: 144.161
INFO:tensorflow:loss = 11.951693, step = 1501 (0.694 sec)
INFO:tensorflow:global_step/sec: 154.144
INFO:tensorflow:loss = 8.620987, step = 1601 (0.649 sec)
INFO:tensorflow:global_step/sec: 151.094
INFO:tensorflow:loss = 10.666125, step = 1701 (0.663 sec)
INFO:tensorflow:global_step/sec: 193.644
INFO:tensorflow:loss = 11.0349865, step = 1801 (0.516 sec)
INFO:tensorflow:global_step/sec: 189.707
INFO:tensorflow:loss = 9.860596, step = 1901 (0.526 sec)
INFO:tensorflow:global_step/sec: 176.423
INFO:tensorflow:loss = 10.695, step = 2001 (0.567 sec)
INFO:tensorflow:global_step/sec: 213.066
INFO:tensorflow:loss = 10.426752, step = 2101 (0.471 sec)
INFO:tensorflow:global_step/sec: 220.975
INFO:tensorflow:loss = 10.594796, step = 2201 (0.452 sec)
INFO:tensorflow:global_step/sec: 219.289
INFO:tensorflow:loss = 10.4212265, step = 2301 (0.456 sec)
INFO:tensorflow:global_step/sec: 215.123
INFO:tensorflow:loss = 9.668612, step = 2401 (0.465 sec)
INFO:tensorflow:global_step/sec: 175.65
INFO:tensorflow:loss = 10.009649, step = 2501 (0.569 sec)
INFO:tensorflow:global_step/sec: 206.962
INFO:tensorflow:loss = 10.477722, step = 2601 (0.483 sec)
INFO:tensorflow:global_step/sec: 229.627
INFO:tensorflow:loss = 9.877638, step = 2701 (0.435 sec)
INFO:tensorflow:global_step/sec: 195.792
INFO:tensorflow:loss = 10.274586, step = 2801 (0.512 sec)
INFO:tensorflow:global_step/sec: 176.803
INFO:tensorflow:loss = 10.061047, step = 2901 (0.566 sec)
INFO:tensorflow:Saving checkpoints for 3000 into train/linreg/model.ckpt.
INFO:tensorflow:Loss for final step: 10.73032.

<tensorflow.python.estimator.canned.dnn.DNNRegressor at 0x1818e63630>

في TensorFlow 2، يتم تنفيذ نفس المهمة بواسطة دالة الاستدعاء Keras TensorBoard، التي تكتب الرسم البياني ومقاييس كل حقبة دون أي رمز تقديري:

logdir = "logs/fit/" + datetime.now().strftime("%Y%m%d-%H%M%S")
tensorboard_callback = keras.callbacks.TensorBoard(log_dir=logdir)

model.fit(train_images, train_labels, epochs=5,
          callbacks=[tensorboard_callback])

بمجرد انتهاء التشغيل، يحتوي دليل السجل على ملف نقطة التفتيش، و graph.pbtxt ملف وواحد أو أكثر events.out.tfevents الملفات — بالضبط ما يقرأه TensorBoard.

في عمل macOS المستخدمين

يعرض عرض Finder أدناه مجلد train/linreg الجديد الذي تم إنشاؤه داخل دليل العمل.

macOS قائمة الملفات التي تعرض مجلدات سجلات التدريب والتسجيل الخطي مع ملفات نقاط التفتيش والأحداث وملفات الرسم البياني graph.pbtxt

في عمل Windows المستخدمين

On Windows تظهر نفس الملفات تحت المسار الذي مررته إلى model_dir، كما هو موضح في شريط العنوان.

Windows عرض مستكشف لمجلد train linreg الذي يحتوي على ملفات أحداث TensorFlow وملفات نقاط التفتيش

يتم إنتاج نفس تنسيق ملف الحدث بواسطة PyTorchلذا فإن لوحة التحكم لا تقتصر على عمليات تشغيل TensorFlow.

الآن بعد أن تم تسجيل أحداث السجل، يمكنك فتح TensorBoard. يعمل TensorBoard على المنفذ 6006 افتراضيًا (Jupyter (يستخدم المنفذ 8888). استخدم الطرفية على macOS أو موجه أناكوندا على Windows.

في عمل macOS المستخدمين

# Different for you
cd /Users/Guru99/tuto_TF
source activate hello-tf!

يتم تخزين دفتر الملاحظات في المسار /Users/Guru99/tuto_TF

في عمل Windows المستخدمين

cd C:\Users\Admin\Anaconda3
activate hello-tf

يتم تخزين دفتر الملاحظات في المسار C:\Users\Admin\Anaconda3

لتشغيل TensorBoard، قم بتشغيل الأمر التالي من ذلك الدليل.

في عمل macOS المستخدمين

tensorboard --logdir=./train/linreg

في عمل Windows المستخدمين

tensorboard --logdir=.\train\linreg

ثم يتم تقديم TensorBoard على الرابط http://localhost:6006

علم ما الذي يتحكم فيه
--logdir المجلد الذي يحتوي على ملفات الأحداث. هذا هو الخيار الوحيد المطلوب.
--port المنفذ المطلوب استخدامه. المنفذ الافتراضي هو 6006؛ قم بتغييره عندما لا تزال جلسة سابقة تستخدم هذا المنفذ.
--bind_all يُشغَّل على جميع واجهات الشبكة. يرتبط TensorBoard بالمضيف المحلي فقط افتراضيًا، لذا يتطلب الوصول عن بُعد هذا الخيار، ولا يمكن دمجه مع --host.
--reload_interval كم مرة، بالثواني، يتم إعادة فحص دليل السجلات بحثًا عن بيانات جديدة.
--logdir_spec نظام احتياطي قديم يقبل عدة مسارات مفصولة بفواصل؛ --logdir لم يعد يدعم هذا النموذج.

استخدم tensorboard dev لم يعد الأمر الفرعي يعمل: تم إيقاف خدمة TensorBoard.dev المستضافة في 1 يناير 2024. الاستخدام المحلي لم يتأثر.

في بعض الأجهزة، تعرض وحدة التحكم اسم المضيف بدلاً من localhost، كما هو الحال في موجه أوامر Anaconda أدناه. يفتح كلا العنوانين نفس لوحة التحكم.

موجه أوامر Anaconda يقوم بتشغيل أمر Tensorboard وطباعة عنوان الخادم على المنفذ 6006

انسخ العنوان والصقه في متصفحك المفضل. ستظهر لك لوحة تحكم Scalars الموضحة أدناه.

تفتح لوحة تحكم TensorBoard Scalars في متصفح بعد تحميل دليل السجلات بشكل صحيح.

إذا رأيت شيئًا كهذا بدلاً من ذلك:

صفحة خطأ TensorBoard: لم يتم العثور على ملفات تعريف الرسم البياني

هذا يعني أن TensorBoard لا يستطيع العثور على ملف السجل. تأكد من توجيهه cd للوصول إلى المسار الصحيح، أو للتأكد من إنشاء سجل الأحداث بالفعل. إذا لم يتم إنشاؤه، فأعد تشغيل رمز التدريب.

إذا كنت ترغب في إغلاق TensorBoard، فاضغط على CTRL+C في نافذة الطرفية.

ملاحظة: تحقق من موجه أوامر Anaconda لمعرفة دليل العمل الحالي.

موجه أوامر Anaconda يعرض بيئة hello-tf النشطة ودليل العمل الحالي

في لقطة الشاشة أعلاه، يوجد موجه الأوامر في C:\Users\Admin، لذا يجب إنشاء ملف السجل ضمن هذا المجلد.

الأسئلة الشائعة

تُخلّف عملية التشغيل المكتملة فهرسًا لنقاط التفتيش، وملفًا واحدًا أو أكثر من ملفات model.ckpt، وملف graph.pbtxt، وملفًا واحدًا على الأقل من ملفات events.out.tfevents. يقرأ TensorBoard ملفات الأحداث فقط؛ أما نقاط التفتيش فتُستخدم لاستئناف التدريب من حيث توقف.

نعم. PyTorch ملخص الشحناتWriter يُصدر هذا الأمر نفس تنسيق ملف الأحداث، لذا فإن الأمر tensorboard –logdir نفسه يُظهر لوحة المعلومات. لا يتغير أي شيء في الخادم، فقط المكتبة التي تُنتج الملخصات.

لا. تم إغلاق الخدمة المستضافة في 1 يناير 2024، ويُرجع الأمر الفرعي tensorboard dev الآن خطأً. شارك النتائج عن طريق تشغيل TensorBoard داخل دفتر ملاحظات مثل Google Colab، أو عن طريق تصدير المخططات بصيغة CSV أو JSON.

أنشئ لكل عملية تشغيل مجلدًا فرعيًا خاصًا بها ضمن مجلد رئيسي مشترك، ثم حدد المجلد الرئيسي باستخدام الأمر ‎–logdir. سيظهر كل مجلد فرعي كعملية تشغيل منفصلة في اللوحة اليسرى، وسيتم رسم المنحنيات على نفس المحاور مع مربع اختيار لكل منها.

يُعدّ الرسم البياني على مستوى العمليات هو العرض الافتراضي، ويُظهر كيفية فهم TensorFlow للبرنامج، حيث يتم رسمه من الأسفل إلى الأعلى. يؤدي تحديد علامة keras إلى التبديل إلى الرسم البياني المفاهيمي، الذي يُظهر طبقات النموذج فقط، مما يُسهّل التحقق منه ومقارنته بتصميمك.

تُنتج عمليات المسح الآلية عشرات التجارب دفعة واحدة، مما يجعل لوحة التحكم أداةً للمقارنة بدلاً من كونها أداةً لمراقبة تجربة واحدة. يسجل مُلحق HParams كل إعداد مع مقاييسه، مما يتيح لك فرز التجارب بدلاً من قراءة المنحنيات واحدة تلو الأخرى.

مساعد الطيار جيثب قم بمراجعة التعليمات البرمجية الأساسية لوظائف الاستدعاء وكتابة الملخصات بسرعة. تعامل مع المخرجات كمسودة: فهي غالبًا ما تمزج بين واجهات برمجة تطبيقات TensorFlow 1.x و 2.x، لذا تحقق من كل اسم مقابل الوثائق الحالية قبل تشغيل الكود.

إما أنه لم يتم كتابة أي ملف أحداث، أو أن المسار المُمرر إلى –logdir لا يتطابق مع المسار الذي استخدمته مهمة التدريب. تأكد من وجود ملف events.out.tfevents في ذلك المجلد، و Windows قم بتشغيل TensorBoard من نفس حرف محرك الأقراص.

تلخيص هذه التدوينة بـ: