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
-
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.
-
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
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ó
- Descripció: Utilitza Keras Tuner per ajustar els hiperparàmetres d'un model de classificació d'imatges utilitzant el dataset MNIST.
- 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.
Curs de TensorFlow
Mòdul 1: Introducció a TensorFlow
- Què és TensorFlow?
- Configuració de TensorFlow
- Conceptes bàsics de TensorFlow
- Hola món amb TensorFlow
Mòdul 2: Conceptes bàsics de TensorFlow
Mòdul 3: Gestió de dades a TensorFlow
Mòdul 4: Construcció de xarxes neuronals
- Introducció a les xarxes neuronals
- Creació d'una xarxa neuronal simple
- Funcions d'activació
- Funcions de pèrdua i optimitzadors
Mòdul 5: Xarxes neuronals convolucionals (CNNs)
Mòdul 6: Xarxes neuronals recurrents (RNNs)
- Introducció a les RNNs
- Construcció d'una RNN
- Memòria a llarg termini (LSTM)
- Unitats recurrents amb porta (GRUs)
Mòdul 7: Tècniques avançades de TensorFlow
- Capes i models personalitzats
- TensorFlow Hub
- Aprenentatge per transferència
- Ajust de hiperparàmetres