Código de Python - Mini Batch

Imágen de perfil

Mini Batchgráfica de visualizaciones


Python

Publicado el 26 de Septiembre del 2023 por Hilario (122 códigos)
430 visualizaciones desde el 26 de Septiembre del 2023
Cuaderno-Aula-B78-26-Sep-Rv-0.py

El Descenso de Gradiente Mini Batch (Mini Batch Gradient Descent en inglés) es una variante del algoritmo de Descenso de Gradiente que se utiliza comúnmente para entrenar modelos de aprendizaje automático, especialmente en problemas de optimización de grandes conjuntos de datos. El Descenso de Gradiente Mini Batch combina las ideas del Descenso de Gradiente Estocástico (SGD) y el Descenso de Gradiente por Lotes (Batch Gradient Descent).

Aquí están los conceptos clave del Descenso de Gradiente Mini Batch:

Descenso de Gradiente por Lotes (Batch Gradient Descent): En este enfoque, se calcula el gradiente de la función de pérdida utilizando todo el conjunto de datos de entrenamiento en cada iteración del algoritmo. Esto significa que se actualizan los parámetros del modelo una vez por ciclo completo a través del conjunto de datos. El enfoque Batch GD puede ser costoso en términos de memoria y tiempo de cómputo, especialmente para conjuntos de datos grandes.


Descenso de Gradiente Estocástico (SGD): En este enfoque, se calcula y actualiza el gradiente utilizando un solo ejemplo de entrenamiento en cada iteración. Esto conduce a actualizaciones de parámetros más frecuentes, pero a menudo más ruidosas y menos precisas. Aunque es más rápido y consume menos memoria que el enfoque por lotes, puede ser menos estable en la convergencia y requerir más iteraciones.

Descenso de Gradiente Mini Batch: En lugar de utilizar todo el conjunto de datos o un solo ejemplo de entrenamiento, el Descenso de Gradiente Mini Batch se encuentra en algún punto intermedio. Divide el conjunto de datos de entrenamiento en pequeños subconjuntos llamados mini lotes o mini-batches. Luego, en cada iteración, calcula y aplica las actualizaciones de gradiente utilizando uno de estos mini lotes en lugar del conjunto de datos completo o un solo ejemplo.

Las ventajas del Descenso de Gradiente Mini Batch incluyen:

Eficiencia computacional: Al utilizar mini lotes, se pueden aprovechar las ventajas del procesamiento paralelo y reducir la carga en la memoria, lo que lo hace más eficiente que el Descenso de Gradiente por Lotes en términos de tiempo y recursos.

Mayor estabilidad y convergencia: Comparado con SGD, el Descenso de Gradiente Mini Batch tiende a proporcionar actualizaciones de parámetros más estables y una convergencia más suave hacia el mínimo global de la función de pérdida.

Mejor generalización: En muchos casos, el Descenso de Gradiente Mini Batch puede conducir a modelos que generalizan mejor en comparación con SGD, ya que los mini lotes proporcionan un término medio entre el ruido de SGD y la lentitud de Batch GD.

El tamaño del mini lote es un hiperparámetro que debe ajustarse durante el entrenamiento del modelo. Suele ser un valor entre 16 y 256, pero puede variar según el problema y el conjunto de datos. El Descenso de Gradiente Mini Batch es una técnica muy comúnmente utilizada en el entrenamiento de redes neuronales y otros modelos de aprendizaje automático debido a su eficiencia y capacidad para encontrar mínimos globales de manera efectiva.

Requerimientos

Cuaderno-Aula-B78-26-Sep-Rv-0.py
********************************
Ejecucion bajo consola linux:
python3 Cuaderno-Aula-B78-26-Sep-Rv-0.py
***************************************
Realizado en Plataforma linux.
Ubuntu 20.04.6 LTS.
Editado con Sublime Text,


V-0.

Publicado el 26 de Septiembre del 2023gráfica de visualizaciones de la versión: V-0.
431 visualizaciones desde el 26 de Septiembre del 2023
estrellaestrellaestrellaestrellaestrella
estrellaestrellaestrellaestrella
estrellaestrellaestrella
estrellaestrella
estrella

descarga
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
"""
 Cuaderno-Aula-B78-26-Sep-Rv-0.py
 ********************************
 Ejecucion bajo consola linux:
 python3 Cuaderno-Aula-B78-26-Sep-Rv-0.py
 ***************************************
 Realizado en Plataforma linux.
 Ubuntu 20.04.6 LTS.
 Editado con Sublime Text,
"""
 
import numpy as np
import matplotlib.pyplot as plt
 
# Función de costo de ejemplo (cuadrática)
def cost_function(theta):
    return theta**2
 
# Gradiente de la función de costo (derivada)
def gradient(theta):
    return 2 * theta
 
# Descenso de gradiente mini batch
def mini_batch_gradient_descent(X, y, learning_rate=0.01, batch_size=2, num_epochs=4):
    theta = np.random.rand()  # Inicialización aleatoria de theta
    cost_history = []
 
    for epoch in range(num_epochs):
        for _ in range(0, len(X), batch_size):
            batch_X = X[_:_+batch_size]
            batch_y = y[_:_+batch_size]
 
            gradients = gradient(batch_X)
            theta -= learning_rate * np.mean(gradients)
 
            cost = np.mean(cost_function(batch_X))
            cost_history.append(cost)
 
    return theta, cost_history
 
# Datos de ejemplo
X = np.linspace(-5, 5, 10)
y = cost_function(X)
 
# Aplicar el descenso de gradiente mini batch
final_theta, cost_history = mini_batch_gradient_descent(X, y)
print("Historia:\n")
for historia in cost_history:
  print(historia)
print("*****************")
print(f'Theta final:\n {final_theta}')
print("*****************")
# Graficar la función de costo a lo largo de las iteraciones
plt.plot(cost_history,color='black',marker='o',markerfacecolor='red')
plt.xlabel('Iteración')
plt.ylabel('Costo')
plt.title('Descenso de Gradiente Mini Batch')
plt.show()
 
"""
SALIDA POR CONSOLA:
***************************
Historia costos:
20.061728395061728
5.246913580246913
0.30864197530864174
5.2469135802469165
20.061728395061728
20.061728395061728
5.246913580246913
0.30864197530864174
5.2469135802469165
20.061728395061728
20.061728395061728
5.246913580246913
0.30864197530864174
5.2469135802469165
20.061728395061728
20.061728395061728
5.246913580246913
0.30864197530864174
5.2469135802469165
20.061728395061728
*****************
Theta final:
--------------
 0.7717043133232641
*****************
"""



Comentarios sobre la versión: V-0. (0)


No hay comentarios
 

Comentar la versión: V-0.

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad

http://lwp-l.com/s7442