Código de Python - Mini Batch. Descenso de gradiente.

Imágen de perfil

Mini Batch. Descenso de gradiente.gráfica de visualizaciones


Python

Publicado el 19 de Septiembre del 2023 por Hilario (122 códigos)
520 visualizaciones desde el 19 de Septiembre del 2023
Descenso de gradiente Mini Batch.
********************************
MiniBatch-Aula_228-B.py

******************************************************************************************
El descenso de gradiente mini batch, también conocido como Mini Batch Gradient Descent, es una variante del algoritmo de optimización del descenso de gradiente utilizado en el aprendizaje automático y la optimización de modelos de redes neuronales. A diferencia del descenso de gradiente estocástico (SGD) y el descenso de gradiente por lotes (Batch Gradient Descent), el descenso de gradiente mini batch combina características de ambos enfoques.

En el descenso de gradiente mini batch, los datos de entrenamiento se dividen en lotes más pequeños, cada uno de los cuales se utiliza para calcular una actualización parcial de los pesos del modelo. Estos lotes más pequeños se llaman "mini lotes". La idea detrás de esta técnica es encontrar un equilibrio entre la eficiencia de la actualización de parámetros y la variabilidad de las actualizaciones en comparación con el SGD y el Batch Gradient Descent.

Aquí hay una descripción paso a paso del proceso del descenso de gradiente mini batch:

División de los datos: Los datos de entrenamiento se dividen en mini lotes de tamaño fijo. El tamaño del mini lote es un hiperparámetro que se puede ajustar según las necesidades del problema. Por lo general, los tamaños de mini lotes varían desde 16 hasta 256 ejemplos, pero esto puede variar según el conjunto de datos y la arquitectura de la red.

Inicialización de pesos: Se inicializan los pesos del modelo de manera aleatoria o utilizando algún método de inicialización específico.

Cálculo del gradiente: Para cada mini lote, se calcula el gradiente de la función de pérdida con respecto a los pesos del modelo utilizando solo los ejemplos en ese mini lote. Esto se hace utilizando retropropagación (backpropagation).

Actualización de pesos: Los pesos del modelo se actualizan utilizando el gradiente calculado. La fórmula de actualización es similar a la del descenso de gradiente estocástico, pero en lugar de utilizar un solo ejemplo, se promedian los gradientes de todos los ejemplos en el mini lote. Esto suaviza las actualizaciones y reduce la variabilidad en comparación con el SGD.

Iteración: Se repiten los pasos 3 y 4 para cada mini lote. Este proceso se repite a lo largo de múltiples épocas hasta que se alcance un criterio de parada, como un número máximo de épocas o una convergencia satisfactoria.

Ventajas del descenso de gradiente mini batch:

Mayor eficiencia computacional en comparación con el Batch Gradient Descent, ya que se aprovecha el paralelismo en las operaciones matriciales.
Menor variabilidad en las actualizaciones de peso en comparación con el SGD, lo que puede llevar a una convergencia más rápida y estable.
El descenso de gradiente mini batch es una elección común para entrenar modelos de redes neuronales en la práctica, ya que combina las ventajas de SGD y Batch Gradient Descent. El tamaño del mini lote es un hiperparámetro crítico que debe ajustarse según el problema y la memoria disponible.

Requerimientos

Programa realizado bajo plataforma linux.
Ubuntu 20.04.6 LTS.
Editado con Sublime Text.
----------------------------------------------------
Ejecución bajo consola Linux.
python3 MiniBatch-Aula_228-B.py

V-0

Publicado el 19 de Septiembre del 2023gráfica de visualizaciones de la versión: V-0
521 visualizaciones desde el 19 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
"""
Descenso de gradiente Mini Batch.
********************************
MiniBatch-Aula_228-B.py
-----------------------
Ejecución bajo consola Linux.
python3 MiniNatch-Aula_228-B.py
"""
 
import numpy as np
import matplotlib.pyplot as plt
 
# Función objetivo: f(x) = x^2
def Funcion_Objetivo(x):
    return x**2
 
# Derivada de la función objetivo: f'(x) = 2x
def gradiente(x):
    return 2 * x
# Descenso de gradiente en mini lotes
def mini_batch_gradient_descent(learning_rate, batch_size, epochs):
    x = np.random.rand(1) * 10  # Inicialización aleatoria de x
    historia = []  # Almacenar historial de valores de x
    for epoch in range(epochs):
        for _ in range(0, len(x), batch_size):
            x_batch = x[_:_+batch_size]  # Mini lote
            gradient_batch = gradiente(x_batch)  # Gradiente del mini lote
            x -= learning_rate * gradient_batch.mean()  # Actualización de x
            historia.append(x[0])
    return historia
# Hiperparámetros
learning_rate = 0.1
batch_size = 5
epochs = 10
print("**************************")
# Ejecutar descenso de gradiente en mini lotes
historia = mini_batch_gradient_descent(learning_rate, batch_size, epochs)
print("Historia:\n")
for histo in historia:
  print(histo)
print("**************************")
print("Valores de la funcion Objetivo:\n")
for objetivo in [Funcion_Objetivo(x) for x in historia]:
 print(objetivo)
print("**************************")
# Gráfico de la convergencia
plt.figure(figsize=(12, 6))
plt.plot(range(len(historia)), [Funcion_Objetivo(x) for x in historia],marker='o',markerfacecolor='red', label='Función Objetivo')
plt.xlabel('Eje de Iteraciones')
plt.ylabel('Valores de la Función Objetivo')
plt.legend()
plt.title('Descenso de Gradiente en Mini Lotes')
plt.grid(True)
plt.show()
"""
**************************
Historia:
2.6883736841208723
2.1506989472966977
1.7205591578373582
1.3764473262698866
1.1011578610159094
0.8809262888127275
0.704741031050182
0.5637928248401456
0.4510342598721165
0.3608274078976932
**************************
Valores de la funcion Objetivo:
7.227353065473632
4.625505961903124
2.9603238156179996
1.8946072419955198
1.2125486348771328
0.776031126321365
0.4966599208456737
0.3178623493412311
0.20343190357838792
0.13019641829016826
**************************
"""



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/s7438