ترجمت واجهة Cloud Translation API‏ هذه الصفحة.
Switch to English

مقدمة إلى Keras Tuner

عرض على TensorFlow.org تشغيل في Google Colab عرض المصدر على جيثب تحميل دفتر

نظرة عامة

تعد Keras Tuner مكتبة تساعدك على اختيار المجموعة المثلى من المعلمات الفائقة لبرنامج TensorFlow الخاص بك. تسمى عملية اختيار المجموعة الصحيحة من المعلمات الفائقة لتطبيق التعلم الآلي (ML) الخاص بك بضبط المعلمات الفائقة أو التوليف العالي .

Hyperparameters هي المتغيرات التي تحكم عملية التدريب وطوبولوجيا نموذج ML. تظل هذه المتغيرات ثابتة طوال عملية التدريب وتؤثر بشكل مباشر على أداء برنامج ML الخاص بك. المعلمات الفائقة من نوعين:

  1. نموذج المعلمات الفائقة التي تؤثر على اختيار النموذج مثل عدد وعرض الطبقات المخفية
  2. معلمات الخوارزمية الفائقة التي تؤثر على سرعة وجودة خوارزمية التعلم مثل معدل التعلم لـ Stochastic Gradient Descent (SGD) وعدد أقرب الجيران لـ ak Nearest Neighbours (KNN) مصنف

في هذا البرنامج التعليمي ، ستستخدم Keras Tuner لإجراء التوليف العالي لتطبيق تصنيف الصور.

اقامة

import tensorflow as tf
from tensorflow import keras

import IPython

قم بتثبيت واستيراد Keras Tuner.

!pip install -q -U keras-tuner
import kerastuner as kt
WARNING: You are using pip version 20.2.2; however, version 20.2.3 is available.
You should consider upgrading via the '/tmpfs/src/tf_docs_env/bin/python -m pip install --upgrade pip' command.

قم بتنزيل وإعداد مجموعة البيانات

في هذا البرنامج التعليمي ، ستستخدم Keras Tuner للعثور على أفضل المعلمات الفائقة لنموذج التعلم الآلي الذي يصنف صور الملابس من مجموعة بيانات Fashion MNIST .

قم بتحميل البيانات.

(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

حدد النموذج

عندما تقوم ببناء نموذج للضبط الفائق ، فإنك تحدد أيضًا مساحة بحث المعامل التشعبي بالإضافة إلى بنية النموذج. ويطلق على النموذج الذي أنشئت من أجل hypertuning على hypermodel.

يمكنك تحديد نموذج تشعبي من خلال طريقتين:

  • باستخدام وظيفة بناء النموذج
  • عن طريق HyperModel فئة HyperModel لواجهة برمجة تطبيقات Keras Tuner

يمكنك أيضًا استخدام HyperModel - HyperXception و HyperResNet لتطبيقات رؤية الكمبيوتر.

في هذا البرنامج التعليمي ، يمكنك استخدام وظيفة منشئ النماذج لتحديد نموذج تصنيف الصور. ترجع وظيفة منشئ النموذج نموذجًا مترجمًا وتستخدم المعلمات التشعبية التي تحددها بشكل مضمن لضبط النموذج.

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

إنشاء الموالف وإجراء التوليف العالي

قم بإنشاء الموالف لإجراء التوليف العالي. يحتوي Keras Tuner على أربعة موالفات متوفرة - RandomSearch و Hyperband و BayesianOptimization و Sklearn . في هذا البرنامج التعليمي ، يمكنك استخدام موالف Hyperband .

لإنشاء مثيل لموالف Hyperband ، يجب عليك تحديد النموذج التشعبي ، objective من التحسين والحد الأقصى لعدد 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 tuning تخصيص الموارد التكيفي والتوقف المبكر للتلاقي بسرعة مع نموذج عالي الأداء. يتم ذلك باستخدام شريحة نمط البطولة الرياضية. تقوم الخوارزمية بتدريب عدد كبير من النماذج لبضع حقب وتنقل فقط نصف النماذج عالية الأداء إلى الجولة التالية. يحدد Hyperband عدد النماذج التي سيتم تدريبها في قوس عن طريق حساب factor السجل 1 + ( max_epochs ) max_epochs إلى أقرب عدد صحيح.

قبل تشغيل البحث عن المعلمات الفائقة ، حدد رد اتصال لمسح مخرجات التدريب في نهاية كل خطوة تدريب.

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

قم بتشغيل البحث عن المعامل التشعبي. وسيطات طريقة البحث هي نفسها المستخدمة في tf.keras.model.fit بالإضافة إلى رد tf.keras.model.fit أعلاه.

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

لإنهاء هذا البرنامج التعليمي ، أعد تدريب النموذج باستخدام المعلمات التشعبية المثلى من البحث.

# 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 على سجلات ونقاط my_dir/intro_to_kt مفصلة لكل تجربة (تكوين نموذج) يتم تشغيلها أثناء البحث عن my_dir/intro_to_kt . إذا قمت بإعادة تشغيل البحث عن المعلمات الفائقة ، فإن Keras Tuner يستخدم الحالة الحالية من هذه السجلات لاستئناف البحث. لتعطيل هذا السلوك ، قم بتمرير overwrite = True الإضافية overwrite = True وسيطة overwrite = True أثناء إنشاء مثيل للموالف.

ملخص

في هذا البرنامج التعليمي ، تعلمت كيفية استخدام Keras Tuner لضبط المعلمات التشعبية لنموذج. لمعرفة المزيد حول Keras Tuner ، تحقق من هذه الموارد الإضافية:

تحقق أيضًا من HParams Dashboard في TensorBoard لضبط المعلمات التشعبية للنموذج بشكل تفاعلي.