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.
Puedes instalar la librería usando el comando
pip install pyceptronO puedes usar poetry con
poetry add pyceptronLa 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}")Pyceptron va más allá de un simple train() y predict(). Incluye herramientas potentes para que entiendas a fondo el proceso de aprendizaje:
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 YEstos 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.
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.
- 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.
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.
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))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 detrainers/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 delayer.pyysequential.pyanticipa 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.
¡Las contribuciones son bienvenidas! Si deseas contribuir, por favor sigue estos pasos:
- Haz un fork del repositorio.
- Crea una rama (
git checkout -b feature/nueva-feature). - Realiza tus cambios y haz un commit (
git commit -am 'Añadir nueva-feature'). - Haz un push a la rama (
git push origin feature/nueva-feature). - Abre un Pull Request.
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.
Este proyecto está licenciado bajo la Licencia MIT. Consulta el archivo LICENSE para más detalles.
Para cualquier pregunta o sugerencia, por favor abre un issue en el repositorio o contacta a gjimenezdeza@gmail.com.
¡Gracias por usar Pyceptron! 🚀







