انتقل إلى المحتوى الرئيسي

الوحدة 7 — TensorBoard: متابعة الخسائر والأوزان والمدرّجات

تُعطي سجلّات fit رقمين في كلّ حقبة. وهذا يكفي لمعرفة أنّ تدريبًا يجري سيّئًا، ولا يكفي البتّة لمعرفة السبب. ويُجيب TensorBoard عن السؤال الثاني.

توصيل المتابعة

يُضاف الاستدعاء إلى قائمة الوحدة السادسة، مع مجلَّدٍ متميّز لكلّ تشغيل.

import datetime
from tensorflow import keras

horodatage = datetime.datetime.now().strftime("%Y%m%d-%H%M%S")
journal = f"journaux/{horodatage}-adam-lr1e3"

suivi = keras.callbacks.TensorBoard(
log_dir=journal,
histogram_freq=1,
write_graph=True,
update_freq="epoch",
)

modele.fit(jeu, validation_data=jeu_val, epochs=50, callbacks=[suivi])

ثمّ من طرفيّة أو خليّة دفتر:

tensorboard --logdir journaux

اسم المجلَّد هو الآليّة الوحيدة لتمييز عمليات التشغيل. واسمٌ يصف الإعدادات — المُحسِّن والمعدّل والمعمارية — يُوفّر عليك مقارنة اثنتي عشرة منحنية مجهولة الاسم بعد أسبوع. وهو استثمارٌ من عشر ثوانٍ يُثمر دائمًا.

update_freq="batch" مُكلف

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

قارن التشغيلات، لا تنظر إليها واحدةً واحدة

هذا هو الاستعمال الذي يُقدّم أكبر قيمة. فمع مجلَّدٍ لكلّ إعداد تحت أبٍ واحد، يُراكم TensorBoard المنحنيات ويجعل المقارنات فوريّة.

journaux/
20260810-1420-adam-lr1e3/
20260810-1455-adam-lr1e4/
20260810-1530-sgd-momentum/

عندئذٍ تظهر ثلاث قراءات في نظرةٍ واحدة. فالفرق بين خسارة التدريب وخسارة المتابعة يُعطي الإفراط في التعلّم، تمامًا كما في الوحدة 9 من الدورة 07. والانحدار الأوّليّ يدلّ على ما إذا كان معدّل التعلّم منخفضًا جدًّا. وانخفاضٌ حادٌّ في المتابعة يُحدّد الحقبة التي تباعد فيها التدريب.

مدرّجات الأوزان، الأداة قليلة الاستعمال

يحفظ histogram_freq=1 توزيع الأوزان والتنشيطات في كلّ حقبة. وهي الوسيلة الوحيدة لرؤية الأمراض الموصوفة في الوحدة 6 من الدورة 07 وهي تحدث.

ما يُظهره المدرّجالتشخيص
توزيع يتسطّح نحو الصفر طبقةً بعد طبقةتدرّج متلاشٍ
قيم تنتشر على عدّة رتبٍ من المقدارتدرّج ينفجر
تنشيطات مُتركِّزة في الصفر داخل طبقة ReLUعصبونات ميّتة
توزيع جامدٌ من حقبة إلى أخرىطبقة لا تتعلّم

الحالة الأخيرة تستحقّ عناية خاصّة لأنّها صامتة. فطبقةٌ لا تتحرّك أوزانها قد تدلّ على طبقة جُمِّدت خطأً، أو على tf.Variable أُنشئ بلا add_weight كما في الوحدة 4، أو على تدرّجٍ لم يعد يصل إلى هذا العمق. ولا يُنتج أيٌّ من هذه الأسباب الثلاثة أيّ رسالة.

سجِّل كمّياتك الخاصّة

يمكن لأيّ كمّية عدديّة الالتحاق بـTensorBoard، وهذا مفيد للمقاييس المهنيّة التي يتجاهلها Keras.

import tensorflow as tf

redacteur = tf.summary.create_file_writer(journal + "/metier")

with redacteur.as_default():
tf.summary.scalar("cout_faux_positifs", cout, step=epoque)
tf.summary.histogram("scores_predits", scores, step=epoque)
tf.summary.image("erreurs", images_mal_classees, step=epoque, max_outputs=8)

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

المُحلِّل يُجيب عن «لماذا هذا بطيء»

يقيس المُحلِّل توزيع الوقت بين تهيئة البيانات والحساب، ممّا يحسم السؤال المتروك مفتوحًا في الوحدة 5.

suivi = keras.callbacks.TensorBoard(
log_dir=journal,
profile_batch="10,20", # يُحلّل الحزم من 10 إلى 20
)

التحليل من الحزمة الأولى يقيس بالأساس التهيئة والتتبّع، لا النظام الدائم: ومن هنا المجال المُزاح. ثمّ يعرض تبويب المُحلِّل زمن انتظار جهاز الحساب. وبعد بضعة في المئة، يكون خطّ البيانات هو المُتَّهَم وتنطبق الوحدة 5.

تسلسل التشخيص

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

في الخلاصة

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

الوحدة التالية: التعلّم بالنقل، الذي يُتيح بلوغ نتائج طيّبة بلا تدريب شبكةٍ من الصفر.