Halaman ini diterjemahkan oleh Cloud Translation API.
Switch to English

Tuning Hyperparameter dengan Dashboard HParams

Lihat di TensorFlow.org Jalankan di Google Colab Lihat sumber di GitHub

Saat membuat model pembelajaran mesin, Anda perlu memilih berbagai hiperparameter , seperti tingkat putus sekolah dalam sebuah lapisan atau tingkat pembelajaran. Keputusan ini memengaruhi metrik model, seperti akurasi. Oleh karena itu, langkah penting dalam alur kerja pembelajaran mesin adalah mengidentifikasi hyperparameter terbaik untuk masalah Anda, yang seringkali melibatkan eksperimen. Proses ini dikenal sebagai "Optimalisasi Hyperparameter" atau "Tuning Hyperparameter".

Dasbor HParams di TensorBoard menyediakan beberapa alat untuk membantu proses mengidentifikasi percobaan terbaik atau kumpulan hiperparameter yang paling menjanjikan.

Tutorial ini akan fokus pada langkah-langkah berikut:

  1. Pengaturan percobaan dan ringkasan HParams
  2. Adaptasi TensorFlow dijalankan untuk mencatat hyperparameter dan metrik
  3. Mulai jalankan dan catat semuanya di bawah satu direktori induk
  4. Visualisasikan hasilnya di dashboard HParams TensorBoard

Mulailah dengan menginstal TF 2.0 dan memuat ekstensi notebook TensorBoard:

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

Impor TensorFlow dan plugin TensorBoard HParams:

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

Unduh dataset FashionMNIST dan diskalakan :

 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. Pengaturan percobaan dan ringkasan percobaan HParams

Percobaan dengan tiga hiperparameter dalam model:

  1. Jumlah unit di lapisan padat pertama
  2. Tingkat putus sekolah di lapisan putus sekolah
  3. Pengoptimal

Buat daftar nilai untuk dicoba, dan catat konfigurasi percobaan ke TensorBoard. Langkah ini opsional: Anda dapat memberikan informasi domain untuk mengaktifkan pemfilteran hyperparameter yang lebih tepat di UI, dan Anda dapat menentukan metrik mana yang harus ditampilkan.

 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')],
  )
 

Jika Anda memilih untuk melewati langkah ini, Anda dapat menggunakan string literal di mana pun Anda akan menggunakan nilai HParam : misalnya, hparams['dropout'] alih-alih hparams[HP_DROPOUT] .

2. Adaptasi TensorFlow dijalankan untuk mencatat hyperparameter dan metrik

Modelnya akan sangat sederhana: dua lapisan padat dengan lapisan putus di antaranya. Kode pelatihan akan terlihat familier, meskipun parameter hyperparameter tidak lagi dikodekan dengan keras. Sebagai gantinya, hyperparameter disediakan dalam kamus hparams dan digunakan di seluruh fungsi pelatihan:

 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
 

Untuk setiap percobaan, catat ringkasan hparams dengan hyperparameter dan akurasi akhir:

 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)
 

Saat melatih model Keras, Anda dapat menggunakan panggilan balik alih-alih menulisnya secara langsung:

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

3. Mulai jalankan dan catat semuanya di bawah satu direktori induk

Sekarang Anda dapat mencoba beberapa percobaan, latih masing-masing dengan set hiperparameter yang berbeda.

Untuk kesederhanaan, gunakan pencarian kotak: coba semua kombinasi parameter diskrit dan hanya batas bawah dan atas dari parameter bernilai riil. Untuk skenario yang lebih kompleks, mungkin lebih efektif untuk memilih setiap nilai hyperparameter secara acak (ini disebut pencarian acak). Ada metode yang lebih maju yang dapat digunakan.

Jalankan beberapa percobaan, yang akan memakan waktu beberapa menit:

 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. Visualisasikan hasilnya dalam plugin HParams TensorBoard

Dasbor HParams sekarang dapat dibuka. Mulai TensorBoard dan klik "HParams" di bagian atas.

 %tensorboard --logdir logs/hparam_tuning
 

Panel kiri dasbor menyediakan kemampuan pemfilteran yang aktif di semua tampilan di dasbor HParams:

  • Saring yang hyperparameter / metrik ditampilkan di dasbor
  • Memfilter nilai hiperparameter / metrik yang ditampilkan di dasbor
  • Memfilter status run (berjalan, sukses, ...)
  • Urutkan berdasarkan hyperparameter / metrik pada tampilan tabel
  • Jumlah grup sesi untuk ditampilkan (berguna untuk kinerja ketika ada banyak percobaan)

Dasbor HParams memiliki tiga tampilan berbeda, dengan berbagai informasi bermanfaat:

  • Table View mencantumkan run, hiperparameternya, dan metriknya.
  • Tampilan Koordinat Paralel menunjukkan setiap proses sebagai garis yang melalui sumbu untuk masing-masing hyperparemeter dan metrik. Klik dan seret mouse pada sumbu apa pun untuk menandai wilayah yang hanya akan menyorot proses yang melewatinya. Ini berguna untuk mengidentifikasi kelompok-kelompok hyperparameter mana yang paling penting. Kapak itu sendiri dapat dipesan ulang dengan menyeretnya.
  • Tampilan Scatter Plot menunjukkan plot yang membandingkan setiap hiperparameter / metrik dengan masing-masing metrik. Ini dapat membantu mengidentifikasi korelasi. Klik dan seret untuk memilih wilayah dalam plot tertentu dan sorot sesi-sesi tersebut di plot lainnya.

Baris tabel, garis koordinat paralel, dan pasar plot sebar dapat diklik untuk melihat plot metrik sebagai fungsi dari langkah pelatihan untuk sesi itu (meskipun dalam tutorial ini hanya satu langkah digunakan untuk setiap proses).

Untuk lebih mengeksplorasi kemampuan dashar HParams, unduh satu set log pregenerated dengan eksperimen lebih lanjut:

 %%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
 

Lihat log ini di TensorBoard:

 %tensorboard --logdir logs/hparam_demo
 

Anda dapat mencoba berbagai tampilan di dashboard HParams.

Misalnya, dengan masuk ke tampilan koordinat paralel dan mengklik dan menyeret sumbu akurasi, Anda dapat memilih proses dengan akurasi tertinggi. Saat ini berjalan melewati 'adam' di sumbu pengoptimal, Anda dapat menyimpulkan bahwa 'adam' tampil lebih baik daripada 'sgd' pada percobaan ini.