2010-07-01 29 views
13

Básicamente conozco el concepto de una red neuronal y lo que es, pero no puedo entender cómo se ve cuando lo codifica o cómo se almacenan los datos, pasé por muchos tutoriales que encontré en google pero couldn No encuentras ningún fragmento de código, solo conceptos y algoritmos.Redes neuronales, ¿cómo se ven en la codificación?

¿Alguien puede darme un fragmento de código de una red neuronal simple algo así como "Hola mundo!"?

+1

En qué idioma? –

+0

Yo diría etiquetarlo con lenguaje independiente. –

+0

Posible duplicado de [Aclaración en una red neuronal que reproduce Snake] (http://stackoverflow.com/questions/42099814/clarification-on-a-neural-net-that-plays-snake) – devinbost

Respuesta

7

Lo que necesitas principalmente es un objeto que represente una sola neurona con las asociaciones correosas con otras neuronas (que representan sinapsis) y sus pesos.

Una sola neurona en un lenguaje de programación orientada a objetos típica será algo así como

class Synapse 
{ 
    Neuron sending; 
    Neuron receiving; 
    float weight; 
} 

class Neuron 
{ 
    ArrayList<Synapse> toSynapses; 
    ArrayList<Synapse> fromSynapses; 

    Function threshold; 
} 

donde threshold representa la función que se aplica sobre la suma ponderada de las entradas para ver si la neurona activa en sí y se propaga la señal.

Por supuesto, entonces necesitará el algoritmo específico para de alimentación hacia adelante la red o de back- propagar el aprendizaje que operará en esta estructura de datos.

Lo más simple que podría comenzar a implementar sería un simple perceptron, puede encontrar algunas informaciones here.

+0

Hay muchos otros tipos de redes neuronales, por supuesto, que un simple peso y tipo de umbral. –

+0

Por supuesto que sí, pero estamos hablando de partir de alguna parte ... y generalmente se parte de algo simple, luego otros tipos de redes neuronales generalmente se basan en la escalabilidad de elementos simples (como el cerebro real) – Jack

4

AI-Junkie tiene un gran tutorial on (A)NNs y tienen the code posted there.

Aquí es una neurona (de ai-adicta):

struct SNeuron 
{ 

    //the number of inputs into the neuron 
    int m_NumInputs; 

    //the weights for each input 
    vector<double> m_vecWeight; 

    //ctor 
    SNeuron(int NumInputs); 

}; 

Aquí es una capa de neuronas (ai-junkie):

struct SNeuronLayer 
{ 
    //the number of neurons in this layer 
    int m_NumNeurons; 

    //the layer of neurons 
    vector<SNeuron> m_vecNeurons; 

    SNeuronLayer(int NumNeurons, int NumInputsPerNeuron); 
}; 

Como he mencionado antes ... se puede encontrar todo el código con el tutorial ai-junkie (A) NN.

+0

Wow ese sitio es feo ... ¡pero útil! –

+1

@Justin, la belleza está en el ojo del espectador;) – Kiril

+2

O titular de la cerveza, según sea el caso. –

7

Dijiste que ya estás familiarizado con las redes neuronales, pero dado que hay muchos tipos diferentes de redes neuronales de diferente complejidad (convolucionales, hebbian, kohonen, etc.), repasaremos un simple feed-forward red neuronal nuevamente, solo para asegurarnos de que estamos en la misma página.

Una red neuronal básico consta de las siguientes cosas

  1. neuronas
    1. neurona de entrada (s)
    2. Ocultos Las neuronas (opcional)
    3. salida de la neurona (s)
  2. Enlaces entre neuronas (a veces llamadas sinapsis en analogía a la biología)
  3. una función de activación

Las neuronas tienen un valor activación. Cuando evalúa una red, la activación de los nodos de entrada se establece en la entrada real.Los enlaces de los nodos de entrada conducen a nodos más cercanos a la salida, generalmente a una o más capas de nodos ocultos. En cada neurona, la activación de entrada se procesa utilizando una función de activación . Se pueden usar diferentes funciones de activación, y algunas veces incluso varían dentro de las neuronas de una sola red.

La función de activación procesa la activación de la neurona en su salida. Los primeros experimentos usualmente usaban una función de umbral simple (es decir, activación> 0,5? 1: 0), hoy en día se usa a menudo un Sigmoid function.

La salida de la función de activación se propaga a través de los enlaces a los siguientes nodos. Cada enlace tiene un peso asociado que se aplica a su entrada.

Finalmente, la salida de la red se extrae de la activación de la (s) neurona (s) de salida.

He creado un ejemplo muy simple (y muy detallado ...) here. Está escrito en Ruby y computa Y, que es casi tan simple como se pone.

Una pregunta mucho más complicada es cómo crear realmente una red que hace algo útil. La red trivial del ejemplo se creó manualmente, pero eso no es factible con problemas más complejos. Hay dos enfoques que conozco, siendo el más común el backpropagation. Menos utilizado es neuroevolution, donde los pesos de los enlaces se determinan usando un algoritmo genético.

1

Esta guía is the NUPIC programmer's. NuPIC es el marco para poner en práctica su teoría (HTM) en base a la estructura y funcionamiento del neocórtex

Ésta es la forma en que definir HTM

tecnología HTM tiene el potencial para resolver muchos problemas difíciles en el aprendizaje de máquina, inferencia y predicción. Algunas de las áreas de aplicación que exploramos con nuestros clientes incluyen reconocer objetos en imágenes, reconocer comportamientos en videos, identificar el género de un hablante, predecir patrones de tráfico, hacer reconocimiento óptico de caracteres en texto desordenado, evaluar imágenes médicas y predecir patrones de clics En la red.

esto es una red simple, con nument 1,5

from nupic.network import * 
from nupic.network.simpledatainterface import WideDataInterface 
def TheNet(): 
    net=SimpleHTM(
      levelParams=[ 
      { # Level 0 
      }, 
      { # Level 1 
       'levelSize': 8, 'bottomUpOut': 8, 
       'spatialPoolerAlgorithm': 'gaussian', 
       'sigma': 0.4, 'maxDistance': 0.05, 
       'symmetricTime': True, 'transitionMemory': 1, 
       'topNeighbors': 2, 'maxGroupSize': 1024, 
       'temporalPoolerAlgorithm': 'sumProp' 
      }, 
      { # Level 2 
       'levelSize': 4, 'bottomUpOut': 4, 
       'spatialPoolerAlgorithm': 'product', 
       'symmetricTime': True, 'transitionMemory': 1, 
       'topNeighbors': 2, 'maxGroupSize': 1024, 
       'temporalPoolerAlgorithm': 'sumProp' 
      }, 
      { # Level 3 
       'levelSize': 1, 
       'spatialPoolerAlgorithm': 'product', 
       'mapperAlgorithm': 'sumProp' 
      },],) 

    Data=WideDataInterface('Datos/__Categorias__.txt', 'Datos/Datos_Entrenamiento%d.txt', numDataFiles = 8)# 

    net.createNetwork(Data) 
    net.train(Datos) 

if __name__ == '__main__': 
    print "Creating HTM Net..." 
    TheNet() 
Cuestiones relacionadas