Bu sayfa, Cloud Translation API ile çevrilmiştir.
Switch to English

HParams Dashboard ile Hiperparametre Ayarı

TensorFlow.org üzerinde görüntüle Google Colab'da yayınla Kaynağı GitHub'da görüntüle

Makine öğrenimi modelleri oluştururken, bir katmandaki bırakma oranı veya öğrenme oranı gibi çeşitli hiperparametreler seçmeniz gerekir. Bu kararlar doğruluk gibi model metriklerini etkiler. Bu nedenle, makine öğrenimi iş akışında önemli bir adım, genellikle denemeyi içeren, sorununuz için en iyi hiperparametreleri tanımlamaktır. Bu işlem "Hiperparametre Optimizasyonu" veya "Hiperparametre Ayarı" olarak bilinir.

TensorBoard'daki HParams panosu, en iyi deneyi veya en umut verici hiperparametreler setini belirleme sürecine yardımcı olmak için çeşitli araçlar sunar.

Bu öğretici aşağıdaki adımlara odaklanacaktır:

  1. Deneme kurulumu ve HParams özeti
  2. Hiperparametreleri ve metrikleri günlüğe kaydetmek için TensorFlow çalışmalarını uyarlayın
  3. Start çalıştırır ve hepsini tek bir üst dizine kaydeder
  4. Sonuçları TensorBoard'un HParams kontrol panelinde görselleştirin

TF 2.0'ı yükleyip TensorBoard dizüstü bilgisayar uzantısını yükleyerek başlayın:

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

TensorFlow ve TensorBoard HParams eklentisini içe aktarın:

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

FashionMNIST veri kümesini indirin ve ölçeklendirin:

 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. Deneme kurulumu ve HParams deneme özeti

Modeldeki üç hiperparametre ile deneme:

  1. İlk yoğun katmandaki birim sayısı
  2. Bırakma katmanındaki bırakma oranı
  3. Doktoru

Denenecek değerleri listeleyin ve bir deneme yapılandırmasını TensorBoard'a kaydedin. Bu adım isteğe bağlıdır: Kullanıcı arayüzünde hiperparametrelerin daha hassas bir şekilde filtrelenmesini sağlamak için alan adı bilgileri sağlayabilir ve hangi metriklerin görüntüleneceğini belirleyebilirsiniz.

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

Bu adımı atlamayı seçerseniz, aksi takdirde bir HParam değeri kullanmak istediğiniz yerde bir dize değişmez değeri kullanabilirsiniz: hparams[HP_DROPOUT] yerine hparams['dropout'] hparams[HP_DROPOUT] .

2. Hiperparametreleri ve metrikleri günlüğe kaydetmek için TensorFlow çalışmalarını uyarlayın

Model oldukça basit olacak: aralarında bir bırakma katmanı olan iki yoğun katman. Hiperparametreler artık kodlanmış olmasa da, eğitim kodu tanıdık görünecektir. Bunun yerine, hiperparametreler bir hparams sözlüğünde sağlanır ve eğitim fonksiyonu boyunca kullanılır:

 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
 

Her çalışma için hiperparametreler ve son doğrulukla bir hparam özeti kaydedin:

 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 modellerini eğitirken, bunları doğrudan yazmak yerine geri çağrıları kullanabilirsiniz:

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

3. Start çalıştırır ve hepsini tek bir üst dizine kaydeder

Şimdi her birini farklı bir hiperparametreler seti ile eğiterek birden fazla deney deneyebilirsiniz.

Basitlik için bir ızgara araması kullanın: ayrık parametrelerin tüm kombinasyonlarını ve gerçek değerli parametrenin sadece alt ve üst sınırlarını deneyin. Daha karmaşık senaryolar için, her bir hiperparametre değerini rastgele seçmek daha etkili olabilir (buna rastgele arama denir). Kullanılabilecek daha gelişmiş yöntemler vardır.

Birkaç dakika sürecek birkaç deneme yapın:

 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. Sonuçları TensorBoard'un HParams eklentisinde görselleştirin

HParams kontrol paneli şimdi açılabilir. TensorBoard'u başlatın ve üstteki "HParams" ı tıklayın.

 %tensorboard --logdir logs/hparam_tuning
 

Gösterge tablosunun sol bölmesi, HParams gösterge tablosundaki tüm görünümlerde etkin olan filtreleme özellikleri sağlar:

  • Gösterge tablosunda gösterilen hiperparametrelerin / metriklerin filtrelenmesi
  • Gösterge tablosunda gösterilen hiperparametre / metrik değerlerini filtreleme
  • Çalışma durumuna göre filtreleme (çalışma, başarı, ...)
  • Tablo görünümünde hiperparametre / metriğe göre sırala
  • Gösterilecek oturum grubu sayısı (çok sayıda deneme olduğunda performans için yararlıdır)

HParams kontrol panelinin çeşitli faydalı bilgiler içeren üç farklı görünümü vardır:

  • Tablo Görünümü , koşuları, hiperparametrelerini ve metriklerini listeler.
  • Paralel Koordinatlar Görünümü , her bir çalışmayı her hiperparimetre ve metrik için bir eksenden geçen bir çizgi olarak gösterir. Yalnızca içinden geçen çalışmaları vurgulayacak bir bölgeyi işaretlemek için fareyi herhangi bir eksen üzerinde tıklayın ve sürükleyin. Bu, hangi hiperparametre gruplarının en önemli olduğunu tanımlamak için yararlı olabilir. Eksenlerin kendileri sürüklenerek yeniden sıralanabilir.
  • Dağılım Grafiği Görünümü , her bir hiperparametreyi / metriği her bir metrikle karşılaştıran grafikleri gösterir. Bu korelasyonları tanımlamaya yardımcı olabilir. Belirli bir grafikteki bir bölgeyi seçmek için tıklayın ve sürükleyin ve bu oturumları diğer grafiklerde vurgulayın.

Bu oturum için eğitim adımlarının bir işlevi olarak metriklerin bir grafiğini görmek için bir tablo satırı, paralel koordinat satırı ve dağılım grafiği piyasası tıklanabilir (bu öğreticide her çalışma için yalnızca bir adım kullanılır).

HParams kontrol panelinin özelliklerini daha ayrıntılı keşfetmek için daha fazla denemeyle bir dizi önceden oluşturulmuş günlük indirin:

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

Bu günlükleri TensorBoard'da görüntüleyin:

 %tensorboard --logdir logs/hparam_demo
 

HParams kontrol panelinde farklı görünümleri deneyebilirsiniz.

Örneğin, paralel koordinat görünümüne gidip doğruluk eksenini tıklayıp sürükleyerek, en yüksek doğruluktaki çalışmaları seçebilirsiniz. Bu çalışmalar optimize edici ekseninde 'adam' içinden geçtiğinden, 'adam' ın bu deneylerde 'sgd' den daha iyi performans verdiği sonucuna varabilirsiniz.