Skip to content

Repository files navigation

🧠 Pyceptron

PyPI VersionLicense: MITPython VersionDevelopment StatusGitHub StarsNumPyMatplotlibPoetryTermPyX

Perceptron vs Dataset

Pyceptron es una librería open-source desarrollada con el objetivo de desarrollar, analizar y demostrar muchos conceptos que un perceptrón nos ofrece, a base de una arquitectura minimalista y muy fácil de desarrollar.

🖥️ Instalación

Puedes instalar la librería usando el comando

pip install pyceptron

O puedes usar poetry con

poetry add pyceptron

🎯 Uso básico

La librería fue diseñada para que puedas implementar de manera fácil y rápida tus soluciones!

# Importar las libreríasfrompyceptronimportPerceptronClassicfrompyceptronimportLinearfrom ... importdataset# Importa tu dataset# Creando el perceptronperceptron=PerceptronClassic(
f_activation=Linear(),
input_units=1
)
perceptron.train(
x=dataset.x, y=dataset.y, alpha=0.01, epochs=20
)
# -- Evaluando perceptron --x_test=100y_pred=perceptron.predict(x_test)
print (f"Predicción de {x_test} -> Predicho: {y_pred}")

Home

⚒️ Funciones extra

Pyceptron va más allá de un simple train() y predict(). Incluye herramientas potentes para que entiendas a fondo el proceso de aprendizaje:

Generadores de Datasets (pyceptron.utils.generators)

No necesitas preparar tus datos manualmente. Pyceptron te permite crear datasets personalizados con relaciones matemáticas predefinidas, perfectos para experimentar y validar el comportamiento de los perceptrones.

La clase base DatasetGenerator ofrece una implementación robusta para la creación de conjuntos de datos. Permite definir la cantidad de puntos, el rango de los valores de entrada (x), y opcionalmente barajar los datos. Es fundamental destacar que, al barajar (shuffle=True), la librería asegura que los pares (X, Y) se mantengan intactos, preservando la relación subyacente del dataset. Esto evita los problemas de divergencia catastrófica que ocurren cuando X y Y son aleatorizados independientemente.

Puedes definir tus propios generadores heredando de DatasetGenerator y simplemente proporcionando la función matemática deseada:

frompyceptron.utils.generators.baseimportDatasetGenerator# --- Ejemplos de Generadores Incluidos ---# Generador de datos para la conversión Celsius a Fahrenheit (relación lineal)classCelsius2FahrenheitGenerator(DatasetGenerator):
def__init__(self, function=lambdax : x*9/5+32):
super().__init__(function=function) # Llama al constructor de la base# Generador de datos para una relación lineal diferenteclassEquation1Generator(DatasetGenerator):
def__init__(self, function=lambdax : x*251-220):
super().__init__(function=function)
# Generador de datos para una relación parabólica (no lineal)classParabola1Generator(DatasetGenerator):
def__init__(self, function=lambdax : x**2+x*3+5):
super().__init__(function=function)

Ejemplos de Uso:

frompyceptron.utils.generatorsimportCelsius2FahrenheitGenerator, Parabola1Generator# Generar datos para la conversión Celsius a Fahrenheitcelsius_generator=Celsius2FahrenheitGenerator()
x_celsius, y_celsius=celsius_generator.generate(quantity=100, range_start=-50, range_end=50, shuffle=True)
# Generar datos para una relación parabólicaparabola_generator=Parabola1Generator()
x_parabola, y_parabola=parabola_generator.generate(quantity=100, range_start=-10, range_end=10)
# Puedes obtener el valor esperado para cualquier entrada, manteniendo la coherenciaexpected_f=celsius_generator.expected(25) # Devuelve 77.0# Los generadores también incluyen métodos para visualizar los datos:celsius_generator.graph() # Grafica la relación X vs Ycelsius_generator.graph_x() # Grafica la distribución de Xcelsius_generator.graph_y() # Grafica la distribución de Y

Dataset Analysis XDataset Analysis Y

Estos generadores son cruciales para probar cómo tus perceptrones se adaptan a diferentes tipos de problemas (lineales vs. no lineales) y para investigar el impacto del orden de los datos.

Analizador de Rendimiento (pyceptron.utils.analyzer)

El Analyzer es tu laboratorio de depuración y visualización. Te permite una introspección profunda del proceso de entrenamiento del perceptrón.

  • Monitoreo del Error: Visualiza el historial del error promedio y el Error Cuadrático Medio (MSE) a lo largo de las épocas, dándote una idea clara de la convergencia (o divergencia) del modelo.

Error HistoryMSE

  • Historial de Hiperparámetros: Observa cómo evolucionan los pesos y el bias del perceptrón durante el entrenamiento. Esto es invaluable para entender el proceso de optimización.

Weights HistoryBias History

  • Comparación de Datos: Gráfica las predicciones del perceptrón frente a la "línea de frontera" real de tus datos, permitiendo un diagnóstico visual inmediato del rendimiento del modelo.

  • Resumen Detallado: Obtén un desglose en consola de las métricas clave y los hiperparámetros finales del perceptrón.

frompyceptronimportPerceptronClassic, Linearfrompyceptron.utils.generatorsimportCelsius2FahrenheitGeneratorfrompyceptron.utils.analyzerimportAnalyzerfrompyceptron.enums.middleware_training_monolayerimportMiddlewareTrainingMonolayer# ... (código de creación del dataset y perceptrón, como en el "Uso Básico") ...# Instancia el analizador con tu perceptrónanalyzer=Analyzer(perceptron)
# Configura el perceptrón para que el analizador recolecte datos durante el entrenamientoperceptron.in_training(
analyzer=analyzer,
options=[
MiddlewareTrainingMonolayer.HISTORY_WEIGHTS, # Recolectar historial de pesosMiddlewareTrainingMonolayer.HISTORY_BIASES, # Recolectar historial de bias
]
)
# ... (entrenamiento del perceptrón) ...# Usa las funciones del analizador para visualizar y depurar:analyzer.mse()
analyzer.error()
analyzer.history_weights()
analyzer.history_bias()
analyzer.compare_graph(generator)
analyzer.debug()

Esta herramienta es vital para comprender la estabilidad, la convergencia y las posibles anomalías en el aprendizaje, como se demostró en nuestros laboratorios de comparación entre perceptrones.

Persistencia de Modelos

Guarda y carga tus perceptrones entrenados fácilmente para evitar reentrenamientos y para usar tus modelos en aplicaciones:

frompyceptron.utilsimportload_perceptronroute="perceptrones/perceptron.json"perceptron=load_perceptron(route)
print (perceptron.predict(0))

📐 Arquitectura del proyecto

Pyceptron está diseñado con la modularidad como pilar central, permitiendo una fácil comprensión y extensibilidad.

  • pyceptron/factivations: Contiene implementaciones de diversas funciones de activación (lineales y no lineales).

  • pyceptron/objects/perceptrons: Aquí residen las definiciones de los modelos de perceptrones.

    • models/: Define las clases base abstractas para garantizar una interfaz coherente.
    • pieces/: Componentes reutilizables como la lógica central y el exportador/importador de modelos. Dentro de trainers/ encontrarás las implementaciones de los algoritmos de entrenamiento específicos (clásico, gradiente).
    • variants/: Las implementaciones concretas de los perceptrones (PerceptronClassic, PerceptronGradient) que combinan la base del perceptrón con los distintos entrenadores usando herencia múltiple.
  • pyceptron/objects/layers: Aunque actualmente enfocado en perceptrones monocapa, la presencia de layer.py y sequential.py anticipa futuras extensiones para redes neuronales multicapa.

  • pyceptron/utils: Utilidades esenciales para el ecosistema:

    • analyzer/: El motor detrás de las herramientas de análisis y visualización.
    • generators/: Herramientas para crear datasets de prueba con diferentes relaciones matemáticas.
    • loaders/: Funcionalidad para cargar modelos guardados.
  • pyceptron/enums: Enumeraciones para gestionar opciones internas de manera clara, como las opciones de recolección de datos del middleware durante el entrenamiento.

Esta estructura promueve la separación de responsabilidades, haciendo que cada parte del código sea más manejable y el proyecto sea altamente escalable para futuras características.

🤝 Contribuciones

¡Las contribuciones son bienvenidas! Si deseas contribuir, por favor sigue estos pasos:

  1. Haz un fork del repositorio.
  2. Crea una rama (git checkout -b feature/nueva-feature).
  3. Realiza tus cambios y haz un commit (git commit -am 'Añadir nueva-feature').
  4. Haz un push a la rama (git push origin feature/nueva-feature).
  5. Abre un Pull Request.

💡 Anatomía del perceptrón monocapa

Pronto un artículo científico será publicado que buscará sustentar la arquitectura del proyecto y evidenciará diferentes tipos de análisis en el comportamiento del perceptrón monocapa.

📝 Licencia

Este proyecto está licenciado bajo la Licencia MIT. Consulta el archivo LICENSE para más detalles.

📬 Contacto

Para cualquier pregunta o sugerencia, por favor abre un issue en el repositorio o contacta a gjimenezdeza@gmail.com.

¡Gracias por usar Pyceptron! 🚀

About

🧠 Una librería que estudia a profundidad perceptrones monocapa para el entrenamiento convencional de redes neuronales

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages