En aquest tema, explorarem les funcions de pèrdua i els optimitzadors, que són components essencials per entrenar xarxes neuronals amb TensorFlow. Les funcions de pèrdua mesuren com de bé el model està fent les seves prediccions, mentre que els optimitzadors ajusten els pesos del model per minimitzar la pèrdua.

  1. Funcions de pèrdua

1.1. Què és una funció de pèrdua?

Una funció de pèrdua, també coneguda com a funció de cost, és una funció que mesura la discrepància entre les prediccions del model i els valors reals. L'objectiu de l'entrenament és minimitzar aquesta pèrdua.

1.2. Tipus de funcions de pèrdua

1.2.1. Pèrdua de MSE (Mean Squared Error)

La pèrdua de l'error quadràtic mitjà és una de les funcions de pèrdua més utilitzades per a problemes de regressió.

import tensorflow as tf

# Exemple de pèrdua de MSE
mse_loss = tf.keras.losses.MeanSquaredError()
y_true = [0.0, 0.0, 1.0, 1.0]
y_pred = [1.0, 0.0, 1.0, 0.0]
loss = mse_loss(y_true, y_pred)
print('Pèrdua de MSE:', loss.numpy())

1.2.2. Pèrdua de entropia creuada (Cross-Entropy Loss)

La pèrdua d'entropia creuada és comunament utilitzada per a problemes de classificació.

# Exemple de pèrdua de entropia creuada
cross_entropy_loss = tf.keras.losses.SparseCategoricalCrossentropy()
y_true = [0, 1, 2]
y_pred = [[0.05, 0.95, 0.0], [0.1, 0.8, 0.1], [0.2, 0.2, 0.6]]
loss = cross_entropy_loss(y_true, y_pred)
print('Pèrdua de entropia creuada:', loss.numpy())

1.3. Implementació de funcions de pèrdua personalitzades

A més de les funcions de pèrdua predefinides, també podem crear funcions de pèrdua personalitzades.

# Exemple de funció de pèrdua personalitzada
def custom_loss(y_true, y_pred):
    return tf.reduce_mean(tf.square(y_true - y_pred))

# Utilitzant la funció de pèrdua personalitzada en un model
model.compile(optimizer='adam', loss=custom_loss)

  1. Optimitzadors

2.1. Què és un optimitzador?

Un optimitzador és un algoritme que ajusta els pesos del model per minimitzar la funció de pèrdua. Utilitza el gradient de la funció de pèrdua respecte als pesos per fer aquests ajustos.

2.2. Tipus d'optimitzadors

2.2.1. Gradient Descent

L'optimitzador de descens de gradient és un dels més simples i utilitza la derivada de la funció de pèrdua per actualitzar els pesos.

# Exemple d'optimitzador de descens de gradient
optimizer = tf.keras.optimizers.SGD(learning_rate=0.01)

2.2.2. Adam

L'optimitzador Adam combina els avantatges de dos altres optimitzadors: AdaGrad i RMSProp. És àmpliament utilitzat per la seva eficiència i rapidesa de convergència.

# Exemple d'optimitzador Adam
optimizer = tf.keras.optimizers.Adam(learning_rate=0.001)

2.3. Implementació d'optimitzadors personalitzats

També podem crear optimitzadors personalitzats si tenim necessitats específiques.

# Exemple d'optimitzador personalitzat
class CustomOptimizer(tf.keras.optimizers.Optimizer):
    def __init__(self, learning_rate=0.01, name="CustomOptimizer", **kwargs):
        super().__init__(name, **kwargs)
        self.learning_rate = learning_rate

    def _resource_apply_dense(self, grad, var, apply_state=None):
        var.assign_sub(self.learning_rate * grad)

# Utilitzant l'optimitzador personalitzat en un model
model.compile(optimizer=CustomOptimizer(), loss='mse')

  1. Exercicis pràctics

Exercici 1: Implementar una funció de pèrdua personalitzada

Objectiu: Crear una funció de pèrdua personalitzada que penalitzi més els errors grans.

def custom_mse_loss(y_true, y_pred):
    return tf.reduce_mean(tf.square(y_true - y_pred) * 2)

# Solució
model.compile(optimizer='adam', loss=custom_mse_loss)

Exercici 2: Utilitzar un optimitzador diferent

Objectiu: Entrenar un model utilitzant l'optimitzador RMSProp.

# Solució
model.compile(optimizer=tf.keras.optimizers.RMSprop(learning_rate=0.001), loss='mse')

Conclusió

En aquest tema, hem après sobre les funcions de pèrdua i els optimitzadors, dos components essencials per entrenar xarxes neuronals amb TensorFlow. Hem explorat diferents tipus de funcions de pèrdua i optimitzadors, així com la manera de crear-ne de personalitzats. Aquests conceptes són fonamentals per millorar el rendiment dels models de machine learning.

© Copyright 2024. Tots els drets reservats