این صفحه به‌وسیله ‏Cloud Translation API‏ ترجمه شده است.
Switch to English

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

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

بررسی اجمالی

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

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

برپایی

# 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 برای محاسبه رگرسیون استفاده کنید ، یعنی بهترین خط مناسب را برای یک مجموعه داده جفت شده پیدا کنید. (در حالی که استفاده از شبکه های عصبی و نزولی شیب دار برای این نوع مشکلات بیش از حد است ، اما درک یک مثال بسیار آسان است).

شما می خواهید از 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 را به Model.fit Keras () منتقل کنید .

TensorBoard داده های گزارش مربوط به سلسله مراتب فهرست پوشه را می خواند. در این نوت بوک ، فهرست ریشه ورود به سیستم 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(lr=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 را شروع کنید ، فهرست ریشه ای که در بالا استفاده کردید را مشخص کنید.

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

%tensorboard --logdir logs/scalars

ممکن است مشاهده کنید TensorBoard پیام "هیچ داشبوردی برای مجموعه داده فعلی فعال نیست" را نشان می دهد. دلیل این امر این است که داده های ورود به سیستم اولیه هنوز ذخیره نشده است. با پیشرفت آموزش ، مدل Keras شروع به ثبت اطلاعات می کند. TensorBoard به صورت دوره ای معیارهای اسکالر شما را تازه می کند و به شما نشان می دهد. اگر بی تاب نیستید ، می توانید روی پیکان Refresh در بالا سمت راست ضربه بزنید.

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

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

به انتخابگر "Runs" در سمت چپ توجه کنید. "اجرا" مجموعه ای از سیاهههای مربوط به دور آموزش را نشان می دهد ، در این حالت نتیجه 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]]

بد نیست!

ورود به سیستم مقیاس های سفارشی

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

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

  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 اجرا را دارید. با انتخاب این اجرا یک نمودار "میزان یادگیری" نمایش داده می شود که به شما امکان می دهد پیشرفت میزان یادگیری را در طول این اجرا تأیید کنید.

همچنین می توانید منحنی های از دست دادن اعتبار و آموزش این اجرا را با دواهای قبلی خود مقایسه کنید.

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

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