با TensorBoard شروع کنید

مشاهده در TensorFlow.org در Google Colab اجرا شود مشاهده منبع در GitHub دانلود دفترچه یادداشت

در یادگیری ماشینی، برای بهبود چیزی اغلب باید بتوانید آن را اندازه بگیرید. 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 callback به شما امکان می دهد تصاویر و جاسازی ها را نیز ثبت کنید. با کلیک بر روی منوی کشویی «غیرفعال» در سمت راست بالا، می‌توانید ببینید چه افزونه‌های دیگری در 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 را باز کنید، این بار آن را به سمت فهرست جدید log قرار دهید. همچنین می‌توانستیم 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