Main Content

Crear un objeto de red neuronal

Este tema forma parte del flujo de trabajo del diseño, que se describe en Flujo de trabajo para el diseño de redes neuronales.

La manera más fácil de crear una red neuronal es usar una de las funciones de creación de redes. Para saber cómo se hace, puede crear una red prealimentada de dos capas simple mediante el comando feedforwardnet:

net = feedforwardnet
net =

Neural Network

              name: 'Feed-Forward Neural Network'
          userdata: (your custom info)

    dimensions:

         numInputs: 1
         numLayers: 2
        numOutputs: 1
    numInputDelays: 0
    numLayerDelays: 0
 numFeedbackDelays: 0
 numWeightElements: 10
        sampleTime: 1

    connections:

       biasConnect: [1; 1]
      inputConnect: [1; 0]
      layerConnect: [0 0; 1 0]
     outputConnect: [0 1]

    subobjects:

            inputs: {1x1 cell array of 1 input}
            layers: {2x1 cell array of 2 layers}
           outputs: {1x2 cell array of 1 output}
            biases: {2x1 cell array of 2 biases}
      inputWeights: {2x1 cell array of 1 weight}
      layerWeights: {2x2 cell array of 1 weight}

    functions:

          adaptFcn: 'adaptwb'
        adaptParam: (none)
          derivFcn: 'defaultderiv'
         divideFcn: 'dividerand'
       divideParam: .trainRatio, .valRatio, .testRatio
        divideMode: 'sample'
           initFcn: 'initlay'
        performFcn: 'mse'
      performParam: .regularization, .normalization
          plotFcns: {'plotperform', plottrainstate, ploterrhist,
                    plotregression}
        plotParams: {1x4 cell array of 4 params}
          trainFcn: 'trainlm'
        trainParam: .showWindow, .showCommandLine, .show, .epochs,
                    .time, .goal, .min_grad, .max_fail, .mu, .mu_dec,
                    .mu_inc, .mu_max

    weight and bias values:

                IW: {2x1 cell} containing 1 input weight matrix
                LW: {2x2 cell} containing 1 layer weight matrix
                 b: {2x1 cell} containing 2 bias vectors

    methods:

             adapt: Learn while in continuous use
         configure: Configure inputs & outputs
            gensim: Generate Simulink model
              init: Initialize weights & biases
           perform: Calculate performance
               sim: Evaluate network outputs given inputs
             train: Train network with examples
              view: View diagram
       unconfigure: Unconfigure inputs & outputs

    evaluate:       outputs = net(inputs)

Esta visualización es una visión general del objeto de red, que se usa para almacenar toda la información que define una red neuronal. Aquí se incluye mucha información, pero hay algunas secciones clave que pueden ayudarle a conocer cómo se organiza el objeto de red.

La sección de dimensiones almacena la estructural general de la red. Como puede comprobar, hay una entrada a la red (aunque podría tratarse de un vector que contiene muchos elementos), una salida de red y dos capas.

La sección de conexiones almacena las conexiones entre los componentes de la red. Por ejemplo, hay un sesgo conectado a cada capa, la entrada se conecta a la capa 1 y la salida proviene de la capa 2. Además, la capa 1 está conectada a la capa 2. (Las filas de net.layerConnect representan la capa de destino y las columnas representan la capa de origen. En esta matriz, los unos indican una conexión y los ceros indican que no hay conexión. Por ejemplo, hay un solo uno en el elemento 2,1 de la matriz).

Los subobjetos principales del objeto de red son inputs, layers, outputs, biases, inputWeights y layerWeights. Consulte el subobjeto layers de la primera capa con el comando

net.layers{1}
Neural Network Layer

              name: 'Hidden'
        dimensions: 10
       distanceFcn: (none)
     distanceParam: (none)
         distances: []
           initFcn: 'initnw'
       netInputFcn: 'netsum'
     netInputParam: (none)
         positions: []
             range: [10x2 double]
              size: 10
       topologyFcn: (none)
       transferFcn: 'tansig'
     transferParam: (none)
          userdata: (your custom info)

La propiedad size es la que define el número de neuronas de una capa. En este caso, la capa tiene 10 neuronas, que es el tamaño predeterminado del comando feedforwardnet. La función de entrada de red es netsum (suma) y la función de transferencia es tansig. Si, por ejemplo, quisiera cambiar la función de transferencia a logsig, podría ejecutar el siguiente comando:

net.layers{1}.transferFcn = 'logsig';

Para ver el subobjeto layerWeights, correspondiente al peso entre la capa 1 y la capa 2, use el siguiente comando:

net.layerWeights{2,1}
Neural Network Weight

            delays: 0
           initFcn: (none)
        initConfig: .inputSize
             learn: true
          learnFcn: 'learngdm'
        learnParam: .lr, .mc
              size: [0 10]
         weightFcn: 'dotprod'
       weightParam: (none)
          userdata: (your custom info)

La función de peso es dotprod, que representa la multiplicación de matriz estándar (producto de puntos). Tenga en cuenta que el tamaño del peso de esta capa es de 0 por 10. El motivo por el que tenemos cero filas es porque la red aún no se ha configurado para un conjunto de datos concreto. El número de neuronas de salida es igual al número de filas de su vector objetivo. Durante el proceso de configuración, proporcionará a la red entradas y objetivos de ejemplo y, a continuación, podrá asignar el número de neuronas de salida.

Esto le puede dar una idea de cómo se organiza el objeto de red. Para muchas aplicaciones, no tendrá que preocuparse de hacer cambios directamente en el objeto de red, ya que de eso se encargan las funciones de creación de red. Solo deberá acceder directamente al objeto de red cuando quiera anular los valores predeterminados del sistema. En otros artículos se le mostrará cómo hacerlo en redes y métodos de entrenamiento concretos.

Para obtener más información sobre el objeto de red, verá que las listas de objetos, como la que se muestra más arriba, contienen enlaces con información sobre cada subobjeto. Haga clic en los enlaces para consultar información adicional sobre las partes del objeto que más le interesen.