مساعدة في حماية الحاجز المرجاني العظيم مع TensorFlow على Kaggle تاريخ التحدي

ابدأ مع TensorBoard

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

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

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

# Load the TensorBoard notebook extension
%load_ext tensorboard
import tensorflow as tf
import datetime
# Clear any logs from previous runs
rm -rf ./logs/

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

mnist = tf.keras.datasets.mnist

(x_train, y_train),(x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0

def create_model():
  return tf.keras.models.Sequential([
    tf.keras.layers.Flatten(input_shape=(28, 28)),
    tf.keras.layers.Dense(512, activation='relu'),
    tf.keras.layers.Dropout(0.2),
    tf.keras.layers.Dense(10, activation='softmax')
  ])
Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/mnist.npz
11493376/11490434 [==============================] - 0s 0us/step

استخدام TensorBoard مع Keras Model.fit ()

عندما تدريب مع Keras في Model.fit () ، إضافة tf.keras.callbacks.TensorBoard رد يضمن أن السجلات يتم إنشاؤها وتخزينها. بالإضافة إلى ذلك، تمكن الرسم البياني حساب كل عصر مع histogram_freq=1 (هذا هو إيقاف افتراضيا)

ضع السجلات في دليل فرعي مختوم زمنيًا للسماح بتحديد سهل لعمليات التدريب المختلفة.

model = create_model()
model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])

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

model.fit(x=x_train, 
          y=y_train, 
          epochs=5, 
          validation_data=(x_test, y_test), 
          callbacks=[tensorboard_callback])
Train on 60000 samples, validate on 10000 samples
Epoch 1/5
60000/60000 [==============================] - 15s 246us/sample - loss: 0.2217 - accuracy: 0.9343 - val_loss: 0.1019 - val_accuracy: 0.9685
Epoch 2/5
60000/60000 [==============================] - 14s 229us/sample - loss: 0.0975 - accuracy: 0.9698 - val_loss: 0.0787 - val_accuracy: 0.9758
Epoch 3/5
60000/60000 [==============================] - 14s 231us/sample - loss: 0.0718 - accuracy: 0.9771 - val_loss: 0.0698 - val_accuracy: 0.9781
Epoch 4/5
60000/60000 [==============================] - 14s 227us/sample - loss: 0.0540 - accuracy: 0.9820 - val_loss: 0.0685 - val_accuracy: 0.9795
Epoch 5/5
60000/60000 [==============================] - 14s 228us/sample - loss: 0.0433 - accuracy: 0.9862 - val_loss: 0.0623 - val_accuracy: 0.9823
<tensorflow.python.keras.callbacks.History at 0x7fc8a5ee02e8>

ابدأ TensorBoard من خلال سطر الأوامر أو من خلال تجربة استخدام الكمبيوتر المحمول. الواجهتان متماثلتان بشكل عام. في أجهزة الكمبيوتر المحمولة، استخدم %tensorboard السحر الخط. في سطر الأوامر ، قم بتشغيل نفس الأمر بدون "٪".

%tensorboard --logdir logs/fit

نظرة عامة مختصرة على لوحات المعلومات المعروضة (علامات التبويب في شريط التنقل العلوي):

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

يتم تمكين ملحقات TensorBoard الإضافية تلقائيًا عند تسجيل أنواع أخرى من البيانات. على سبيل المثال ، يتيح لك رد الاتصال Keras TensorBoard تسجيل الصور وحفلات الزفاف أيضًا. يمكنك رؤية المكونات الإضافية الأخرى المتوفرة في TensorBoard من خلال النقر على القائمة المنسدلة "غير نشطة" في أعلى اليمين.

استخدام TensorBoard مع طرق أخرى

عندما تدريب مع طرق مثل tf.GradientTape() ، واستخدام tf.summary لتسجيل المعلومات المطلوبة.

استخدام نفس مجموعة البيانات على النحو الوارد أعلاه، ولكن تحويله إلى tf.data.Dataset للاستفادة من الجرعات القدرات:

train_dataset = tf.data.Dataset.from_tensor_slices((x_train, y_train))
test_dataset = tf.data.Dataset.from_tensor_slices((x_test, y_test))

train_dataset = train_dataset.shuffle(60000).batch(64)
test_dataset = test_dataset.batch(64)

رمز التدريب يتبع المتقدم التشغيل السريع البرنامج التعليمي، ولكن يظهر كيفية تسجيل المقاييس لTensorBoard. اختر الخسارة والمحسن:

loss_object = tf.keras.losses.SparseCategoricalCrossentropy()
optimizer = tf.keras.optimizers.Adam()

قم بإنشاء مقاييس ذات حالة يمكن استخدامها لتجميع القيم أثناء التدريب وتسجيلها في أي وقت:

# Define our metrics
train_loss = tf.keras.metrics.Mean('train_loss', dtype=tf.float32)
train_accuracy = tf.keras.metrics.SparseCategoricalAccuracy('train_accuracy')
test_loss = tf.keras.metrics.Mean('test_loss', dtype=tf.float32)
test_accuracy = tf.keras.metrics.SparseCategoricalAccuracy('test_accuracy')

تحديد وظائف التدريب والاختبار:

def train_step(model, optimizer, x_train, y_train):
  with tf.GradientTape() as tape:
    predictions = model(x_train, training=True)
    loss = loss_object(y_train, predictions)
  grads = tape.gradient(loss, model.trainable_variables)
  optimizer.apply_gradients(zip(grads, model.trainable_variables))

  train_loss(loss)
  train_accuracy(y_train, predictions)

def test_step(model, x_test, y_test):
  predictions = model(x_test)
  loss = loss_object(y_test, predictions)

  test_loss(loss)
  test_accuracy(y_test, predictions)

قم بإعداد مؤلفي الملخصات لكتابة الملخصات على القرص في دليل سجلات مختلف:

current_time = datetime.datetime.now().strftime("%Y%m%d-%H%M%S")
train_log_dir = 'logs/gradient_tape/' + current_time + '/train'
test_log_dir = 'logs/gradient_tape/' + current_time + '/test'
train_summary_writer = tf.summary.create_file_writer(train_log_dir)
test_summary_writer = tf.summary.create_file_writer(test_log_dir)

ابدأ التدريب. استخدام tf.summary.scalar() لتسجيل المقاييس (خسارة والدقة) خلال تدريب / اختبار في نطاق من الكتاب ملخص لكتابة الملخصات إلى القرص. يمكنك التحكم في المقاييس التي يجب تسجيلها وعدد مرات القيام بذلك. أخرى tf.summary ظائف تمكين تسجيل أنواع أخرى من البيانات.

model = create_model() # reset our model

EPOCHS = 5

for epoch in range(EPOCHS):
  for (x_train, y_train) in train_dataset:
    train_step(model, optimizer, x_train, y_train)
  with train_summary_writer.as_default():
    tf.summary.scalar('loss', train_loss.result(), step=epoch)
    tf.summary.scalar('accuracy', train_accuracy.result(), step=epoch)

  for (x_test, y_test) in test_dataset:
    test_step(model, x_test, y_test)
  with test_summary_writer.as_default():
    tf.summary.scalar('loss', test_loss.result(), step=epoch)
    tf.summary.scalar('accuracy', test_accuracy.result(), step=epoch)

  template = 'Epoch {}, Loss: {}, Accuracy: {}, Test Loss: {}, Test Accuracy: {}'
  print (template.format(epoch+1,
                         train_loss.result(), 
                         train_accuracy.result()*100,
                         test_loss.result(), 
                         test_accuracy.result()*100))

  # Reset metrics every epoch
  train_loss.reset_states()
  test_loss.reset_states()
  train_accuracy.reset_states()
  test_accuracy.reset_states()
Epoch 1, Loss: 0.24321186542510986, Accuracy: 92.84333801269531, Test Loss: 0.13006582856178284, Test Accuracy: 95.9000015258789
Epoch 2, Loss: 0.10446818172931671, Accuracy: 96.84833526611328, Test Loss: 0.08867532759904861, Test Accuracy: 97.1199951171875
Epoch 3, Loss: 0.07096975296735764, Accuracy: 97.80166625976562, Test Loss: 0.07875105738639832, Test Accuracy: 97.48999786376953
Epoch 4, Loss: 0.05380449816584587, Accuracy: 98.34166717529297, Test Loss: 0.07712937891483307, Test Accuracy: 97.56999969482422
Epoch 5, Loss: 0.041443776339292526, Accuracy: 98.71833038330078, Test Loss: 0.07514958828687668, Test Accuracy: 97.5

افتح لوحة TensorBoard مرة أخرى ، وقم هذه المرة بتوجيهها إلى دليل السجل الجديد. كان بإمكاننا أيضًا بدء TensorBoard لمراقبة التدريب أثناء تقدمه.

%tensorboard --logdir logs/gradient_tape

هذا هو! لقد شاهدت الآن كيفية استخدام TensorBoard سواء من خلال رد Keras ومن خلال tf.summary لمزيد من السيناريوهات المخصصة.

TensorBoard.dev: استضافة وتبادل نتائج تجربة ML

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

لاستخدام TensorBoard.dev ، قم بتشغيل الأمر التالي:

!tensorboard dev upload \
  --logdir logs/fit \
  --name "(optional) My latest experiment" \
  --description "(optional) Simple comparison of several hyperparameters" \
  --one_shot

لاحظ أن هذا الاحتجاج يستخدم البادئة التعجب ( ! ) إلى الاحتجاج قذيفة بدلا من البادئة في المئة ( % ) لاستدعاء السحر colab. عند استدعاء هذا الأمر من سطر الأوامر ، ليست هناك حاجة لأي من البادئة.

عرض مثال هنا .

لمزيد من المعلومات حول كيفية استخدام TensorBoard.dev، انظر https://tensorboard.dev/#get-started