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

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

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

بررسی اجمالی

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

داشبورد Scalars TensorBoard به شما امکان می دهد با استفاده از یک API ساده و با تلاش بسیار کمی ، این معیارها را تجسم کنید. این آموزش نمونه های بسیار اساسی را ارائه می دهد تا به شما در یادگیری نحوه استفاده از این API ها با TensorBoard هنگام تهیه مدل Keras کمک کند. شما یاد می گیرید که چگونه از برنامه برگشتی تماس تلفنی Keras TensorBoard و 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

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

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

شما می خواهید از 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 logs/scalars ، که توسط یک زیر شاخه به موقع تنظیم شده است. subdirectory timestamped شما را قادر می سازد تا با استفاده از 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 را شروع کنید ، و فهرست شناسه root که در بالا استفاده کردید را مشخص کنید.

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

 %tensorboard --logdir logs/scalars
 

ممکن است TensorBoard پیام "هیچ داشبورد برای مجموعه داده فعلی فعال نیست" را نشان دهد. دلیل این است که داده های اولیه ورود هنوز ذخیره نشده اند. با پیشرفت آموزش ، مدل کراس شروع به ورود به سیستم می کند. 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 Summary استفاده کنید.

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

  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
 

با استفاده از انتخاب "Runs" در سمت چپ ، متوجه شوید که <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]]