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

تنظیم Hyperparameter با داشبورد HParams

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

هنگام ساختن مدل های یادگیری ماشین ، شما باید پارامترهای مختلفی مانند نرخ ترک تحصیل در یک لایه یا میزان یادگیری را انتخاب کنید. این تصمیمات بر معیارهای مدل تأثیر می گذارد ، مانند دقت. بنابراین ، یک قدم مهم در گردش کار یادگیری ماشین ، شناسایی بهترین هایپرپارامترها برای مشکل شماست که اغلب شامل آزمایش است. این فرایند به "بهینه سازی Hyperparameter" یا "تنظیم Hyperparameter" معروف است.

داشبورد HParams در TensorBoard ابزارهای مختلفی را برای کمک به این فرایند در شناسایی بهترین آزمایش یا امیدوارکننده ترین مجموعه هایپرپارامتر ارائه می دهد.

این آموزش به مراحل زیر می پردازد:

  1. خلاصه نصب و آزمایش HParams
  2. Adapt TensorFlow برای ورود به ابر پارامترها و معیارها اجرا می شود
  3. اجرای را شروع کنید و همه آنها را تحت یک فهرست راهنما وارد کنید
  4. نتایج را در داشبورد HParams TensorBoard تجسم کنید

با نصب TF 2.0 و بارگیری افزونه نوت بوک TensorBoard شروع کنید:

 # Load the TensorBoard notebook extension
%load_ext tensorboard
 
 # Clear any logs from previous runs
!rm -rf ./logs/ 
 

وارد کردن افزونه TensorFlow و TensorBoard HParams:

 import tensorflow as tf
from tensorboard.plugins.hparams import api as hp
 

مجموعه داده های FashionMNIST را بارگیری و مقیاس بندی کنید:

 fashion_mnist = tf.keras.datasets.fashion_mnist

(x_train, y_train),(x_test, y_test) = fashion_mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0
 
Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/train-labels-idx1-ubyte.gz
32768/29515 [=================================] - 0s 0us/step
Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/train-images-idx3-ubyte.gz
26427392/26421880 [==============================] - 0s 0us/step
Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/t10k-labels-idx1-ubyte.gz
8192/5148 [===============================================] - 0s 0us/step
Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/t10k-images-idx3-ubyte.gz
4423680/4422102 [==============================] - 0s 0us/step

1. تنظیم آزمایش و خلاصه آزمایش HParams

در سه مدل با سه ابرپارامتر آزمایش کنید:

  1. تعداد واحد در لایه متراکم اول
  2. میزان افت در لایه ترک تحصیل
  3. بهینه ساز

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

 HP_NUM_UNITS = hp.HParam('num_units', hp.Discrete([16, 32]))
HP_DROPOUT = hp.HParam('dropout', hp.RealInterval(0.1, 0.2))
HP_OPTIMIZER = hp.HParam('optimizer', hp.Discrete(['adam', 'sgd']))

METRIC_ACCURACY = 'accuracy'

with tf.summary.create_file_writer('logs/hparam_tuning').as_default():
  hp.hparams_config(
    hparams=[HP_NUM_UNITS, HP_DROPOUT, HP_OPTIMIZER],
    metrics=[hp.Metric(METRIC_ACCURACY, display_name='Accuracy')],
  )
 

اگر می خواهید از این مرحله بگذرید ، می توانید از هر کجا که در غیر اینصورت از یک ارزش HParam استفاده می کنید استفاده کنید: به عنوان مثال ، hparams['dropout'] به جای hparams[HP_DROPOUT] .

2. Adapt TensorFlow برای ورود به ابر پارامترها و معیارها اجرا می شود

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

 def train_test_model(hparams):
  model = tf.keras.models.Sequential([
    tf.keras.layers.Flatten(),
    tf.keras.layers.Dense(hparams[HP_NUM_UNITS], activation=tf.nn.relu),
    tf.keras.layers.Dropout(hparams[HP_DROPOUT]),
    tf.keras.layers.Dense(10, activation=tf.nn.softmax),
  ])
  model.compile(
      optimizer=hparams[HP_OPTIMIZER],
      loss='sparse_categorical_crossentropy',
      metrics=['accuracy'],
  )

  model.fit(x_train, y_train, epochs=1) # Run with 1 epoch to speed things up for demo purposes
  _, accuracy = model.evaluate(x_test, y_test)
  return accuracy
 

برای هر بار ، یک خلاصه hparams را با هایپرپارامترها و دقت نهایی وارد کنید:

 def run(run_dir, hparams):
  with tf.summary.create_file_writer(run_dir).as_default():
    hp.hparams(hparams)  # record the values used in this trial
    accuracy = train_test_model(hparams)
    tf.summary.scalar(METRIC_ACCURACY, accuracy, step=1)
 

هنگام آموزش مدل های Keras ، می توانید به جای نوشتن مستقیم این موارد ، از لینک های برگشتی استفاده کنید:

 model.fit(
    ...,
    callbacks=[
        tf.keras.callbacks.TensorBoard(logdir),  # log metrics
        hp.KerasCallback(logdir, hparams),  # log hparams
    ],
)
 

3. شروع به اجرا کنید و همه آنها را تحت یک فهرست راهنما وارد کنید

اکنون می توانید چندین آزمایش را امتحان کنید ، هر یک را با مجموعه ای متفاوت از ابرپارامترها آموزش دهید.

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

چند آزمایش را اجرا کنید ، که چند دقیقه طول خواهد کشید:

 session_num = 0

for num_units in HP_NUM_UNITS.domain.values:
  for dropout_rate in (HP_DROPOUT.domain.min_value, HP_DROPOUT.domain.max_value):
    for optimizer in HP_OPTIMIZER.domain.values:
      hparams = {
          HP_NUM_UNITS: num_units,
          HP_DROPOUT: dropout_rate,
          HP_OPTIMIZER: optimizer,
      }
      run_name = "run-%d" % session_num
      print('--- Starting trial: %s' % run_name)
      print({h.name: hparams[h] for h in hparams})
      run('logs/hparam_tuning/' + run_name, hparams)
      session_num += 1

 
--- Starting trial: run-0
{'num_units': 16, 'dropout': 0.1, 'optimizer': 'adam'}
60000/60000 [==============================] - 4s 62us/sample - loss: 0.6872 - accuracy: 0.7564
10000/10000 [==============================] - 0s 35us/sample - loss: 0.4806 - accuracy: 0.8321
--- Starting trial: run-1
{'num_units': 16, 'dropout': 0.1, 'optimizer': 'sgd'}
60000/60000 [==============================] - 3s 54us/sample - loss: 0.9428 - accuracy: 0.6769
10000/10000 [==============================] - 0s 36us/sample - loss: 0.6519 - accuracy: 0.7770
--- Starting trial: run-2
{'num_units': 16, 'dropout': 0.2, 'optimizer': 'adam'}
60000/60000 [==============================] - 4s 60us/sample - loss: 0.8158 - accuracy: 0.7078
10000/10000 [==============================] - 0s 36us/sample - loss: 0.5309 - accuracy: 0.8154
--- Starting trial: run-3
{'num_units': 16, 'dropout': 0.2, 'optimizer': 'sgd'}
60000/60000 [==============================] - 3s 50us/sample - loss: 1.1465 - accuracy: 0.6019
10000/10000 [==============================] - 0s 36us/sample - loss: 0.7007 - accuracy: 0.7683
--- Starting trial: run-4
{'num_units': 32, 'dropout': 0.1, 'optimizer': 'adam'}
60000/60000 [==============================] - 4s 65us/sample - loss: 0.6178 - accuracy: 0.7849
10000/10000 [==============================] - 0s 38us/sample - loss: 0.4645 - accuracy: 0.8395
--- Starting trial: run-5
{'num_units': 32, 'dropout': 0.1, 'optimizer': 'sgd'}
60000/60000 [==============================] - 3s 55us/sample - loss: 0.8989 - accuracy: 0.6896
10000/10000 [==============================] - 0s 37us/sample - loss: 0.6335 - accuracy: 0.7853
--- Starting trial: run-6
{'num_units': 32, 'dropout': 0.2, 'optimizer': 'adam'}
60000/60000 [==============================] - 4s 64us/sample - loss: 0.6404 - accuracy: 0.7782
10000/10000 [==============================] - 0s 37us/sample - loss: 0.4802 - accuracy: 0.8265
--- Starting trial: run-7
{'num_units': 32, 'dropout': 0.2, 'optimizer': 'sgd'}
60000/60000 [==============================] - 3s 54us/sample - loss: 0.9633 - accuracy: 0.6703
10000/10000 [==============================] - 0s 36us/sample - loss: 0.6516 - accuracy: 0.7755

4- نتایج را از افزونه HParams TensorBoard تجسم کنید

داشبورد HParams اکنون قابل باز شدن است. TensorBoard را شروع کنید و در قسمت بالای "HParams" کلیک کنید.

 %tensorboard --logdir logs/hparam_tuning
 

صفحه سمت چپ داشبورد قابلیت فیلتر را ارائه می دهد که در تمام نماهای موجود در داشبورد HParams فعال است:

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

داشبورد HParams دارای سه نمای مختلف است که دارای اطلاعات مفید مختلفی است:

  • در جدول مشاهده شده ، مسیرها ، ابرپارامترها و معیارهای آنها ذکر شده است.
  • نمای مختصات موازی هر اجرا را به عنوان یک خط که از طریق یک محور برای هر ابررنج و متریک عبور می کند ، نشان می دهد. کلیک کنید و ماوس را بر روی هر محور بکشید تا منطقه ای را علامت بزنید که تنها مسیرهای عبور از آن را برجسته کند. این می تواند برای تشخیص اینکه کدام گروه از هایپرپارامترها مهم هستند مفید باشد. محورها را می توان با کشیدن آنها دوباره مرتب کرد.
  • Scatter Plot View توطئه هایی را نشان می دهد که هر یک از ابرپارامتر / متریک را با هر متریک مقایسه می کند. این می تواند به شناسایی همبستگی کمک کند. برای انتخاب منطقه در یک طرح خاص ، کلیک کنید و بکشید و آن جلسات را در سایر توطئه ها برجسته کنید.

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

برای کشف بیشتر ویژگی های داشبورد HParams ، مجموعه ای از پرونده های پیش تولید شده را با آزمایش های بیشتر بارگیری کنید:

 %%bash
wget -q 'https://storage.googleapis.com/download.tensorflow.org/tensorboard/hparams_demo_logs.zip'
unzip -q hparams_demo_logs.zip -d logs/hparam_demo
 

مشاهده این سیاهههای مربوط در TensorBoard:

 %tensorboard --logdir logs/hparam_demo
 

در داشبورد HParams می توانید نظرات مختلفی را امتحان کنید.

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