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

Keras Tuner'a Giriş

TensorFlow.org'da görüntüleyin Google Colab'de çalıştırın Kaynağı GitHub'da görüntüleyin Defteri indirin

Genel Bakış

Keras Tuner, TensorFlow programınız için en uygun hiperparametre setini seçmenize yardımcı olan bir kitaplıktır. Makine öğrenimi (ML) uygulamanız için doğru hiperparametre setini seçme işlemine hiperparametre ayarı veya hipertunasyon denir.

Hiperparametreler, bir ML modelinin eğitim sürecini ve topolojisini yöneten değişkenlerdir. Bu değişkenler eğitim süreci boyunca sabit kalır ve makine öğrenimi programınızın performansını doğrudan etkiler. Hiperparametreler iki türdendir:

  1. Gizli katmanların sayısı ve genişliği gibi model seçimini etkileyen model hiperparametreleri
  2. Stokastik Gradyan İniş (SGD) için öğrenme hızı ve ak En Yakın Komşular (KNN) sınıflandırıcısı için en yakın komşu sayısı gibi öğrenme algoritmasının hızını ve kalitesini etkileyen algoritma hiperparametreleri

Bu eğitimde, bir görüntü sınıflandırma uygulaması için hipert ayarını gerçekleştirmek için Keras Ayarlayıcı'yı kullanacaksınız.

Kurmak

import tensorflow as tf
from tensorflow import keras

import IPython

Keras Tuner'ı kurun ve alın.

!pip install -q -U keras-tuner
import kerastuner as kt

Veri setini indirin ve hazırlayın

Bu öğreticide, Fashion MNIST veri kümesindeki giyim görüntülerini sınıflandıran bir makine öğrenimi modeli için en iyi hiper parametreleri bulmak üzere Keras Ayarlayıcı'yı kullanacaksınız .

Verileri yükleyin.

(img_train, label_train), (img_test, label_test) = keras.datasets.fashion_mnist.load_data()
# Normalize pixel values between 0 and 1
img_train = img_train.astype('float32') / 255.0
img_test = img_test.astype('float32') / 255.0

Modeli tanımlayın

Yüksek ayarlama için bir model oluşturduğunuzda, model mimarisine ek olarak hiperparametre arama alanını da tanımlarsınız. Eğer hypertuning için ayarlanmış model hypermodel denir.

Bir hipermodeli iki yaklaşımla tanımlayabilirsiniz:

  • Bir model oluşturucu işlevi kullanarak
  • HyperModel Tuner API'sinin HyperModel sınıfını alt sınıflara HyperModel

Önceden tanımlanmış iki HyperModel sınıfını da kullanabilirsiniz - bilgisayarla görme uygulamaları için HyperXception ve HyperResNet .

Bu eğitimde, görüntü sınıflandırma modelini tanımlamak için bir model oluşturucu işlevi kullanacaksınız. Model oluşturucu işlevi, derlenmiş bir model döndürür ve modeli hipertleştirmek için satır içi olarak tanımladığınız hiperparametreleri kullanır.

def model_builder(hp):
  model = keras.Sequential()
  model.add(keras.layers.Flatten(input_shape=(28, 28)))

  # Tune the number of units in the first Dense layer
  # Choose an optimal value between 32-512
  hp_units = hp.Int('units', min_value = 32, max_value = 512, step = 32)
  model.add(keras.layers.Dense(units = hp_units, activation = 'relu'))
  model.add(keras.layers.Dense(10))

  # Tune the learning rate for the optimizer 
  # Choose an optimal value from 0.01, 0.001, or 0.0001
  hp_learning_rate = hp.Choice('learning_rate', values = [1e-2, 1e-3, 1e-4]) 

  model.compile(optimizer = keras.optimizers.Adam(learning_rate = hp_learning_rate),
                loss = keras.losses.SparseCategoricalCrossentropy(from_logits = True), 
                metrics = ['accuracy'])

  return model

Ayarlayıcıyı örnekleyin ve hipert ayar yapın

Yüksek ayarlamayı gerçekleştirmek için tuneri örnekleyin. RandomSearch dört tuner bulunur - RandomSearch , Hyperband , BayesianOptimization ve Sklearn . Bu eğitimde, Hyperband tuner kullanacaksınız.

Hiper Bant ayarlayıcısını somutlaştırmak için, max_epochs , optimize etme objective ve eğitilecek maksimum dönem sayısını ( max_epochs ) max_epochs .

tuner = kt.Hyperband(model_builder,
                     objective = 'val_accuracy', 
                     max_epochs = 10,
                     factor = 3,
                     directory = 'my_dir',
                     project_name = 'intro_to_kt')

Hyperband ayarlama algoritması, yüksek performanslı bir modelde hızla yakınsamak için uyarlanabilir kaynak tahsisi ve erken durdurmayı kullanır. Bu, bir spor şampiyonası tarzı braket kullanılarak yapılır. Algoritma, birkaç dönem için çok sayıda modeli eğitir ve modellerin yalnızca en iyi performans gösteren yarısını bir sonraki tura taşır. Hiper bant, 1 + günlük factor ( max_epochs ) max_epochs ve bunu en yakın tam sayıya yuvarlayarak bir parantez içinde eğitilecek modellerin sayısını belirler.

Hiperparametre aramasını çalıştırmadan önce, her eğitim adımının sonunda eğitim çıktılarını temizlemek için bir geri arama tanımlayın.

class ClearTrainingOutput(tf.keras.callbacks.Callback):
  def on_train_end(*args, **kwargs):
    IPython.display.clear_output(wait = True)

Hiperparametre aramasını çalıştırın. Arama yönteminin bağımsız değişkenleri, yukarıdaki geri tf.keras.model.fit ek olarak tf.keras.model.fit için kullanılanlarla aynıdır.

tuner.search(img_train, label_train, epochs = 10, validation_data = (img_test, label_test), callbacks = [ClearTrainingOutput()])

# Get the optimal hyperparameters
best_hps = tuner.get_best_hyperparameters(num_trials = 1)[0]

print(f"""
The hyperparameter search is complete. The optimal number of units in the first densely-connected
layer is {best_hps.get('units')} and the optimal learning rate for the optimizer
is {best_hps.get('learning_rate')}.
""")
Epoch 3/4
 911/1875 [=============>................] - ETA: 1s - loss: 0.5757 - accuracy: 0.8040

Bu öğreticiyi bitirmek için, modeli aramadan optimum hiperparametreler ile yeniden eğitin.

# Build the model with the optimal hyperparameters and train it on the data
model = tuner.hypermodel.build(best_hps)
model.fit(img_train, label_train, epochs = 10, validation_data = (img_test, label_test))
Epoch 1/10
1875/1875 [==============================] - 3s 2ms/step - loss: 0.4787 - accuracy: 0.8303 - val_loss: 0.4199 - val_accuracy: 0.8509
Epoch 2/10
1875/1875 [==============================] - 3s 2ms/step - loss: 0.3600 - accuracy: 0.8684 - val_loss: 0.3902 - val_accuracy: 0.8570
Epoch 3/10
1875/1875 [==============================] - 3s 2ms/step - loss: 0.3253 - accuracy: 0.8794 - val_loss: 0.3670 - val_accuracy: 0.8689
Epoch 4/10
1875/1875 [==============================] - 3s 2ms/step - loss: 0.3038 - accuracy: 0.8874 - val_loss: 0.3714 - val_accuracy: 0.8684
Epoch 5/10
1875/1875 [==============================] - 3s 2ms/step - loss: 0.2842 - accuracy: 0.8939 - val_loss: 0.3527 - val_accuracy: 0.8758
Epoch 6/10
1875/1875 [==============================] - 3s 2ms/step - loss: 0.2678 - accuracy: 0.9005 - val_loss: 0.3334 - val_accuracy: 0.8785
Epoch 7/10
1875/1875 [==============================] - 3s 2ms/step - loss: 0.2533 - accuracy: 0.9055 - val_loss: 0.3277 - val_accuracy: 0.8834
Epoch 8/10
1875/1875 [==============================] - 3s 2ms/step - loss: 0.2445 - accuracy: 0.9089 - val_loss: 0.3487 - val_accuracy: 0.8768
Epoch 9/10
1875/1875 [==============================] - 3s 2ms/step - loss: 0.2352 - accuracy: 0.9116 - val_loss: 0.3352 - val_accuracy: 0.8843
Epoch 10/10
1875/1875 [==============================] - 3s 2ms/step - loss: 0.2260 - accuracy: 0.9145 - val_loss: 0.3457 - val_accuracy: 0.8814

<tensorflow.python.keras.callbacks.History at 0x7f1f802512b0>

my_dir/intro_to_kt dizini, hiperparametre araması sırasında çalıştırılan her deneme (model yapılandırması) için ayrıntılı günlükler ve kontrol noktaları içerir. Hiperparametre aramasını yeniden çalıştırırsanız, Keras Ayarlayıcısı, aramayı sürdürmek için bu günlüklerdeki mevcut durumu kullanır. Bu davranışı devre dışı bırakmak için, ayarlayıcıyı başlatırken ek bir overwrite = True bağımsız değişkeni iletin.

Özet

Bu eğitimde, bir model için hiperparametreleri ayarlamak için Keras Tuner'ı nasıl kullanacağınızı öğrendiniz. Keras Tuner hakkında daha fazla bilgi edinmek için şu ek kaynaklara göz atın:

Ayrıca, model hiperparametrelerinizi etkileşimli olarak ayarlamak için TensorBoard'daki HParams Dashboard'a bakın.