2011-02-24 15 views
16

He implementado un perceptrón multicapa para predecir el pecado de los vectores de entrada. Los vectores consisten en cuatro -1,0,1 elegidos al azar y un sesgo establecido en 1. La red debe predecir el pecado de la suma de los contenidos de los vectores.La red neuronal multicapa no predecirá los valores negativos

por ejemplo, Entrada = < 0,1, -1,0,1> salida = Sin (0 + 1 + (- 1) + 0 + 1)

El problema que estoy teniendo es que la red se nunca pronostiques un valor negativo y muchos de los valores de pecado de los vectores son negativos. Predice perfectamente todas las salidas positivas o cero. Supongo que hay un problema con la actualización de los pesos, que se actualizan después de cada época. Alguien ha encontrado este problema con NN antes? ¡¡Cualquier ayuda en absoluto sería grande!!

Nota: La red tiene 5 entradas, 6 unidades ocultas en 1 capa oculta y 1 salida. Estoy usando una función sigmoidea en las activaciones ocultas y capas de salida, y he probado toneladas de velocidad de aprendizaje (actualmente 0.1);

Respuesta

11

Llevaba mucho tiempo desde que examiné perceptrones multicapa, por lo tanto, tome esto con un grano de sal.

Actualizaría su dominio problemático al dominio [0,1] en lugar de [-1,1]. Si se echa un vistazo en el gráfico de la función logística:

enter image description here

Se genera valores entre [0,1]. No espero que produzca resultados negativos. Podría estar equivocado, duro.

EDITAR:

en realidad se puede extender la función logística a su dominio del problema. Use los parámetros A y K de configuración generalized logistic curve en los límites de su dominio.

Otra opción es la tangente hiperbólica, que va desde [-1, + 1] y no tiene constantes para configurar.

+0

Muchas gracias, ¡eso tiene sentido! Tengo que buscar una función que pueda permitir valores negativos. Desafortunadamente no puedo cambiar el dominio del problema ya que es una tarea para la universidad. ¡Gracias de nuevo! –

+0

@B. Bowles actualizó mi respuesta con una posible solución. –

+0

Eso es genial, voy a intentarlo ahora! Hay muchos parámetros en esa fórmula que no se aplican a esta red, y las matemáticas definitivamente no son mi punto fuerte. Sin embargo, ciertamente parece ser el camino a seguir. –

3

Hay muchos tipos diferentes de funciones de activación, muchas de las cuales están diseñadas para generar un valor de 0 a 1. Si está utilizando una función que solo produce entre 0 y 1, intente ajustarla para que salga entre 1 y -1. Si estuviera usando FANN, le diría que use la función de activación FANN_SIGMOID_SYMMETRIC.

+0

desafortunadamente no puedo hacer uso de ninguna libs para esta tarea, ¡solo! Sin embargo, eché un vistazo a cómo funciona eso, muchas gracias –

Cuestiones relacionadas