TensorBoard عبارة عن مجموعة من تطبيقات الويب لفحص وفهم عمليات التشغيل والرسوم البيانية الخاصة بـ TensorFlow.
يقدم هذا الملف التمهيدي نظرة عامة على المفاهيم الأساسية في TensorBoard، بالإضافة إلى كيفية تفسير المرئيات التي يوفرها TensorBoard. للحصول على مثال متعمق لاستخدام TensorBoard، راجع البرنامج التعليمي: TensorBoard: البدء. يتم ربط الوثائق حول كيفية استخدام TensorBoard للعمل مع الصور والرسوم البيانية والمعلمات الفائقة والمزيد من هناك، جنبًا إلى جنب مع الإرشادات الإرشادية في Colab.
تم تصميم TensorBoard ليعمل دون الاتصال بالإنترنت تمامًا، دون الحاجة إلى أي اتصال بالإنترنت. على سبيل المثال، قد يكون هذا على جهازك المحلي، خلف جدار الحماية الخاص بالشركة، أو في مركز البيانات.
قبل تشغيل TensorBoard، تأكد من إنشاء بيانات ملخصة في دليل السجل عن طريق إنشاء كاتب ملخص:
# sess.graph contains the graph definition; that enables the Graph Visualizer.
file_writer = tf . summary . FileWriter ( '/path/to/logs' , sess . graph )
لمزيد من التفاصيل، راجع البرنامج التعليمي TensorBoard. بمجرد حصولك على ملفات الأحداث، قم بتشغيل TensorBoard وقم بتوفير دليل السجل. إذا كنت تستخدم حزمة TensorFlow المترجمة مسبقًا (على سبيل المثال، قمت بتثبيتها عبر النقطة)، فقم بتشغيل:
tensorboard --logdir path/to/logs
أو إذا كنت تقوم بالإنشاء من المصدر:
bazel build tensorboard:tensorboard
./bazel-bin/tensorboard/tensorboard --logdir path/to/logs
# or even more succinctly
bazel run tensorboard -- --logdir path/to/logs
يجب أن يؤدي هذا إلى طباعة أن TensorBoard قد بدأ. بعد ذلك، اتصل بـ http://localhost:6006.
يتطلب TensorBoard logdir
لقراءة السجلات منه. للحصول على معلومات حول تكوين TensorBoard، قم بتشغيل tensorboard --help
.
يمكن استخدام TensorBoard في Google Chrome أو Firefox. قد تعمل المتصفحات الأخرى، ولكن قد تكون هناك أخطاء أو مشكلات في الأداء.
الخطوة الأولى في استخدام TensorBoard هي الحصول على البيانات من تشغيل TensorFlow. لهذا تحتاج إلى عمليات موجزة. العمليات الموجزة هي عمليات، تمامًا مثل tf.matmul
و tf.nn.relu
، مما يعني أنها تستقبل الموترات، وتنتج الموترات، ويتم تقييمها من داخل الرسم البياني TensorFlow. ومع ذلك، فإن العمليات الموجزة لها تطور: تحتوي Tensors التي تنتجها على نماذج أولية متسلسلة، والتي يتم كتابتها على القرص وإرسالها إلى TensorBoard. لتصور البيانات التلخيصية في TensorBoard، يجب عليك تقييم عملية التلخيص واسترداد النتيجة ثم كتابة تلك النتيجة على القرص باستخدام Summary.FileWriter. يوجد شرح كامل مع الأمثلة في البرنامج التعليمي.
تتضمن العمليات الموجزة المدعومة ما يلي:
tf.summary.scalar
tf.summary.image
tf.summary.audio
tf.summary.text
tf.summary.histogram
عند إجراء عملية ملخصة، ستمنحها أيضًا tag
. العلامة هي في الأساس اسم للبيانات المسجلة بواسطة تلك العملية، وسيتم استخدامها لتنظيم البيانات في الواجهة الأمامية. تنظم لوحات المعلومات العددية والرسم البياني البيانات حسب العلامة، وتجميع العلامات في مجلدات وفقًا للدليل/الإعجاب/التسلسل الهرمي. إذا كان لديك الكثير من العلامات، فنوصي بتجميعها بشرط مائلة.
يأخذ summary.FileWriters
البيانات التلخيصية من TensorFlow، ثم يكتبها في دليل محدد، يُعرف باسم logdir
. وبوجه خاص، تتم كتابة البيانات إلى تفريغ سجل الإلحاق فقط الذي سيكون له "tfevents" في اسم الملف. يقرأ TensorBoard البيانات من دليل كامل، وينظمها في سجل تنفيذ TensorFlow واحد.
لماذا يقرأ الدليل بأكمله، بدلاً من ملف فردي؟ ربما كنت تستخدم المشرف.py لتشغيل النموذج الخاص بك، وفي هذه الحالة إذا تعطل TensorFlow، فسيقوم المشرف بإعادة تشغيله من نقطة تفتيش. عند إعادة تشغيله، سيبدأ في الكتابة إلى ملف أحداث جديد، وسيجمع TensorBoard ملفات الأحداث المختلفة معًا لإنتاج سجل ثابت لما حدث.
قد ترغب في إجراء مقارنة مرئية لعمليات تنفيذ متعددة لنموذجك؛ على سبيل المثال، لنفترض أنك قمت بتغيير المعلمات الفائقة وتريد معرفة ما إذا كانت تتقارب بشكل أسرع. يتيح TensorBoard ذلك من خلال "عمليات تشغيل" مختلفة. عندما يتم تمرير TensorBoard إلى logdir
عند بدء التشغيل، فإنه يتنقل بشكل متكرر في شجرة الدليل المتجذرة في logdir
بحثًا عن الدلائل الفرعية التي تحتوي على بيانات tfevents. في كل مرة يواجه مثل هذا الدليل الفرعي، فإنه يقوم بتحميله كملف run
جديد، وستقوم الواجهة الأمامية بتنظيم البيانات وفقًا لذلك.
على سبيل المثال، إليك دليل سجل TensorBoard منظم جيدًا، مع تشغيلين، "run1" و"run2".
/some/path/mnist_experiments/
/some/path/mnist_experiments/run1/
/some/path/mnist_experiments/run1/events.out.tfevents.1456525581.name
/some/path/mnist_experiments/run1/events.out.tfevents.1456525585.name
/some/path/mnist_experiments/run2/
/some/path/mnist_experiments/run2/events.out.tfevents.1456525385.name
/tensorboard --logdir /some/path/mnist_experiments
يمكنك أيضًا تمرير قائمة مفصولة بفواصل لأدلة السجل، وسيقوم TensorBoard بمراقبة كل دليل. يمكنك أيضًا تعيين أسماء لأدلة السجل الفردية عن طريق وضع نقطتين بين الاسم والمسار، كما في
tensorboard --logdir_spec name1:/path/to/logs/1,name2:/path/to/logs/2
لا يُنصح باستخدام هذه العلامة ( --logdir_spec
) ويمكن عادةً تجنبها . يقوم TensorBoard بالتنقل في أدلة السجل بشكل متكرر؛ للتحكم بشكل أدق، يفضل استخدام شجرة الارتباط الرمزي. قد لا تعمل بعض الميزات عند استخدام --logdir_spec
بدلاً من --logdir
.
تصور لوحة التحكم العددية في TensorBoard إحصائيات العددية التي تختلف بمرور الوقت؛ على سبيل المثال، قد ترغب في تتبع خسارة النموذج أو معدل تعلمه. كما هو موضح في المفاهيم الأساسية ، يمكنك مقارنة عمليات التشغيل المتعددة، ويتم تنظيم البيانات حسب العلامة. تحتوي المخططات الخطية على التفاعلات التالية:
سيؤدي النقر فوق الرمز الأزرق الصغير الموجود في الزاوية السفلية اليسرى من كل مخطط إلى توسيع المخطط
سيؤدي سحب منطقة مستطيلة على المخطط إلى تكبيرها
سيؤدي النقر المزدوج على الرسم البياني إلى التصغير
سيؤدي تحريك الماوس فوق المخطط إلى ظهور علامات التصويب، مع تسجيل قيم البيانات في محدد التشغيل الموجود على اليسار.
بالإضافة إلى ذلك، يمكنك إنشاء مجلدات جديدة لتنظيم العلامات عن طريق كتابة التعبيرات العادية في المربع الموجود أعلى يسار لوحة المعلومات.
تعرض لوحة معلومات الرسم البياني كيفية تباين التوزيع الإحصائي للموتر مع مرور الوقت. وهو يتصور البيانات المسجلة عبر tf.summary.histogram
. يعرض كل مخطط "شرائح" زمنية من البيانات، حيث تمثل كل شريحة رسمًا بيانيًا للموتر في خطوة معينة. لقد تم تنظيمها بحيث تكون أقدم خطوة زمنية في الخلف، وأحدث خطوة زمنية في المقدمة. من خلال تغيير وضع الرسم البياني من "إزاحة" إلى "تراكب"، سيتم تدوير المنظور بحيث يتم عرض كل شريحة رسم بياني كخط ومتراكبة مع بعضها البعض.
تعد لوحة التوزيع طريقة أخرى لتصور بيانات الرسم البياني من tf.summary.histogram
. يُظهر بعض الإحصائيات عالية المستوى حول التوزيع. يمثل كل سطر على الرسم البياني نسبة مئوية في التوزيع على البيانات: على سبيل المثال، يوضح السطر السفلي كيف تغير الحد الأدنى للقيمة بمرور الوقت، ويوضح الخط الموجود في المنتصف كيف تغير الوسيط. وبالقراءة من الأعلى إلى الأسفل يكون للسطور المعنى التالي: [maximum, 93%, 84%, 69%, 50%, 31%, 16%, 7%, minimum]
يمكن أيضًا عرض هذه النسب المئوية كحدود انحراف معياري على التوزيع الطبيعي: [maximum, μ+1.5σ, μ+σ, μ+0.5σ, μ, μ-0.5σ, μ-σ, μ-1.5σ, minimum]
بحيث تكون المناطق الملونة، المقروءة من الداخل إلى الخارج، لها عرض [σ, 2σ, 3σ]
على التوالي.
يمكن للوحة تحكم الصور عرض ملفات png التي تم حفظها عبر tf.summary.image
. تم إعداد لوحة المعلومات بحيث يتوافق كل صف مع علامة مختلفة، ويتوافق كل عمود مع التشغيل. نظرًا لأن لوحة معلومات الصور تدعم ملفات png التعسفية، يمكنك استخدام هذا لتضمين تصورات مخصصة (مثل matplotlib scatterplots) في TensorBoard. تعرض لك لوحة المعلومات هذه دائمًا أحدث صورة لكل علامة.
يمكن للوحة التحكم الصوتية تضمين أدوات صوتية قابلة للتشغيل للصوت المحفوظ عبر tf.summary.audio
. تم إعداد لوحة المعلومات بحيث يتوافق كل صف مع علامة مختلفة، ويتوافق كل عمود مع التشغيل. تقوم لوحة المعلومات هذه دائمًا بتضمين أحدث الصوت لكل علامة.
يمكن لمستكشف الرسم البياني تصور رسم بياني لـ TensorBoard، مما يتيح فحص نموذج TensorFlow. للحصول على أفضل استفادة من مصور الرسم البياني، يجب عليك استخدام نطاقات الأسماء لتجميع العمليات في الرسم البياني الخاص بك بشكل هرمي - وإلا فقد يكون من الصعب فك تشفير الرسم البياني. لمزيد من المعلومات، بما في ذلك الأمثلة، راجع فحص البرنامج التعليمي للرسم البياني TensorFlow.
يتيح لك جهاز Embedding Projector عرض البيانات عالية الأبعاد؛ على سبيل المثال، يمكنك عرض بيانات الإدخال الخاصة بك بعد أن يتم تضمينها في مساحة عالية الأبعاد بواسطة النموذج الخاص بك. يقرأ جهاز العرض المضمن البيانات من ملف نقطة التحقق النموذجي الخاص بك، ويمكن تهيئته ببيانات تعريف إضافية، مثل ملف المفردات أو صور الكائنات. لمزيد من التفاصيل، راجع البرنامج التعليمي للتضمين لجهاز العرض.
تعرض لوحة المعلومات النصية مقتطفات نصية محفوظة عبر tf.summary.text
. يتم دعم ميزات Markdown بما في ذلك الارتباطات التشعبية والقوائم والجداول.
تعرض لوحة معلومات السلاسل الزمنية واجهة موحدة تحتوي على جميع المقاييس والمخططات التكرارية والصور المحفوظة عبر tf.summary.scalar
أو tf.summary.image
أو tf.summary.histogram
. فهو يتيح عرض المخطط الخطي "الدقيق" الخاص بك جنبًا إلى جنب مع الرسوم البيانية للتنشيط وصور أمثلة التدريب، على سبيل المثال.
تشمل الميزات:
ألوان التشغيل المخصصة: انقر على الدوائر الملونة في محدد التشغيل لتغيير لون التشغيل.
البطاقات المثبتة: انقر على أيقونة "الرقم التعريفي" الموجودة على أي بطاقة لإضافتها إلى القسم المثبت في الأعلى لإجراء مقارنة سريعة.
الإعدادات: يوفر الجزء الأيسر إعدادات للمخططات والمرئيات الأخرى. ستستمر الإعدادات المهمة عبر جلسات TensorBoard، عند استضافتها على نفس أصل عنوان URL.
الإكمال التلقائي في مرشح العلامات: ابحث عن مخططات محددة بسهولة أكبر.
أولاً، تأكد من صحة الدليل الذي تم تمريره إلى --logdir
. يمكنك أيضًا التحقق من ذلك من خلال الانتقال إلى لوحة معلومات Scalars (ضمن القائمة "غير نشط") والبحث عن مسار دليل السجل في أسفل الشريط الجانبي الأيسر.
إذا كنت تقوم بالتحميل من المسار الصحيح، فتأكد من وجود ملفات الأحداث. سوف يقوم TensorBoard بالسير بشكل متكرر على السجل الخاص به، ولا بأس إذا كانت البيانات متداخلة ضمن دليل فرعي. تأكد من أن ما يلي يعرض نتيجة واحدة على الأقل:
find DIRECTORY_PATH | grep tfevents
يمكنك أيضًا التحقق من أن ملفات الأحداث تحتوي بالفعل على بيانات عن طريق تشغيل Tensorboard في وضع الفحص لفحص محتويات ملفات الأحداث الخاصة بك.
tensorboard --inspect --logdir DIRECTORY_PATH
قد يستمر أحيانًا عرض مخرجات ملف حدث يتوافق مع TensorBoard الفارغة بضع خطوات، تمثل بعض الأحداث الأولية التي لا تظهر بواسطة TensorBoard (على سبيل المثال، عند استخدام رد اتصال Keras TensorBoard):
tensor
first_step 0
last_step 2
max_step 2
min_step 0
num_steps 2
outoforder_steps [(2, 0), (2, 0), (2, 0)]
في المقابل، قد تبدو مخرجات ملف الحدث الذي يحتوي على المزيد من البيانات كما يلي:
tensor
first_step 0
last_step 55
max_step 250
min_step 0
num_steps 60
outoforder_steps [(2, 0), (2, 0), (2, 0), (2, 0), (50, 9), (100, 19), (150, 29), (200, 39), (250, 49)]
التحديث: بعد الإصدار 2.3.0، لم يعد TensorBoard يقوم بإعادة التحميل تلقائيًا كل 30 ثانية. لإعادة تمكين السلوك، يرجى فتح الإعدادات من خلال النقر على أيقونة الترس في الجزء العلوي الأيمن من واجهة الويب TensorBoard، وتمكين "إعادة تحميل البيانات".
التحديث: يمكن الآن استخدام الخيار التجريبي
--reload_multifile=true
لاستقصاء كافة الملفات "النشيطة" في دليل للبيانات الجديدة، بدلاً من أحدثها كما هو موضح أدناه. يكون الملف "نشطًا" طالما أنه تلقى بيانات جديدة خلال--reload_multifile_inactive_secs
قبل ثوانٍ، والقيمة الافتراضية هي 86400.
تنشأ هذه المشكلة عادةً بسبب كيفية تكرار TensorBoard عبر ملفات tfevents
: فهو يتقدم خلال ملف الأحداث بترتيب الطابع الزمني، ويقرأ ملفًا واحدًا فقط في كل مرة. لنفترض أن لدينا ملفات ذات طوابع زمنية a
و b
، حيث a . بمجرد أن يقرأ TensorBoard جميع الأحداث الموجودة في
a
، فلن يعود إليه أبدًا، لأنه يفترض أن أي أحداث جديدة تتم كتابتها في الملف الأحدث. قد يتسبب هذا في حدوث مشكلة، على سبيل المثال، إذا كان لديك جهازي FileWriters
يكتبان في نفس الوقت إلى نفس الدليل. إذا كان لديك العديد من كتاب الملخص، فيجب أن يكتب كل منهم في دليل منفصل.
التحديث: يمكن الآن استخدام الخيار التجريبي
--reload_multifile=true
لاستقصاء جميع الملفات "النشيطة" في دليل للبيانات الجديدة، والتي تم تعريفها على أنها أي ملف تلقى بيانات جديدة خلال--reload_multifile_inactive_secs
منذ ثانية، والإعداد الافتراضي هو 86400.
لا. يتوقع TensorBoard أن تتم كتابة ملف أحداث واحد فقط في كل مرة، ويعني تعدد كتاب الملخص وجود ملفات أحداث متعددة. إذا كنت تقوم بتشغيل مثيل TensorFlow موزع، فإننا نشجعك على تعيين عامل واحد باعتباره "الرئيس" المسؤول عن جميع عمليات المعالجة الموجزة. راجع المشرف.py للحصول على مثال.
إذا كنت ترى البيانات التي يبدو أنها تنتقل إلى الوراء عبر الزمن وتتداخل مع نفسها، فهناك بعض التفسيرات المحتملة.
قد يكون لديك تنفيذ متعدد لـ TensorFlow تم كتابته جميعًا في نفس دليل السجل. يرجى جعل كل تشغيل TensorFlow يكتب إلى السجل الخاص به.
التحديث: يمكن الآن استخدام الخيار التجريبي
--reload_multifile=true
لاستقصاء جميع الملفات "النشيطة" في دليل للبيانات الجديدة، والتي تم تعريفها على أنها أي ملف تلقى بيانات جديدة خلال--reload_multifile_inactive_secs
منذ ثانية، والإعداد الافتراضي هو 86400.
قد يكون لديك خطأ في التعليمات البرمجية الخاصة بك حيث يتم الاحتفاظ بالمتغير global_step (الذي تم تمريره إلى FileWriter.add_summary
) بشكل غير صحيح.
ربما تكون مهمة TensorFlow قد تعطلت، وتمت إعادة تشغيلها من نقطة تفتيش سابقة. راجع كيفية التعامل مع إعادة تشغيل TensorFlow أدناه.
كحل بديل، حاول تغيير عرض المحور السيني في TensorBoard من steps
إلى wall_time
. سيؤدي هذا إلى توضيح المشكلة بشكل متكرر.
تم تصميم TensorFlow بآلية للاسترداد السلس في حالة تعطل المهمة أو وفاتها: يمكن لـ TensorFlow كتابة ملفات نقاط التفتيش النموذجية بشكل دوري، والتي تمكنك من إعادة تشغيل TensorFlow دون فقدان كل التقدم الذي أحرزته في التدريب.
ومع ذلك، قد يؤدي هذا إلى تعقيد الأمور بالنسبة لـ TensorBoard؛ تخيل أن TensorFlow كتب نقطة تفتيش في الخطوة a
، ثم استمر في التشغيل حتى الخطوة b
، ثم تعطل وأعاد تشغيله عند الطابع الزمني a
. كافة الأحداث المكتوبة بين a
و b
كانت "معزولة" بواسطة حدث إعادة التشغيل ويجب إزالتها.
لتسهيل ذلك، لدينا رسالة SessionLog
في tensorflow/core/util/event.proto
والتي يمكنها تسجيل SessionStatus.START
كحدث؛ مثل كل الأحداث، قد يكون لها step
مرتبطة بها. إذا اكتشف TensorBoard حدث SessionStatus.START
بالخطوة a
، فسوف يفترض أن كل حدث بخطوة أكبر a
كان معزولًا، وسوف يتجاهل تلك الأحداث. قد يتم تعطيل هذا السلوك باستخدام العلامة --purge_orphaned_data false
(في الإصدارات بعد 0.7).
تدعم لوحة معلومات Scalar تصدير البيانات؛ يمكنك النقر فوق خيار "تمكين روابط التنزيل" في الشريط الأيسر. بعد ذلك، ستوفر كل قطعة روابط تنزيل للبيانات التي تحتوي عليها.
إذا كنت بحاجة إلى الوصول إلى مجموعة البيانات الكاملة، فيمكنك قراءة ملفات الأحداث التي يستهلكها TensorBoard باستخدام طريقة summary_iterator
.
نعم! يمكنك استنساخ أحد الأمثلة والتعديل عليها وإنشاء تصوراتك المذهلة. تم توضيح المزيد من الوثائق حول نظام المكونات الإضافية في دليل ADDING_A_PLUGIN. لا تتردد في تقديم طلبات الميزات أو الأسئلة حول وظيفة البرنامج المساعد.
بمجرد رضاك عن المكون الإضافي الجديد الرائد الخاص بك، راجع قسم التوزيع حول كيفية النشر إلى PyPI ومشاركته مع المجتمع.
باستخدام البرنامج المساعد المخصص للحجميات، يمكنك إنشاء مخططات عددية تحتوي على خطوط لأزواج علامات التشغيل المخصصة. ومع ذلك، ضمن لوحة معلومات الكميات الأصلية، يتوافق كل مخطط عددي مع البيانات الخاصة بعلامة محددة ويحتوي على أسطر لكل تشغيل يتضمن تلك العلامة.
يمكن إنشاء مخططات الهامش (التي تصور الحدود الدنيا والعليا) باستخدام البرنامج المساعد المخصص للحجميات. لا يدعم المكون الإضافي scalars الأصلي تصور الهوامش.
وهذا ليس ممكنا بعد. كحل بديل، يمكنك إنشاء مخططك المخصص في التعليمات البرمجية الخاصة بك (على سبيل المثال matplotlib) ثم كتابته في SummaryProto
( core/framework/summary.proto
) وإضافته إلى FileWriter
الخاص بك. بعد ذلك، ستظهر مخططك المخصص في علامة تبويب صورة TensorBoard.
يستخدم TensorBoard أخذ عينات من الخزان لاختزال بياناتك بحيث يمكن تحميلها في ذاكرة الوصول العشوائي. يمكنك تعديل عدد العناصر التي سيتم الاحتفاظ بها لكل علامة باستخدام وسيطة سطر الأوامر --samples_per_plugin
(على سبيل المثال: --samples_per_plugin=scalars=500,images=20
). راجع سؤال Stack Overflow للحصول على مزيد من المعلومات.
سيتم تشغيل إصدارات TensorBoard السابقة لـ TensorBoard 2.0 افتراضيًا على المضيف 0.0.0.0
، والذي يمكن الوصول إليه بشكل عام. بالنسبة لهذه الإصدارات من TensorBoard، يمكنك إيقاف النوافذ المنبثقة عن طريق تحديد --host localhost
عند بدء التشغيل.
في TensorBoard 2.0 والإصدارات الأحدث، يكون --host localhost
هو الإعداد الافتراضي. استخدم --bind_all
لاستعادة السلوك القديم لخدمة الشبكة العامة على كل من IPv4 وIPv6.
tensorboard
بدون تثبيت TensorFlow؟يمكن تشغيل TensorBoard 1.14+ مع مجموعة ميزات مخفضة إذا لم يكن TensorFlow مثبتًا لديك. القيد الأساسي هو أنه اعتبارًا من 1.14، يتم دعم المكونات الإضافية التالية فقط: الكميات القياسية، الكميات المخصصة، الصورة، الصوت، الرسم البياني، جهاز العرض (جزئي)، التوزيعات، الرسوم البيانية، النص، منحنيات العلاقات العامة، الشبكة. بالإضافة إلى ذلك، لا يوجد دعم لأدلة السجل على Google Cloud Storage.
انظر DEVELOPMENT.md.
أولاً، حاول البحث في مشكلات GitHub وStack Overflow. من الممكن أن يكون شخص آخر قد واجه نفس المشكلة أو السؤال بالفعل.
يجب أن تنتقل أسئلة الاستخدام العامة (أو المشكلات التي قد تكون خاصة بالإعداد المحلي الخاص بك) إلى Stack Overflow.
إذا وجدت خطأً في TensorBoard، فيرجى تقديم مشكلة GitHub مع أكبر قدر ممكن من المعلومات الداعمة التي يمكنك تقديمها (على سبيل المثال، إرفاق ملفات الأحداث، بما في ذلك مخرجات tensorboard --inspect
وما إلى ذلك).