neural-network - tutorial - tipos de redes neuronales
Redes neuronales-valores de entrada (6)
Cuando se trata de datos multidimensionales, creo que se dice que una red neuronal de dos capas ofrece mejores resultados.
En tu caso:
R[0..1] => (N1)----/
/
G[0..1] => (N2)-----(N4) => Result[0..1]
/
B[0..1] => (N3)----/
Como puede ver, la neurona N4 puede manejar 3 entradas.
El intervalo [0..1] es una convención pero es una buena imo. De esa manera, puede codificar fácilmente un conjunto de clases de neuronas genéricas que pueden tomar un número arbitrario de entradas (tuve clases de C ++ de plantilla con el número de entradas como parámetro de plantilla personalmente). Así que codificas la lógica de tus neuronas una vez, luego juegas con la estructura de la red y / o combinaciones de funciones dentro de tus neuronas.
Tengo una pregunta que puede ser trivial, pero no se describe en ningún lugar que haya visto. Estoy estudiando redes neuronales y por todos lados, veo que hay algo de teoría y algún ejemplo trivial con algunos 0 y 1 como entrada. Me pregunto: ¿tengo que poner solo un valor como valor de entrada para una neurona, o puede ser un vector de, digamos, 3 valores (color RGB por ejemplo)?
En general, la entrada para una sola neurona es un valor entre 0 y 1. Esa convención no es solo por la facilidad de implementación, sino porque la normalización de los valores de entrada en el mismo rango garantiza que cada entrada tenga una ponderación similar. (Si tiene algunas imágenes con color de 8 bits con valores de píxel entre 0 y 7 y algunas imágenes con color de 16 bits con valores de píxel entre 0 y 255, es probable que no quiera favorecer las imágenes de color de 24 bits simplemente porque los valores numéricos son de manera similar, probablemente querrá que sus imágenes tengan las mismas dimensiones.)
En cuanto al uso de valores de píxel como entradas, es muy común tratar de reunir una representación de la imagen de mayor nivel que sus píxeles ( más información ). Por ejemplo, dada una imagen en escala de grises de 5 x 5 (normalizada):
[1 1 1 1 1]
[0 0 1 0 0]
[0 0 1 0 0]
[0 0 1 0 0]
[0 0 1 0 0]
Podríamos usar las siguientes matrices de características para ayudar a descubrir las características horizontales, verticales y diagonales de las imágenes. Ver la detección de la cara de python haar para más información.
[1 1] [0 0] [1 0] [0 1] [1 0], [0 1]
[0 0], [1 1], [1 0], [0 1], [0 1], [1 0]
Para crear el vector de entrada, v , para esta imagen, tome la primera matriz de entidades de 2x2 y "aplíquela" con la multiplicación de elementos a la primera posición en la imagen. Aplicando
[1 1] (the first feature matrix) to [1 1] (the first position in the image)
[0 0] [0 0]
resultará en 2 porque 1 * 1 + 1 * 1 + 0 * 0 + 0 * 0 = 2. Agregue 2 a la parte posterior del vector de entrada para esta imagen. Luego mueva esta matriz de características a la siguiente posición, una a la derecha, y aplíquela nuevamente, agregando el resultado al vector de entrada. Haga esto repetidamente para cada posición de la matriz de entidades y para cada una de las matrices de características. Esto construirá su vector de entrada para una sola imagen. Asegúrate de construir los vectores en el mismo orden para cada imagen.
En este caso, la imagen es en blanco y negro, pero con valores RGB, puede extender el algoritmo para hacer el mismo cálculo pero agregar 3 valores al vector de entrada para cada píxel, uno para cada color. Esto debería proporcionarle un vector de entrada por imagen y una entrada única para cada neurona. Los vectores deberán normalizarse antes de ejecutarse a través de la red.
Las respuestas anteriores son técnicamente correctas, pero no explique la simple verdad: nunca hay una situación en la que deba dar un vector de números a una sola neurona.
Desde un punto de vista práctico, esto se debe a que (como ha demostrado una de las soluciones anteriores) solo puede tener una neurona para cada número en un vector y luego hacer que todas sean la entrada de una sola neurona. Esto debería lograr el comportamiento deseado después del entrenamiento, ya que la neurona de la segunda capa puede hacer uso de todo el vector.
Desde un punto de vista matemático, hay un teorema fundamental de la teoría de la codificación que establece que cualquier vector de números se puede representar como un solo número. Por lo tanto, si realmente no desea una capa extra de neuronas, simplemente podría codificar los valores RGB en un solo número e ingresarlo a la neurona. Sin embargo, esta función de codificación probablemente dificultaría la mayoría de los problemas de aprendizaje, por lo que dudo que esta solución valga la pena en la mayoría de los casos.
Para resumir: las redes neuronales artificiales se usan sin dar un vector a una unidad de entrada, pero no pierden poder computacional debido a esto.
Normalmente, una sola neurona toma como entrada múltiples números reales y genera un número real, que normalmente se calcula aplicando la función sigmoidea a la suma de los números reales (escalados, y luego más o menos un desplazamiento constante).
Si desea colocar, digamos, dos vectores RGB (2 x 3 reales), debe decidir cómo desea combinar los valores. Si sumas todos los elementos y aplicas la función sigmoide, es equivalente a obtener seis reales "planos". Por otro lado, si procesa los elementos R, luego los elementos G y los elementos B, todos individualmente (por ejemplo, sumar o restar los pares), tiene en la práctica tres neuronas independientes.
Entonces, en resumen, no, una sola neurona no toma valores vectoriales.
Puede ser lo que quieras, siempre y cuando escribas tu función interna en consecuencia.
Los ejemplos que mencionas usan [0; 1] como su dominio, pero puedes usar R, R² o lo que quieras, siempre que la función que uses en tus neuronas esté definida en este dominio.
En su caso, puede definir sus funciones en R3 para permitir el manejo de valores RGB
Un ejemplo trivial: use (x1, y1, z1), (x2, y2, z2) -> (ax1 + x2, por1 + y2, cz1 + z2) como su función para transformar dos colores en uno, siendo ab y c Coefs de aprendizaje, que determinará durante la fase de aprendizaje.
Información muy detallada (incluyendo la respuesta a su pregunta) está disponible en Wikipedia .
Use la longitud de onda de la luz normalizada al espectro visible como entrada.
Hay algunas ecuaciones aproximadas en la red. Busque la conversión de RGB a longitud de onda o use el modelo de color HSL y extraiga el componente Hue y posiblemente use también Saturación y Luminosidad. Bien...