"""
Ejercicio_Aula_23_Momentum.py
*****************************
Ejecucion en consola Linux.
--------------------------
python3 Ejercicio_Aula_23_Momentum.py
"""
import numpy as np
import matplotlib.pyplot as plt
x=np.linspace(-10, 30, 100)
# Función f(x) = x^2 / 6
def f(x):
return x**2 / 6
# Derivada de f(x)
def df(x):
return x / 3
# Parámetros
alpha = 0.1 # Tasa de aprendizaje
beta = 0.9 # Tasa de momentum
x = 18 # Valor inicial de x
iterations = 100
# Listas para almacenar los valores de x y los costos
x_values = [x]
costs = [f(x)]
velocidad=[]
# Descenso de gradiente con momentum
v = 0 # Inicializamos la velocidad a cero
for _ in range(iterations):
gradient = df(x) # Utilizamos la derivada de f(x)
v = beta * v + (1 - beta) * gradient
x = x - alpha * v
x_values.append(x)
costs.append(f(x))
velocidad.append(v)
# Graficar la parábola
x_range = np.linspace(-10, 30, 400)
y = f(x_range)
plt.figure(figsize=(12, 6))
plt.subplot(1, 2, 1)
plt.plot(x_range, y, label='f(x) = x^2 / 6', color='b')
plt.scatter(x_values, [f(val) for val in x_values], c='r', label='Descenso de Gradiente')
plt.xlabel('x')
plt.ylabel('f(x)')
plt.title('Parábola y Descenso de Gradiente')
plt.legend()
# Graficar el costo (MSE)
iteration_numbers = range(iterations + 1)
plt.subplot(1, 2, 2)
plt.plot(iteration_numbers, costs, color='black',marker='o',markerfacecolor='red', linestyle='-')
plt.xlabel('Iteración')
plt.ylabel('Costo (MSE)')
plt.title('Descenso de Gradiente de Costos')
plt.grid(True)
print("*******************************")
print("Historial de Velocidades:")
for index, mivelocidad in enumerate(velocidad):
print(f'Iteración {index}:{mivelocidad}')
print("*******************************")
plt.tight_layout()
plt.show()
plt.plot(range(iterations), velocidad, color='black', marker='o', markerfacecolor='red', linestyle='-')
plt.xlabel('Iteración')
plt.ylabel('Velocidad')
plt.title('Velocidad de descenso con momentum')
plt.grid(True)
plt.show()
"""
Esta salida, imprimida por consola,
muestra la progresión de los valores de
la velocidad de descenso.
*******************************
Historial de Velocidades:
Iteración 0:0.5999999999999999
Iteración 1:1.138
Iteración 2:1.6184066666666665
Iteración 3:2.0453779777777776
Iteración 4:2.4228342311851847
Iteración 5:2.754468745147901
Iteración 6:3.043758245230519
Iteración 7:3.29397293448744
Iteración 8:3.5081862450370442
Iteración 9:3.689284270381565
Iteración 10:3.8399748789570283
Iteración 11:3.9627965104117546
Iteración 12:4.060126657019636
Iteración 13:4.134190033443331
Iteración 14:4.187066438779845
Iteración 15:4.220698315453442
Iteración 16:4.2368980100748335
Iteración 17:4.23735474186717
Iteración 18:4.223641284674049
Iteración 19:4.197220368917994
Iteración 20:4.159450810174484
Iteración 21:4.11159337127141
Iteración 22:4.054816365021072
Iteración 23:3.9902010048456975
Iteración 24:3.918746510671708
Iteración 25:3.8413749775462116
Iteración 26:3.7589360144747777
Iteración 27:3.6722111609955714
Iteración 28:3.5819180889943008
Iteración 29:3.488714597229843
Iteración 30:3.3932024059843977
Iteración 31:3.2959307591768825
Iteración 32:3.1973998411861957
Iteración 33:3.0980640155239567
Iteración 34:2.998334892376195
Iteración 35:2.898584231901956
Iteración 36:2.7991466900354673
Iteración 37:2.700322413388843
Iteración 38:2.602379489695585
Iteración 39:2.5055562600726673
Iteración 40:2.410063499211799
Iteración 41:2.3160864694396452
Iteración 42:2.223786854413241
Iteración 43:2.1333045780414333
Iteración 44:2.044759514046668
Iteración 45:1.9582530914045568
Iteración 46:1.8738698007219752
Iteración 47:1.7916786064385786
Iteración 48:1.7117342695620597
Iteración 49:1.6340785854746522
Iteración 50:1.5587415411777368
Iteración 51:1.4857423961732537
Iteración 52:1.4150906910153083
Iteración 53:1.3467871874031063
Iteración 54:1.2808247435274474
Iteración 55:1.2171891282275964
Iteración 56:1.1558597773636383
Iteración 57:1.0968104956615308
Iteración 58:1.0400101071440955
Iteración 59:0.9854230571212568
Iteración 60:0.9330099685769644
Iteración 61:0.8827281556585113
Iteración 62:0.8345320968463751
Iteración 63:0.788373870259298
Iteración 64:0.7442035534300642
Iteración 65:0.7019695897723203
Iteración 66:0.6616191238477763
Iteración 67:0.6230983074361942
Iteración 68:0.5863525783076496
Iteración 69:0.5513269134976008
Iteración 70:0.5179660587902314
Iteración 71:0.4862147360242982
Iteración 72:0.4560178297482107
Iteración 73:0.4273205546672379
Iteración 74:0.40006860524547155
Iteración 75:0.3742082887483969
Iteración 76:0.34968664293853513
Iteración 77:0.32645153956653106
Iteración 78:0.3044517747331723
Iteración 79:0.28363714713403887
Iteración 80:0.2639585251377053
Iteración 81:0.24536790359054603
Iteración 82:0.2278184511861342
Iteración 83:0.21126454918487644
Iteración 84:0.1956618222197949
Iteración 85:0.1809671618771555
Iteración 86:0.16713874369585618
Iteración 87:0.15413603818703397
Iteración 88:0.1419198164351372
Iteración 89:0.1304521508036463
Iteración 90:0.11969641123262567
Iteración 91:0.10961725758126502
Iteración 92:0.10018062843643621
Iteración 93:0.09135372677796884
Iteración 94:0.08310500286275498
Iteración 95:0.0754041346628533
Iteración 96:0.06822200616739896
Iteración 97:0.06153068383426538
Iteración 98:0.05530339145499761
Iteración 99:0.04951448367547329
*******************************
"""
Comentarios sobre la versión: Versión 1.0 (0)
No hay comentarios