salmon

SALMON significa System for Automated Learning Modeling Operative Networks, y es un programa desarrollado en python para el entrenamiento de perceptrones multicapa, orientado tanto a docencia como a desarrollo de proyectos en este campo.

Primeros pasos

Instalación

  • Descomprimir el archivo salmon-xxx.zip.
  • Los usuarios de Windows deberán descargar también el runtime de python 2.7.x, disponible aquí,

Ejecutar el programa Salmon

  • En windows, hay que instalar previamente python y ejecutar salmon.pyo con doble click.
  • En MacOSX y en linux, abrir un terminal y teclear “python salmon.pyo”. Dependiendo de la distribución de linux puede ser necesario instalar el paquete “python-tk”.
  • Para ejecutar en modo paralelo hay que añadir la opción -p al ejecutar. En ese caso se utilizarán todos los núcleos disponibles repartiendo el conjunto de ejemplos aleatoriamente entre todos los núcleos disponibles en el sistema.

Formato de los datos de entrenamiento

Los datos de entrenamiento deben consignarse en un archivo de texto, con el siguiente formato

  • En la primera línea, se indica el número de entradas y el número de salidas. Lo normal es tener una salida por cada clase, en problemas de clasificación, y una salida por variable a ajustar, en problemas de ajuste.
  • Cada ejemplo de entrenamiento debe ir en una línea, es decir, los ejemplos se separan por \n.
  • Cada valor de entrada o salida (columnas) puede separarse por espacios o tabuladores. En primer lugar irán todas las entradas y después todas las salidas.
  • Se permiten comentarios en cualquier parte del archivo comenzando la línea con #
  • Si una línea comienza por @, los valores en esta línea se utilizarán como etiquetas para las entradas y las salidas cuando se dibuja la red.

Significado/Uso de las distintas opciones del programa

Nota: las opciones destacadas en rojo son avanzadas y pueden ignorarse en un uso normal del programa.

Controles

  1. ‘Samples’ ➜ carga los ejemplos con los que se va a entrenar la red.
  2. ‘Test’ ➜ carga los ejemplos con los que se va a probar la red.
  3. ‘Normalize’ ➜ normaliza los ejemplos adaptando las entradas al intervalo [-1,1] y las salidas al intervalo [0,1]. Graba los ejemplos normalizados en un nuevo archivo añadiendo al nombre “.norm”.
  4. Apply Norm.’ ➜ aplica una normalización previa a nuevos datos. Es útil para calcular el comportamiento de la red con nuevos ejemplos.
  5. Bootstrap‘ ➜ realiza una evaluación por el método bootstrap. Esta es una característica avanzada que permite estimar el error en fase de producción en caso de que se disponga de pocos ejemplos. Técnicamente realiza una evaluación por rotación con muestreo aleatorio. Las casillas indican el porcentaje (en tanto por uno) que se dedicará a test en cada rotación (puede ser 0 para repetir el entrenamiento N veces con el mismo conjunto de test) y el número de ensayos a realizar. La estimación se escribe por consola.
  6. ‘Init’ ➜ reinicia el entrenamiento (útil por ejemplo si detectamos un mínimo local durante el entrenamiento). También reordena aleatoriamente los ejemplos de entrenamiento.
  7. ‘Learn’ ➜ inicia el entrenamiento.
  8. BackProp | back-rnd | deep-2 | deep-all | deep-sep ➜ selecciona el tipo de entrenamiento. El normal es BackProp. La casilla de al lado indica el número de epochs de inicialización en entrenamientos con deep learning. En backprop indica a partir de qué epoch activar el autostop cuando crezca el error en test. Si se ejecuta SALMON en modo paralelo (opción -p) entonces en lugar de backprop utilizará RPROP.
  9. ‘Don’t stop at 100% ➜ inhibe la detención cuando todos los ejemplos están bien clasificados.
  10. ‘Learning Rate’ ➜ factor de aprendizaje para el entrenamiento.
  11. Momentum ➜ el momento a utilizar en el entrenamiento.
  12. ‘Target RMS’ ➜ representa el objetivo de error. Cuando la red llega al valor aquí establecido, se detiene el entrenamiento.
  13. Max. epoch‘ ➜ fuerza la detención del entrenamiento al llegar al número de epoch indicado. -1 permite infinitos epochs.
  14. ‘Trace Period’ ➜ cada cuántos ciclos (epoch) queremos que pinte valores y gráfica.
  15. Init Range’ ➜ indica el rango de valores para la inicialización de la red. 1.0 quiere decir [-0.5,0.5]. En cierto problemas pueden ser necesarios valores más elevados.
  16. ‘RMS to hit’ ➜ indica el umbral máximo para que un ejemplo sea considerado como bien clasificado. En problemas de ajuste indica la diferencia absoluta máxima que estamos dispuestos a admitir en un ejemplo.
  17. ‘Show network’  muestra un diagrama de la red en su estado actual.
  18. ‘Create’ ➜ crear una nueva red con la arquitectura definida en el recuadro de al lado. El cuadro junto a este botón sirve para introducir la arquitectura deseada en la red. Todas las capas utilizan la función sigmoidal como función de activación.
  19. ‘Explore’ ➜ muestra una la representación de las regiones de clasificación de la red, ubicando los ejemplos de entrenamiento y mostrando áreas donde se activan varias salidas.
  20. Analyze’ ➜ Genera por consola un informe de la red entrenada, incluyendo matriz de confusión entre clases y análisis de sensibilidad de las variables de entrada.
  21. ‘Load’ ➜ carga una red previamente almacenada.
  22. ‘Save’ ➜ graba la red actual.
  23. Export ➜ exporta la red actual en un formato de texto que puede ser importado por otros programas.
  24. Classify ➜ clasifica un conjunto de datos con la red actual, aplicando un archivo de normalización determinado.
  25. ‘About’ ➜ muestra créditos del programa.
  26. ‘Help’ ➜ abre esta ayuda.
  27. ‘Quit’ ➜ finaliza el programa.

Información presentada

  1. ‘RMS Error’ ➜ muestra el error RMS con respecto a los ejemplos de entrenamiento. Se utiliza el RMS normalizado dividiendo por el número de salidas de la red.
  2. ‘∆RMS x 100Kite’ ➜ variación esperada del error RMS en 100.000 iteraciones. El color indica si el entrenamiento progresa adecuadamente:
    1. Verde: muy bien.
    2. Negro: suficiente.
    3. Rojo: mal, recomendable detener.
  3. ‘RMS in test’ ➜ muestra el error cometido sobre el conjunto de test.
  4. ‘Hits’ ➜ muestra el porcentaje de ejemplos de entrenamiento bien clasificados.
  5. ‘Hits in test’ ➜ muestra el porcentaje de ejemplos de test bien clasificados. La primera cifra se refiere a los aciertos cuando se activa sólo la neurona de la clase correspondiente al ejemplo de test. La segunda cifra se refiere a los aciertos si se elige la clase de la neurona más activa, independientemente de su valor de activación.
  6. Train / Test‘ ➜ muestra el número de ejemplos de entrenamiento y test.
  7. ‘Epoch’ ➜ epochs de entrenamiento realizados.

Procedimiento para entrenar

  1. Click en ‘Load’ y elegir el archivo .pat para entrenar.
  2. Click en‘Test’ y elegir el archivo .pat para usar como test (opcional).
  3. Poner la arquitectura de la red, en el recuadro que aparece junto a la opción ‘Create’. Por ejemplo 2 2 1 para entrenar la función XOR.
  4. Click en ‘Create’.
  5. Ajustar los diferentes valores (alpha, Target RMS, RMS to be ok, etc.) o dejar los valores por defecto.
  6. Click en ‘Learn’.
  7. El entrenamiento puede pararse a mano dando click en la opción ‘Stop’ o automáticamente cuando se alcance el error mínimo definido o todos los ejemplos estén bien clasificados.

Interpretación de los valores de entrenamiento

salmon2-3

Colores de las líneas (nota: algunas tienen utilidad sólo si el problema es de clasificación o de modelado/ajuste).

  1. Blanco: error RMS cometido sobre el conjunto de entrenamiento.
  2. Verde: error RMS cometido sobre el conjunto de test.
  3. Amarillo: porcentaje de ejemplos de entrenamiento bien clasificados.
  4. Naranja: porcentaje de ejemplos de test bien clasificados, identificando la clase con la neurona correspondiente activa y todas las demás inactivas.
  5. Morado: porcentaje de ejemplos de test bien clasificados, identificando la clase con la neurona de máxima activación.
  6. Rojo: Target RMS en que se detendrá el entrenamiento.
  7. Gris: subdivisiones del error en pasos de 0.05 para el error, y en pasos de 10% para el porcentaje de aciertos. El valor máximo en la gráfica del error es 0.5, y en la gráfica de aciertos es del 100%.
  8. Salmón: desviación típica del RMS de test.

La opción “Analyze”escribe una serie de datos útiles por consola:

  1. Análisis de sensibilidad: cuánto incluye la variación de cada neurona de entrada en la salida de la red. Para que esta información sea fiable, los datos de entrenamiento deben haber sido normalizados.
  2. Matriz de confusión: cada elemento (i,j) indica cuántos elementos del conjunto de entrenamiento que pertenecían a la clase i han sido asignados a la clase j. Si hemos aprendido todos los ejemplos sólo debería haber elemento en la diagonal principal. Si hay conjunto de test se dará la matriz de confusión para el conjunto de test. Para la matriz de confusión se usa el criterio de máxima activación.

Uso de la exploración

En el problema del círculo para 2 entradas y 3 salidas; como se puede apreciar, esta representación variará dependiendo de las capas ocultas (ver Figura 1) así como si tenemos más o menos neuronas (ver Figura 2).

Output R ➜ pinta de rojo la activación de la neurona indicada (por defecto la 0)
Output G ➜ pinta de verde la activación de la neurona indicada (por defecto la 1)
Output B ➜ pinta de azul a activación de la neurona indicada (por defecto la 2)

Si se activan dos salidas se suman los valores RGB. En el ejemplo podemos ver regiones en amarillo, en las que se activan simultaneamente las neuronas 0 y 1.

region

Uso de la vista de red

La vista de red se activa en la opción ‘Show network’. Esta opción dibuja un esquema de la red y ofrece la posibilidad de modificar las entradas de la red (haciendo click con el ratón encima de la neurona a modificar y desplazando el puntero) y observar en tiempo real la salida que se obtiene para las entradas.

seno-net2

Comments are closed.