L'ajust de hiperparàmetres és un pas crucial en el procés de desenvolupament de models de machine learning. Els hiperparàmetres són paràmetres que no s'aprenen durant l'entrenament del model, sinó que es defineixen abans de començar l'entrenament. Aquests poden incloure la taxa d'aprenentatge, el nombre d'epochs, la mida del batch, entre d'altres. L'objectiu de l'ajust de hiperparàmetres és trobar la combinació òptima que maximitzi el rendiment del model.

Conceptes Clau

  1. Hiperparàmetres comuns:

    • Taxa d'aprenentatge (learning rate): Controla la velocitat amb la qual el model s'actualitza durant l'entrenament.
    • Nombre d'epochs: El nombre de vegades que el model passa per tot el conjunt de dades d'entrenament.
    • Mida del batch: El nombre de mostres que el model processa abans d'actualitzar els pesos.
    • Arquitectura del model: Inclou el nombre de capes, el nombre de neurones per capa, etc.
  2. Mètodes d'ajust de hiperparàmetres:

    • Cerca manual: Provar diferents combinacions de hiperparàmetres manualment.
    • Cerca en graella (Grid Search): Provar totes les combinacions possibles d'un conjunt predefinit de hiperparàmetres.
    • Cerca aleatòria (Random Search): Seleccionar combinacions de hiperparàmetres de manera aleatòria.
    • Optimització bayesiana: Utilitzar tècniques probabilístiques per seleccionar els hiperparàmetres de manera més eficient.

Exemple Pràctic: Ajust de Hiperparàmetres amb Keras Tuner

Keras Tuner és una biblioteca que facilita l'ajust de hiperparàmetres per a models de TensorFlow. A continuació, es mostra un exemple pràctic d'ús de Keras Tuner per ajustar els hiperparàmetres d'un model de xarxa neuronal.

Instal·lació de Keras Tuner

pip install keras-tuner

Definició del Model

Primer, definim una funció que crea el model. Aquesta funció inclou els hiperparàmetres que volem ajustar.

import tensorflow as tf
from tensorflow import keras
from keras_tuner import HyperModel

class MyHyperModel(HyperModel):
    def build(self, hp):
        model = keras.Sequential()
        model.add(keras.layers.Flatten(input_shape=(28, 28)))
        
        # Ajustar el nombre de capes ocultes
        for i in range(hp.Int('num_layers', 1, 3)):
            model.add(keras.layers.Dense(units=hp.Int('units_' + str(i),
                                                      min_value=32,
                                                      max_value=512,
                                                      step=32),
                                         activation='relu'))
        
        model.add(keras.layers.Dense(10, activation='softmax'))
        
        # Ajustar la taxa d'aprenentatge
        model.compile(optimizer=keras.optimizers.Adam(
                        hp.Choice('learning_rate', values=[1e-2, 1e-3, 1e-4])),
                      loss='sparse_categorical_crossentropy',
                      metrics=['accuracy'])
        return model

Configuració del Tuner

Després, configurem el tuner per utilitzar la cerca en graella o la cerca aleatòria.

from keras_tuner import RandomSearch

tuner = RandomSearch(
    MyHyperModel(),
    objective='val_accuracy',
    max_trials=5,
    executions_per_trial=3,
    directory='my_dir',
    project_name='intro_to_kt')

Entrenament del Model

Finalment, entrenem el model utilitzant el tuner.

tuner.search(x_train, y_train,
             epochs=10,
             validation_data=(x_val, y_val))

# Obtenir els millors hiperparàmetres
best_hps = tuner.get_best_hyperparameters(num_trials=1)[0]

print(f"Millor nombre de capes: {best_hps.get('num_layers')}")
print(f"Millor nombre de neurones per capa: {best_hps.get('units_0')}")
print(f"Millor taxa d'aprenentatge: {best_hps.get('learning_rate')}")

Exercici Pràctic

Exercici 1: Ajust de Hiperparàmetres per a un Model de Classificació

  1. Descripció: Utilitza Keras Tuner per ajustar els hiperparàmetres d'un model de classificació d'imatges utilitzant el dataset MNIST.
  2. Objectiu: Trobar la millor combinació de nombre de capes, nombre de neurones per capa i taxa d'aprenentatge per maximitzar l'exactitud del model.

Solució

import tensorflow as tf
from tensorflow import keras
from keras_tuner import RandomSearch

# Carregar el dataset MNIST
(x_train, y_train), (x_val, y_val) = keras.datasets.mnist.load_data()
x_train, x_val = x_train / 255.0, x_val / 255.0

class MyHyperModel(HyperModel):
    def build(self, hp):
        model = keras.Sequential()
        model.add(keras.layers.Flatten(input_shape=(28, 28)))
        
        for i in range(hp.Int('num_layers', 1, 3)):
            model.add(keras.layers.Dense(units=hp.Int('units_' + str(i),
                                                      min_value=32,
                                                      max_value=512,
                                                      step=32),
                                         activation='relu'))
        
        model.add(keras.layers.Dense(10, activation='softmax'))
        
        model.compile(optimizer=keras.optimizers.Adam(
                        hp.Choice('learning_rate', values=[1e-2, 1e-3, 1e-4])),
                      loss='sparse_categorical_crossentropy',
                      metrics=['accuracy'])
        return model

tuner = RandomSearch(
    MyHyperModel(),
    objective='val_accuracy',
    max_trials=5,
    executions_per_trial=3,
    directory='my_dir',
    project_name='intro_to_kt')

tuner.search(x_train, y_train,
             epochs=10,
             validation_data=(x_val, y_val))

best_hps = tuner.get_best_hyperparameters(num_trials=1)[0]

print(f"Millor nombre de capes: {best_hps.get('num_layers')}")
print(f"Millor nombre de neurones per capa: {best_hps.get('units_0')}")
print(f"Millor taxa d'aprenentatge: {best_hps.get('learning_rate')}")

Resum

En aquesta secció, hem après sobre la importància de l'ajust de hiperparàmetres i hem explorat diferents mètodes per fer-ho. Hem vist un exemple pràctic utilitzant Keras Tuner per ajustar els hiperparàmetres d'un model de xarxa neuronal. L'ajust de hiperparàmetres és una tècnica poderosa que pot millorar significativament el rendiment dels models de machine learning.

© Copyright 2024. Tots els drets reservats