Mostrar los tags: n

Mostrando del 11 al 20 de 2.720 coincidencias
Se ha buscado por el tag: n
Imágen de perfil

Recordatorio, descenso con momentum


Python

Publicado el 23 de Mayo del 2024 por Hilario (129 códigos)
163 visualizaciones desde el 23 de Mayo del 2024
Figure_1

***********************************************************************************************************************
Aula_28_repaso_descenso_momentum.py
+++++++++++++++++++++++++++++++++++
Dado que existen numerosas dudas sobre la aplicación de momentúm a un descenso de gradiente.
Vamos a explicar, lo más fácil posible, en que consiste, aunquue se miráis hacía atrás encontrareis
ejercicios en esta WEB, en la que se habla de este tema con ejercicios de ejemplo.

Sí suponéis una función ondulada, sobre dos ejes coordenados, en que el eje y tiene los valores de pérdida, y el eje x tiene los valores de parámetros o entradas. Esta función ondulada tendrá diversos, valores locales mínimos, y un valor, digamos, global mínimo.
Al aplicar un momentum, lo que hacemos es que en estos valles el descenso de gradiente no se relentice, hasta llegar global mínimo.

Bien, vamos a concretar en el siguiente resumen, las particulatidades del momentum.
Luego, plantearemos el sencillo ejercicio: Aula_28_repaso_descenso_momentum.py, para ver su funcionamiento real.

*****************************************************************************************************************

El descenso de gradiente con momentum (o SGD con momentum, por sus siglas en inglés) es una variación del algoritmo de descenso de gradiente estocástico (SGD) que se utiliza para entrenar redes neuronales y otros modelos de aprendizaje automático.

El objetivo del descenso de gradiente es encontrar los parámetros óptimos de un modelo que minimicen la función de error.
En el caso de las redes neuronales, la función de error representa la diferencia entre las predicciones del modelo y los datos reales.

El descenso de gradiente funciona iterativamente, ajustando los parámetros del modelo en la dirección del gradiente negativo de la función de error. Esto significa que los parámetros se mueven en la dirección hacía abajo que más reduce el error.
Sin embargo, el descenso de gradiente estándar puede ser sensible al ruido en los datos y puede quedar atrapado en mínimos locales, los valles de los que hablamos anteriormente.

Aquí es donde entra en juego el momentum. El momentum introduce una especie de "memoria" en el algoritmo, lo que le permite tener en cuenta los gradientes anteriores al actualizar los parámetros. Esto ayuda a suavizar las actualizaciones y a evitar
que el algoritmo se quede oscilando o se atasque en mínimos locales.

En términos matemáticos, el momentum se implementa mediante un término adicional en la ecuación de actualización de los parámetros.
Este término es proporcional al gradiente promedio de las iteraciones anteriores y ayuda a impulsar los parámetros en la misma dirección según los cálculos más favorables para un descenso que sea optimizado.

El uso del momentum tiene varias ventajas:

Aumenta la velocidad de convergencia: El momentum puede ayudar a que el algoritmo converja al mínimo global de la función de error más rápidamente.

Reduce las oscilaciones: El momentum ayuda a suavizar las actualizaciones de los parámetros, lo que puede reducir las oscilaciones en la trayectoria del aprendizaje.

Escapa de los mínimos locales: El momentum puede ayudar al algoritmo a escapar de los mínimos locales, que son puntos en los que la función de error es localmente mínima pero no globalmente mínima.

El momentum se controla mediante un hiperparámetro llamado coeficiente de momentum, que suele estar entre 0 y 1. Un valor más alto del coeficiente de momentum da más importancia a los gradientes anteriores y puede aumentar la velocidad de convergencia, pero también puede hacer que el algoritmo sea más sensible al ruido.

En general, el descenso de gradiente con momentum es una técnica poderosa para entrenar redes neuronales y otros modelos de aprendizaje automático.
Es más rápido y más robusto que el descenso de gradiente estándar, y puede ayudar a mejorar el rendimiento general del modelo.

********************************************************************************************************************
Como dijimos anteriormente proponemos ahora el ejercicio:
Aula_28_repaso_descenso_momentum.py, que pasamos a explicar:

1-Lo primero que hacemos es importar las librerías necesarias.

En nuestro caso: Se importan las librerías necesarias: numpy para cálculos numéricos y matplotlib.pyplot para graficar los resultados.

2-Definimos la Función de Pérdida y su Gradiente.

# Función de pérdida (En nuestro caso escogemos un ejemplo simple: f(x) = x^2)
def loss_function(x):
return x**2

# Gradiente o derivada de la función de pérdida
def gradient(x):
return 2*x

3- Ahora definimos los arámetros Iniciales.

x = np.random.randn() # Con el fin de no complicarnos la vida
utilizamos random en una inicialización aleatoria de los valores de x.
learning_rate = 0.1 Esto sería el ratio de aprendizaje.
momentum = 0.9 El coeficiente del momento
velocity = 0 Y lo inicializamos con un valor 0.

4- Almacenamiento de Pérdidas con el fin de poder realizar la gráfica.
losses = [ ]

5- Ahora lo que tenemos que hacer es el bucle de entrenamiento.

Iteraciones de entrenamiento con 200 iteraciones o ciclos.

for i in range(200):
grad = gradient(x)
velocity = momentum * velocity - learning_rate * grad
x += velocity
loss = loss_function(x)
losses.append(loss)
print(f"Iteración {i+1}, x: {x}, Loss: {loss}")

El bucle de entrenamiento se ejecuta durante 200 iteraciones. En cada iteración
Se calcula el gradiente de la función de pérdida en el punto actual
Se actualiza la velocidad usando la fórmula del momentum:
Se actualiza el valor de x, sumándole la velocidad: velocity x += velocity.
Se calcula la pérdida actual usando la función de pérdida.
Se almacena el valor de la pérdida en la lista losses.
Se imprime el número de iteración, el valor de x, conla pérdida correspondiente.


5-Con el fin de hacer más intuitivo el ejercicio graficamos las pérdidas.

plt.plot(losses)
plt.xlabel('Iteración')
plt.ylabel('Pérdida')
plt.title('Descenso de Gradiente con Momentum')
plt.show()

---------------------------------------------------------------------------
--------------------------------------------------------------------------
Para este ejercicio hemos utilizado una plataforma Linux, con Ubuntu 20.04.6 LTS.
Lo hemos editado con Sublite text.
La versión de python es la 3.
Se debe tener cargado para su importación en el sistema, estos módulos:
import numpy as np
import matplotlib.pyplot as plt
*****************************************************
Ejecución bajo consola linux:
python3 Aula_28_repaso_descenso_momentum.py

*****************************************************
Imágen de perfil

Red Neuronal sólo con Numpy.


Python

Publicado el 16 de Mayo del 2024 por Hilario (129 códigos)
279 visualizaciones desde el 16 de Mayo del 2024
Aula_28_Recordatorio_Mayo.py
************************************

Bien, dada una matriz, con 8 característica, y 20 muestras.
Como la siguiente:

[[1.234 0.567 2.345 1.890 0.123 3.456 2.345 1.234]
[0.987 1.234 1.890 0.345 2.567 0.890 1.234 2.345]
[3.456 1.890 0.567 2.345 1.234 0.890 2.567 1.890]
[2.567 1.890 0.123 1.234 2.345 0.567 1.890 3.456]
[0.890 1.890 2.345 0.567 1.234 3.456 0.890 1.234]
[1.890 2.345 1.234 0.567 2.345 0.123 1.234 0.567]
[1.234 2.345 0.567 1.890 0.123 2.567 0.890 1.234]
[2.345 1.890 3.456 0.890 1.234 0.567 1.890 2.567]
[0.567 1.234 1.890 0.567 1.234 0.890 2.345 0.123]
[0.890 1.890 0.123 1.234 0.567 3.456 1.234 1.890]
[1.890 0.567 1.234 0.890 2.567 1.234 2.345 0.567]
[1.234 2.567 0.890 1.890 0.123 1.890 0.567 1.234]
[0.567 1.234 2.345 1.890 0.567 2.345 1.234 0.890]
[1.890 0.123 1.234 0.567 2.345 1.890 0.567 1.234]
[0.890 1.234 0.567 1.890 1.234 2.345 3.456 0.890]
[1.234 0.567 2.345 0.890 2.345 1.234 0.567 1.890]
[2.567 1.890 0.890 1.234 0.567 1.890 2.345 0.123]
[0.567 2.345 1.234 0.567 1.890 0.123 1.890 0.567]
[1.234 1.890 0.567 3.456 2.567 1.234 0.890 1.234]
[0.567 2.345 1.234 0.890 1.890 0.567 1.234 2.567]]


Planteamos una red neuronal sin utilizar ni keras ni tensorflow. Que entrena la red con esos valores, de 8 características, y 20 muestras o ejemplos.
Y que haga una prediccion de salida de la caracteristica correspondientes, a esta muestra dada:[1.345 2.890 0.456 1.890 12.234 10.567 1.890 12.567].

El ejercicio, tendría básicamente estos pasos:

1-Definición de funciones de activación y pérdida:
*******************************************************
Se define la función de activación ReLU (relu) y su derivada (relu_derivative).
ReLU es una función de activación comúnmente utilizada en redes neuronales debido a su simplicidad y buen desempeño en muchas tareas.
Se define la función de pérdida de error cuadrático medio (mean_squared_error).
Esta función calcula la diferencia cuadrática media entre las predicciones y las etiquetas verdaderas.

2-Implementación de la red neuronal:
*****************************************
Se crea una clase NeuralNetwork que representa una red neuronal de dos capas (una capa oculta y una capa de salida).
En el método __init__, se inicializan los pesos y sesgos de la red neuronal de manera aleatoria.
En el método forward, se realiza la propagación hacia adelante, calculando las salidas de la red neuronal.
En el método backward, se realiza la retropropagación del error, calculando los gradientes de los pesos y sesgos y actualizándolos utilizando el algoritmo de descenso de gradiente.
El método train entrena la red neuronal utilizando los datos de entrada y las etiquetas verdaderas durante un número específico de épocas.
El método predict realiza predicciones utilizando la red neuronal entrenada.

3-Entrenamiento de la red neuronal:
********************************
Se definen los datos de entrada (X_train) y las etiquetas verdaderas (y_train).
Los datos se normalizan dividiéndolos por su máximo valor para asegurar que estén en el rango [0, 1].
Se crea una instancia de la red neuronal con el tamaño de entrada, tamaño oculto y tamaño de salida dados.
La red neuronal se entrena utilizando los datos de entrenamiento durante 10000 épocas con una tasa de aprendizaje de 0.01.

4-Predicción:
*****************
Se define un nuevo conjunto de datos de entrada (X_new) para realizar una predicción.
Los datos de entrada se normalizan de la misma manera que los datos de entrenamiento.
Se realiza una predicción utilizando la red neuronal entrenada.
El resultado de la predicción se desnormaliza multiplicándolo por el máximo valor de las etiquetas verdaderas.
Se muestra el resultado de la predicción.

Según vemos su desarrollo podemos decir, que este ejercicio muestra cómo implementar una red neuronal básica desde cero en Python sin utilizar bibliotecas como Keras o TensorFlow. La red neuronal se entrena utilizando el algoritmo de retropropagación y se prueba haciendo una predicción sobre nuevos datos de entrada.

El alumno podrá interactuar con el ejercicio, modificando parametros como
valores de entrada, caracteristicas y muestras, para su mejor comprensión.



UNA SALIDA DEL EJERCICIO, PODRÍA SER LA SIGUIENTE:
****************************************************************************
Epoch 0, Loss: 11.7756050562224
Epoch 1000, Loss: 0.012417106163412383
Epoch 2000, Loss: 0.004855440981664029
Epoch 3000, Loss: 0.002804630823301262
Epoch 4000, Loss: 0.0019105925868362645
Epoch 5000, Loss: 0.0013765944597636112
Epoch 6000, Loss: 0.0010168157428455883
Epoch 7000, Loss: 0.0007730551039343544
Epoch 8000, Loss: 0.0006225694864747496
Epoch 9000, Loss: 0.0005176777148262488
Predicción de salida: [[-0.55685326 -0.9034264 -1.02152184 0.87943007 0.40507882 1.91684935
0.28005875 2.23286946]]
[Finished in 701ms]

***********************************************************************
El ejercicio fue realizado bajo plataforma linux.
Ubuntu 20.04.6 LTS.
Editado con Sublime text.
Ejecución:
python3 Aula_28_Recordatorio_Mayo.py
***********************************************************************
Imágen de perfil

Juego de la Serpiente, en ASCII (versión con sonido)


Python

estrellaestrellaestrellaestrellaestrella(6)
Actualizado el 13 de Mayo del 2024 por Antonio (76 códigos) (Publicado el 8 de Junio del 2020)
11.456 visualizaciones desde el 8 de Junio del 2020
Nueva versión del Juego de la Serpiente, en la que se ha incluido sonido y 3 archivos de audio (incluidos en la carpeta). Para usar el programa adecuadamente, simplemente hay que descomprimir la carpeta en la que se encuentra.
BOTONES:
Mover serpiente: Botónes de dirección
Pause y reanudar partida pausada : Barra espaciadora.
Finalizar partida: tecla "q"
PARA CUALQUIER PROBLEMA, NO DUDEN EN COMUNICÁRMELO.
sgm
sg6
sg4
ggggg
Imágen de perfil

Visor de gráficos financieros (nueva versión)


Python

estrellaestrellaestrellaestrellaestrella(1)
Actualizado el 8 de Mayo del 2024 por Antonio (76 códigos) (Publicado el 18 de Abril del 2022)
3.619 visualizaciones desde el 18 de Abril del 2022
Programa para mostrar el precio de cierre, apertura, máximo y mínimo de las acciones de un activo para un determinado periodo de tiempo. También incluye representación de 'bandas de bollinger' y la media movil de 20 sesiones. Para mostrar la gráfica correspondiente a la información deseada, hacer click en el botón 'SHOW GRAPH'. Para cualquier duda u observación, utilicen la sección de comentarios.
fg
Imágen de perfil

Generador de valores hash para contraseñas.


Python

Actualizado el 5 de Mayo del 2024 por Antonio (76 códigos) (Publicado el 20 de Noviembre del 2022)
1.955 visualizaciones desde el 20 de Noviembre del 2022
El siguiente programa genera valores hash para una contraseña, utilizando distintos algoritmos. También permite la copia de las salidas generadas.
ph
Imágen de perfil

Generador de gifs a partir de video (nueva version)


Python

Actualizado el 5 de Mayo del 2024 por Antonio (76 códigos) (Publicado el 29 de Enero del 2024)
1.200 visualizaciones desde el 29 de Enero del 2024
Programa para generar gifs animados a partir de vídeos, que se ejecuta en la línea de comandos.
ARGUMENTOS:
-src/--source: Nombre del vídeo original (obligatorio).
-dest/--destination: Nombre del archivo a generar (opcional).
-sz/--size: Tamaño en porcentaje del gif respecto al vídeo original (opcional).
-shw/--show: Muestra resultado en ventana emergente al finalizar el proceso de generado (opcional).
-st/--start: Segundo inicial para gif (opcional).
-e/--end: Segundo final (opcional).
-spd/--speed: Velocidad relativa de la animación (opcional)

PARA CUALQUIER DUDA U OBSERVACIÓN, USEN LA SECCIÓN DE COMENTARIOS.

imagge
Imágen de perfil

Vista 'grid' (demo)


Python

Actualizado el 4 de Mayo del 2024 por Antonio (76 códigos) (Publicado el 31 de Julio del 2023)
2.689 visualizaciones desde el 31 de Julio del 2023
El siguiente código muestra un grid en pantalla por el que se puede desplazar usando los botones de dirección:

Botón de dirección derecha: Desplazamiento hacia la derecha.
Botón de dirección izquierdo: Desplazamiento a la izquierda.
Botón de dirección superior: Desplazamiento hacia adelante.
Botón de dirección inferior: Desplazamiento hacia atrás.
Botones 'o', 'p', 'k' y 'l': Desplazamientos en diagonal.

grid
Imágen de perfil

Buscador de archivos mediante expresiones regulares (nueva versión)


Python

Actualizado el 27 de Abril del 2024 por Antonio (76 códigos) (Publicado el 5 de Mayo del 2022)
2.494 visualizaciones desde el 5 de Mayo del 2022
Programa para buscar archivos mediante expresiones regulares.
COMANDOS:
cbd <dir> cambia el directorio base.
sch <string> realiza búsqueda por el sistema de carpetas a partir de la carpeta base.
cl realiza limpieza de pantalla.
help muestra lista de comandos.
q finaliza programa.

PARA CUALQUIER DUDA U OBSERVACIÓN, USEN LA SECCIÓN DE COMENTARIOS.
ff43
ff42
ff41
Imágen de perfil

Array MNIST. Trabajo con índices.


Python

Publicado el 21 de Abril del 2024 por Hilario (129 códigos)
283 visualizaciones desde el 21 de Abril del 2024
Figure_1
Figure_2
Figure_3

******************************************************************************************************************
Como hay alguna duda del tratamiento de imagenes Minist, a través de llamadas a
índices. Propongo este sencillo ejercicio para el Aula-28, con el fin de comprender el proceso irecorrido a través de indices para poder visualizar imágenes Minist, así como tambien entender las particularidades de este tipo de Arrays.
********************************************************************************
Paso a describir, de forma sencilla, las lineas de código del ejercicio Aula_28-Tratamiento-Indices.py

from keras.datasets import mnist
--------------------------------


Aquí estamos importando el conjunto de datos MNIST desde la biblioteca Keras. MNIST es un conjunto de datos popular utilizado para entrenar modelos de redes neuronales convolucionales (CNN) en tareas de reconocimiento de dígitos escritos a mano.

(train_images, train_labels), (test_images, test_labels) = mnist.load_data()
-----------------------------------------------------------------------------
Esta línea carga los datos MNIST en cuatro variables: train_images y train_labels contienen las imágenes y las etiquetas correspondientes utilizadas para entrenar el modelo, mientras que test_images y test_labels contienen las imágenes y las etiquetas utilizadas para evaluar el rendimiento del modelo después del entrenamiento.

print(train_images.ndim)
print(train_images.dtype)

------------------------
Estas líneas imprimen la dimensionalidad y el tipo de datos de las imágenes de entrenamiento. train_images.ndim devuelve la cantidad de dimensiones (generalmente 3: altura, ancho y canal de color) y train_images.dtype devuelve el tipo de datos de los píxeles en las imágenes (generalmente uint8, que representa enteros sin signo de 8 bits).

digit = train_images[4888]
--------------------------

Esto selecciona una imagen específica del conjunto de datos de entrenamiento. Aquí, digit es una variable que contiene la imagen correspondiente al índice 4888 del conjunto de datos de entrenamiento.

plt.imshow(digit, cmap=plt.cm.binary)
plt.show()

------------------------------------
Estas líneas muestran la imagen seleccionada utilizando Matplotlib. plt.imshow() muestra la imagen y plt.show() muestra la ventana emergente con la imagen.

for i in range(10, 11):
plt.imshow(train_images[i], cmap=plt.cm.binary)
plt.show()

---------------------------------------------------

Este bucle muestra una sola imagen del conjunto de datos de entrenamiento. En este caso, se muestra la imagen con índice 10 (es decir, la undécima imagen) utilizando las mismas funciones de visualización de Matplotlib que se mencionaron anteriormente.

def visualizar_imagenes(mnits, indices):
...
---------------------------------------
Aquí se define una función llamada visualizar_imagenes que acepta dos argumentos: mnits, que son las imágenes que se van a visualizar, y indices, que son los índices de las imágenes que se desean visualizar.

indices_a_visualizar = [0, 100, 200, 300, 400, 500, 600, 700]
visualizar_imagenes(train_images, indices_a_visualizar)

-----------------------------------------------------------------
Finalmente, se crea una lista de índices de imágenes que se desean visualizar y se llama a la función visualizar_imagenes para mostrar esas imágenes específicas del conjunto de datos de entrenamiento.

********************************************************************
Este ejercicio fue ralizado bajo plataforma linux, concretamente con:
Ubuntu 20.04.6 LTS.
Editado con Sublime Text.
Cargado Python3.
El sistema debe tener cargado para su importación:
from keras.datasets import mnist
import matplotlib.pyplot as plt
*************************************************
Ejecucion del programa bajo consola linux.
python3 Aula_28-Tratamiento-Indices.py
Imágen de perfil

Piano


Java

Actualizado el 17 de Abril del 2024 por Diego (6 códigos) (Publicado el 1 de Septiembre del 2020)
4.443 visualizaciones desde el 1 de Septiembre del 2020
fk