مقیاس بندی TensorBoard: معیارهای آموزش ثبت در Keras

مشاهده در TensorFlow.org در Google Colab اجرا شود مشاهده منبع در GitHub

بررسی اجمالی

یادگیری ماشین همیشه شامل درک معیارهای کلیدی مانند ضرر و چگونگی تغییر آنها با پیشرفت آموزش است. این معیارها می تواند کمک به شما را در درک اگر شما در حال Over-fitting خواهد ، برای مثال، و یا اگر شما آموزش بی ارزش هستیم برای مدت زمان طولانی. ممکن است بخواهید این معیارها را در دوره های آموزشی مختلف مقایسه کنید تا به اشکال زدایی و بهبود مدل خود کمک کنید.

اسکالرهای داشبورد TensorBoard اجازه می دهد تا شما را به تجسم این معیارها با استفاده از یک API ساده با تلاش بسیار کمی. این آموزش مثال‌های بسیار ابتدایی را ارائه می‌کند تا به شما کمک کند یاد بگیرید چگونه از این APIها با TensorBoard هنگام توسعه مدل Keras خود استفاده کنید. شما یاد خواهید گرفت که چگونه از Keras TensorBoard callback و TensorFlow Summary API برای تجسم اسکالرهای پیش فرض و سفارشی استفاده کنید.

برپایی

# Load the TensorBoard notebook extension.
%load_ext tensorboard
from datetime import datetime
from packaging import version

import tensorflow as tf
from tensorflow import keras

import numpy as np

print("TensorFlow version: ", tf.__version__)
assert version.parse(tf.__version__).release[0] >= 2, \
    "This notebook requires TensorFlow 2.0 or above."
TensorFlow version:  2.2

داده ها را برای یک رگرسیون ساده تنظیم کنید

شما در حال حاضر قصد استفاده از Keras برای محاسبه رگرسیون، به عنوان مثال، پیدا کردن بهترین خط از مناسب برای یک مجموعه داده جفت می شود. (در حالی که با استفاده از شبکه های عصبی و گرادیان نزولی است Overkill برای این نوع مشکل ، آن را برای یک مثال بسیار آسان به درک.)

شما در حال رفتن به استفاده از TensorBoard برای مشاهده آموزش و از دست دادن به تست چگونه تغییر در سراسر دوره. امیدواریم با گذشت زمان شاهد کاهش تمرینات و از دست دادن تست باشید و سپس ثابت بمانید.

اول، تولید 1000 امتیاز داده تقریبا در امتداد خط Y = 0.5X + 2. این نقاط داده را به مجموعه های آموزشی و آزمایشی تقسیم کنید. امید شما این است که شبکه عصبی این رابطه را یاد بگیرد.

data_size = 1000
# 80% of the data is for training.
train_pct = 0.8

train_size = int(data_size * train_pct)

# Create some input data between -1 and 1 and randomize it.
x = np.linspace(-1, 1, data_size)
np.random.shuffle(x)

# Generate the output data.
# y = 0.5x + 2 + noise
y = 0.5 * x + 2 + np.random.normal(0, 0.05, (data_size, ))

# Split into test and train pairs.
x_train, y_train = x[:train_size], y[:train_size]
x_test, y_test = x[train_size:], y[train_size:]

آموزش مدل و از دست دادن ورود به سیستم

اکنون آماده تعریف، آموزش و ارزیابی مدل خود هستید.

برای ورود اسکالر از دست دادن شما به عنوان آموزش، شما زیر را انجام دهید:

  1. ایجاد Keras پاسخ به تماس TensorBoard
  2. دایرکتوری گزارش را مشخص کنید
  3. رمز عبور پاسخ به تماس TensorBoard به Keras، Model.fit () .

TensorBoard داده های log را از سلسله مراتب دایرکتوری log می خواند. در این نوت بوک، دایرکتوری ورود به سیستم ریشه است logs/scalars ، پسوند یک دایرکتوری فرعی مهر زمان. دایرکتوری فرعی مهر زمانی به شما این امکان را می دهد که با استفاده از TensorBoard و تکرار روی مدل خود، به راحتی اجراهای آموزشی را شناسایی و انتخاب کنید.

logdir = "logs/scalars/" + datetime.now().strftime("%Y%m%d-%H%M%S")
tensorboard_callback = keras.callbacks.TensorBoard(log_dir=logdir)

model = keras.models.Sequential([
    keras.layers.Dense(16, input_dim=1),
    keras.layers.Dense(1),
])

model.compile(
    loss='mse', # keras.losses.mean_squared_error
    optimizer=keras.optimizers.SGD(learning_rate=0.2),
)

print("Training ... With default parameters, this takes less than 10 seconds.")
training_history = model.fit(
    x_train, # input
    y_train, # output
    batch_size=train_size,
    verbose=0, # Suppress chatty output; use Tensorboard instead
    epochs=100,
    validation_data=(x_test, y_test),
    callbacks=[tensorboard_callback],
)

print("Average test loss: ", np.average(training_history.history['loss']))
Training ... With default parameters, this takes less than 10 seconds.
Average test loss:  0.05271831926424056

بررسی ضرر با استفاده از TensorBoard

اکنون، TensorBoard را با مشخص کردن دایرکتوری root log که در بالا استفاده کرده اید، راه اندازی کنید.

چند ثانیه صبر کنید تا رابط کاربری TensorBoard بچرخد.

%tensorboard --logdir logs/scalars

ممکن است TensorBoard پیام "No dashboards are active for the data set فعلی" را نمایش دهد. دلیلش این است که داده‌های ثبت اولیه هنوز ذخیره نشده است. با پیشرفت آموزش، مدل Keras شروع به ثبت داده ها می کند. TensorBoard به طور دوره‌ای به‌روزرسانی می‌شود و معیارهای اسکالر شما را به شما نشان می‌دهد. اگر حوصله ندارید، می‌توانید روی فلش Refresh در بالا سمت راست ضربه بزنید.

همانطور که پیشرفت تمرین را مشاهده می کنید، توجه داشته باشید که چگونه از دست دادن آموزش و اعتبارسنجی به سرعت کاهش می یابد و سپس ثابت می ماند. در واقع، شما می توانستید بعد از 25 دوره تمرین را متوقف کنید، زیرا تمرینات بعد از آن مرحله چندان بهبود نیافت.

برای مشاهده نقاط داده خاص، نشانگر را روی نمودار نگه دارید. همچنین می توانید با ماوس خود بزرگنمایی کنید یا بخشی از آنها را برای مشاهده جزئیات بیشتر انتخاب کنید.

به انتخابگر "Runs" در سمت چپ توجه کنید. یک "run" مجموعه‌ای از گزارش‌ها را از یک دور آموزش نشان می‌دهد، در این مورد نتیجه Model.fit(). توسعه دهندگان معمولاً تعداد بسیار زیادی اجرا دارند، زیرا آنها مدل خود را در طول زمان آزمایش و توسعه می دهند.

از انتخابگر Runs برای انتخاب اجراهای خاص استفاده کنید یا فقط از بین آموزش یا اعتبارسنجی انتخاب کنید. مقایسه اجراها به شما کمک می کند ارزیابی کنید که کدام نسخه از کد شما مشکل شما را بهتر حل می کند.

بسیار خوب، نمودار ضرر TensorBoard نشان می دهد که ضرر به طور مداوم هم برای آموزش و هم برای اعتبارسنجی کاهش می یابد و سپس تثبیت می شود. این بدان معناست که معیارهای مدل احتمالاً بسیار خوب هستند! حالا ببینید مدل در زندگی واقعی چگونه رفتار می کند.

با توجه به اطلاعات ورودی (60، 25، 2)، خط y یک = 0.5X + 2 باید عملکرد (32، 14.5، 3). آیا مدل موافق است؟

print(model.predict([60, 25, 2]))
# True values to compare predictions against: 
# [[32.0]
#  [14.5]
#  [ 3.0]]
[[32.234306 ]
 [14.5974245]
 [ 3.0074697]]

بد نیست!

ثبت اسکالرهای سفارشی

اگر شما می خواهید برای ورود ارزش های سفارشی، مانند نرخ یادگیری پویا ؟ برای انجام این کار، باید از TensorFlow Summary API استفاده کنید.

مدل رگرسیون را دوباره آموزش دهید و نرخ یادگیری سفارشی را ثبت کنید. در اینجا چگونه است:

  1. درست یک نویسنده فایل، با استفاده tf.summary.create_file_writer() .
  2. یک تابع نرخ یادگیری سفارشی را تعریف کنید. این خواهد شد به Keras گذشت LearningRateScheduler پاسخ به تماس.
  3. در داخل تابع نرخ یادگیری، استفاده tf.summary.scalar() برای ورود به سیستم نرخ یادگیری سفارشی.
  4. فراخوانی LearningRateScheduler را به Model.fit() ارسال کنید.

به طور کلی، برای ورود یک اسکالر سفارشی، شما نیاز به استفاده tf.summary.scalar() با یک نویسنده فایل. نویسنده فایل مسئول نوشتن داده ها برای این اجرا به پوشه مشخص است و به طور ضمنی استفاده می شود که شما با استفاده از tf.summary.scalar() .

logdir = "logs/scalars/" + datetime.now().strftime("%Y%m%d-%H%M%S")
file_writer = tf.summary.create_file_writer(logdir + "/metrics")
file_writer.set_as_default()

def lr_schedule(epoch):
  """
  Returns a custom learning rate that decreases as epochs progress.
  """
  learning_rate = 0.2
  if epoch > 10:
    learning_rate = 0.02
  if epoch > 20:
    learning_rate = 0.01
  if epoch > 50:
    learning_rate = 0.005

  tf.summary.scalar('learning rate', data=learning_rate, step=epoch)
  return learning_rate

lr_callback = keras.callbacks.LearningRateScheduler(lr_schedule)
tensorboard_callback = keras.callbacks.TensorBoard(log_dir=logdir)

model = keras.models.Sequential([
    keras.layers.Dense(16, input_dim=1),
    keras.layers.Dense(1),
])

model.compile(
    loss='mse', # keras.losses.mean_squared_error
    optimizer=keras.optimizers.SGD(),
)

training_history = model.fit(
    x_train, # input
    y_train, # output
    batch_size=train_size,
    verbose=0, # Suppress chatty output; use Tensorboard instead
    epochs=100,
    validation_data=(x_test, y_test),
    callbacks=[tensorboard_callback, lr_callback],
)

بیایید دوباره به TensorBoard نگاه کنیم.

%tensorboard --logdir logs/scalars

با استفاده از "اجرا می شود" انتخاب در سمت چپ توجه کنید که شما یک <timestamp>/metrics اجرا. با انتخاب این اجرا، نمودار "نرخ یادگیری" نمایش داده می شود که به شما امکان می دهد پیشرفت سرعت یادگیری را در طول این اجرا بررسی کنید.

همچنین می توانید منحنی های از دست دادن آموزش و اعتبارسنجی این اجرا را با اجراهای قبلی خود مقایسه کنید. همچنین ممکن است متوجه شوید که برنامه زمان بندی نرخ یادگیری، بسته به دوره، مقادیر گسسته ای را برمی گرداند، اما نمودار نرخ یادگیری ممکن است صاف به نظر برسد. TensorBoard دارای یک پارامتر هموارسازی است که ممکن است لازم باشد آن را به صفر برسانید تا مقادیر هموار نشده را ببینید.

این مدل چگونه عمل می کند؟

print(model.predict([60, 25, 2]))
# True values to compare predictions against: 
# [[32.0]
#  [14.5]
#  [ 3.0]]
[[32.234013 ]
 [14.5973015]
 [ 3.0074618]]