Código de Python - Relieve 3D. Descenso de gradiente.

Imágen de perfil

Relieve 3D. Descenso de gradiente.gráfica de visualizaciones


Python

Publicado el 15 de Octubre del 2023 por Hilario (124 códigos)
501 visualizaciones desde el 15 de Octubre del 2023
DesGraMul_Aula_B_228_15_oct_Github.ipynb

Este ejercicio trata de realizar un descenso de gradiente múltiple en un contexto de gráficos 3D a partir de un punto (x, y) específico. El descenso de gradiente múltiple es una técnica de optimización utilizada para encontrar los mínimos locales o globales de una función multivariable.

Aquí hay una descripción general de cómo puedes abordar este problema:

Función Objetivo: Primero, necesitas tener una función objetivo que desees optimizar en el contexto 3D. Supongamos que tienes una función f(x, y) que deseas minimizar.

Derivadas Parciales: Calcula las derivadas parciales de la función con respecto a x y a y. Estas derivadas parciales te dirán cómo cambia la función cuando modificas x e y.

Punto Inicial: Comienza en un punto (x0, y0) dado. Este será tu punto de inicio.

Tasa de Aprendizaje: Define una tasa de aprendizaje (alfa), que es un valor pequeño que controla cuánto debes moverte en cada iteración del descenso de gradiente. La elección de alfa es crucial y puede requerir ajustes.

Iteraciones: Itera a través de las siguientes fórmulas hasta que converjas a un mínimo:

Nuevo x: x1 = x0 - alfa * (∂f/∂x)
Nuevo y: y1 = y0 - alfa * (∂f/∂y)


Condición de Parada: Puedes definir una condición de parada, como un número máximo de iteraciones o un umbral de convergencia (por ejemplo, cuando las derivadas parciales son muy cercanas a cero).

Resultados: Al final de las iteraciones, obtendrás los valores de (x, y) que minimizan la función en el contexto 3D.

Es importante recordar que el éxito del descenso de gradiente depende de la elección adecuada de la tasa de aprendizaje, la función objetivo y las condiciones iniciales. Además, en problemas 3D más complejos, es posible que desees considerar algoritmos de optimización más avanzados, como el descenso de gradiente estocástico o métodos de optimización de segundo orden.

Este es un enfoque general para el descenso de gradiente múltiple en un contexto 3D. Los detalles pueden variar según la función objetivo y las necesidades específicas de tu aplicación.
descarga

Requerimientos

Este ejercicio se puede ejecutar bajo Google Colab, con este formato:
DesGraMul_Aula_B_228_15_oct_Github.ipynb
--------------------------------------------------------------------------------------------------------
Tambien los puedes ejecutar bajo consola de Linux, con este formato.

python3 DesGraMul_Aula_B_228_15_oct_Github.py

Para ello deberás tener instalados en tu ordenador los módulos, que deberás importar:
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D


En mi caso lo he editado con sublime text.
Bajo Ubuntu 20.04.6 LTS.
----------------------------------------------------------------------------
Se pueden utilizar cualquiera de las dos opciones. Quizás la más fácil
y directa es la de Google Colab.

V-0

Publicado el 15 de Octubre del 2023gráfica de visualizaciones de la versión: V-0
502 visualizaciones desde el 15 de Octubre del 2023
estrellaestrellaestrellaestrellaestrella
estrellaestrellaestrellaestrella
estrellaestrellaestrella
estrellaestrella
estrella

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
93
94
95
96
97
98
99
100
101
102
"""
Función del relieve 3D.
f(x,y)=7*x*y/e**(x**2+y**2)
"""
 
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
 
# Definir la función f(x, y)
def f(x, y):
    return 7 * x * y / np.exp(x**2 + y**2)
 
# Gradiente de la función f(x, y)
def gradient(x, y):
    df_dx = (7 * y * (1 - 2 * x**2) * np.exp(-(x**2 + y**2))) / (x**2 + y**2)
    df_dy = (7 * x * (1 - 2 * y**2) * np.exp(-(x**2 + y**2))) / (x**2 + y**2)
    return df_dx, df_dy
 
# Inicialización de parámetros
learning_rate = 0.2
num_iterations = 20
x = 1.03
y = 1.78
losses = []
 
# Realizar el descenso de gradiente
for i in range(num_iterations):
    grad_x, grad_y = gradient(x, y)
    x -= learning_rate * grad_x
    y -= learning_rate * grad_y
    loss = f(x, y)
    losses.append(loss)
 
# Crear una malla de puntos para la gráfica de líneas de nivel
x_vals = np.linspace(-2, 2, 100)
y_vals = np.linspace(-2, 2, 100)
X, Y = np.meshgrid(x_vals, y_vals)
Z = f(X, Y)
print("*********************")
print("Pérdidas MSE:")
for los in losses:
  print(los)
print("*********************")
# Crear las figuras
fig = plt.figure(figsize=(18, 7))
fig.suptitle("Descenso de Gradiente Múltiple para f(x, y)")
 
# Gráfica 3D de la función
ax1 = fig.add_subplot(131, projection='3d')
ax1.plot_surface(X, Y, Z, cmap='viridis')
ax1.set_xlabel('X')
ax1.set_ylabel('Y')
ax1.set_zlabel('f(x, y)')
 
# Gráfica de líneas de nivel con puntos del descenso
ax2 = fig.add_subplot(132)
contour = ax2.contourf(X, Y, Z, levels=50, cmap='viridis')
ax2.plot(x, y, 'ro-')
ax2.set_xlabel('X')
ax2.set_ylabel('Y')
# Agregar líneas de relieve en rojo
contour_lines = ax2.contour(X, Y, Z, colors='red')
plt.colorbar(contour, ax=ax2)
 
# Gráfica de la pérdida MSE
ax3 = fig.add_subplot(133)
ax3.plot(range(num_iterations), losses,color='black',marker='o',markerfacecolor='red')
ax3.set_xlabel('Iteraciones')
ax3.set_ylabel('Pérdida (MSE)')
 
plt.show()
 
 
 
"""
Salida de las perdidas MSE:
*********************
Pérdidas MSE:
0.1706575883663817
0.1568879606017483
0.14507677957991014
0.1348441213112778
0.12590062350473238
0.11802241676551807
0.11103383578889936
0.10479526770599319
0.0991944604608643
0.09414020523940698
0.08955767612072908
0.08538494517044058
0.08157034366138961
0.07807044075538425
0.07484847852435134
0.07187314822397455
0.06911762456379018
0.06655879702689169
0.06417665312714069
0.06195377986502775
*********************
"""



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