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

ما هو TensorBoard؟
TensorBoard هي واجهة تُستخدم لعرض الرسم البياني وأدوات أخرى لفهم النموذج وتصحيح أخطائه وتحسينه. وهي أداة توفر قياسات وتصورات لسير عمل التعلم الآلي. tracمقاييس مثل الخسارة والدقة، وتصور الرسم البياني للنموذج، وإسقاط التضمينات في مساحات ذات أبعاد أقل.
يأتي TensorBoard مزودًا بـ TensorFlow ويعمل كخادم ويب محلي صغير يقرأ ملفات الأحداث التي تكتبها مهمة التدريب على القرص.
مثال على تصور الرسم البياني باستخدام TensorBoard
الصورة أدناه مأخوذة من الرسم البياني TensorBoard الذي ستنشئه في هذا الدرس. وهي اللوحة الرئيسية:
من الصورة أدناه، يمكنك رؤية لوحة تصور الرسم البياني TensorBoard. تحتوي اللوحة على علامات تبويب مختلفة مرتبطة بمستوى المعلومات التي تضيفها عند تشغيل النموذج.
- العددية: عرض معلومات مفيدة مختلفة أثناء تدريب النموذج
- الرسوم البيانية: اعرض النموذج
- الرسم البياني: عرض الأوزان باستخدام الرسم البياني التكراري
- التوزيع: اعرض توزيع الوزن
- كشاف ضوئي: عرض تحليل المكونات الرئيسية وخوارزمية T-SNE. التقنية المستخدمة لتقليل الأبعاد
خلال هذا الدرس التعليمي لـ TensorBoard، ستقوم بتدريب نموذج بسيط التعلم العميق النموذج، ويتم قراءة الرسم البياني الناتج من الأسفل إلى الأعلى.
إذا نظرت إلى الرسم البياني، يمكنك فهم كيفية عمل النموذج. تشير الشارات المرقمة في لقطة الشاشة أدناه إلى هذه المراحل الأربع:
- إدراج البيانات في النموذج: ادفع كمية من البيانات مساوية لحجم الدُفعة إلى النموذج، أي عدد تغذية البيانات بعد كل تكرار
- قم بتغذية البيانات إلى Tensors
- درب النموذج
- عرض عدد الدفعات أثناء التدريب. احفظ النموذج على القرص.
تعتمد الفكرة الأساسية وراء 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: {'_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 الجديد الذي تم إنشاؤه داخل دليل العمل.
في عمل Windows المستخدمين
On Windows تظهر نفس الملفات تحت المسار الذي مررته إلى model_dir، كما هو موضح في شريط العنوان.
يتم إنتاج نفس تنسيق ملف الحدث بواسطة 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 أدناه. يفتح كلا العنوانين نفس لوحة التحكم.
انسخ العنوان والصقه في متصفحك المفضل. ستظهر لك لوحة تحكم Scalars الموضحة أدناه.
إذا رأيت شيئًا كهذا بدلاً من ذلك:
هذا يعني أن TensorBoard لا يستطيع العثور على ملف السجل. تأكد من توجيهه cd للوصول إلى المسار الصحيح، أو للتأكد من إنشاء سجل الأحداث بالفعل. إذا لم يتم إنشاؤه، فأعد تشغيل رمز التدريب.
إذا كنت ترغب في إغلاق TensorBoard، فاضغط على CTRL+C في نافذة الطرفية.
ملاحظة: تحقق من موجه أوامر Anaconda لمعرفة دليل العمل الحالي.
في لقطة الشاشة أعلاه، يوجد موجه الأوامر في C:\Users\Admin، لذا يجب إنشاء ملف السجل ضمن هذا المجلد.










