יש שאלה? התחבר לקהילה בפורום הביקור של TensorFlow

התחל לעבוד עם 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 פשוט לסיווג התמונות לעשרה כיתות.

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 ()

בעת אימון עם Model.fit () של Keras , הוספת ה- 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 . בשורת הפקודה, הפעל את אותה פקודה ללא "%".

%tensorboard --logdir logs/fit

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

  • לוח המחוונים של Scalars מראה כיצד האובדן והמדדים משתנים בכל תקופה. אתה יכול להשתמש בו כדי לעקוב אחר מהירות האימון, קצב הלמידה וערכים סקלריים אחרים.
  • לוח המחוונים של Graphs עוזר לכם לדמיין את המודל שלכם. במקרה זה מוצג גרף שכבות Keras שיכול לעזור לך להבטיח שהוא בנוי כהלכה.
  • ממרכזי השליטה הפצות והיסטוגרמות להראות חלוקת מותח לאורך זמן. זה יכול להיות שימושי כדי לדמיין משקולות והטיות ולוודא שהן משתנות בצורה צפויה.

תוספים נוספים של TensorBoard מופעלים אוטומטית כאשר אתה רושם סוגים אחרים של נתונים. לדוגמא, השיחה החוזרת של Keras TensorBoard מאפשרת לך גם לרשום תמונות והטבעות. תוכל לראות אילו תוספים אחרים זמינים ב- TensorBoard על ידי לחיצה על התפריט הנפתח "לא פעיל" בצד שמאל למעלה.

שימוש ב- TensorBoard בשיטות אחרות

בעת אימון בשיטות כגוןtf.GradientTape() , השתמש ב- tf.summary כדי לרשום את המידע הנדרש.

השתמש באותו מערך נתונים שלמעלה, אך המיר אותו ל-tf.data.Dataset כדי לנצל את יכולות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

שים לב כי קריאה זו משתמשת בקידומת הקריאה ( ! ) כדי להפעיל את הקליפה ולא בקידומת האחוז ( % ) כדי להפעיל את קסם הקולבה. בעת הפעלת פקודה זו משורת הפקודה אין צורך באף קידומת.

צפה בדוגמה כאן .

לפרטים נוספים על אופן השימוש ב- TensorBoard.dev, ראה https://tensorboard.dev/#get-started