התחל עם TensorBoard

הצג באתר TensorFlow.org הפעל בגוגל קולאב צפה במקור ב-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

סקירה קצרה של לוחות המחוונים המוצגים (כרטיסיות בסרגל הניווט העליון):

  • מופעי מחווני Scalars איך ההפסד ומדדה לשנות עם כול תקופה. אתה יכול להשתמש בו גם כדי לעקוב אחר מהירות האימון, קצב הלמידה וערכים סקלרים אחרים.
  • לוח מחווני הגרפים עוזרים לך לדמיין המודל שלך. במקרה זה, מוצג גרף השכבות של 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)

הקוד הכשרה עוקב QuickStart מתקדמת ההדרכה, אבל מראה כיצד להתחבר מדדי 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