Создайте объект нейронной сети

Эта тема является частью рабочего процесса проекта, описанного в Рабочем процессе для Neural Network Design.

Самый легкий способ создать нейронную сеть - использовать одну из функций создания сети. Чтобы выяснить, как это делается, можно создать простую, 2-х слойную сеть прямого распространения, используя команду 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)

Это отображение представляет собой обзор сетевого объекта, который используется для хранения всей информации, определяющей нейронную сеть. Здесь много деталей, но есть несколько ключевых разделов, которые могут помочь вам увидеть, как организован сетевой объект.

В разделе размерностей хранится общая структура сети. Здесь можно увидеть, что существует один вход в сеть (хотя один вход может быть вектором, содержащим много элементов), один выход сети и два слоя.

В разделе соединений хранятся соединения между компонентами сети. Например, существует смещение, соединенное с каждым слоем, вход соединен с слоем 1, и выход исходит из слоя 2. Можно также увидеть, что слой 1 соединяется со слоем 2. (Строки net.layerConnect представляет целевой слой, а столбцы - исходный слой. Единица в этой матрице указывает на соединение, а нулевая - на отсутствие соединения. В данном примере существует один в элементе 2,1 матрицы.)

Ключевыми подобъектами сетевого объекта являются inputs, layers, outputs, biases, inputWeights, и layerWeights. Просмотрите layers подобъект для первого слоя с командой

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)

Количество нейронов в слое определяется его size свойство. В этом случае слой имеет 10 нейронов, что является размером по умолчанию для feedforwardnet команда. Функция входа сети netsum (суммирование), и передаточная функция является tansig. Если требуется изменить передаточную функцию на logsig, для примера можно выполнить команду:

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

Чтобы просмотреть layerWeights подобъект для веса между слоем 1 и слоем 2, используйте команду:

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)

Весовая функция dotprod, который представляет стандартное матричное умножение (точечный продукт). Обратите внимание, что размер этого слоя составляет 0 на 10. Причина того, что у нас нет строк, заключается в том, что сеть еще не настроена для определенного набора данных. Количество выхода нейронов равно количеству строк в целевом векторе. В процессе строения вы предоставите сети пример входов и целей, и затем может быть назначено количество выходных нейронов.

Это дает вам некоторое представление о том, как организован сетевой объект. Для многих приложений не нужно будет беспокоиться о внесении изменений непосредственно в сетевой объект, так как об этом заботятся функции создания сети. Обычно, только когда необходимо переопределить системные значения по умолчанию, необходимо получить прямой доступ к сетевому объекту. Другие темы покажут, как это делается для конкретных сетей и методов обучения.

Чтобы исследовать сетевой объект более подробно, можно обнаружить, что списки объектов, такие как показанный выше, содержат ссылки на помощь в каждом подобъекте. Щелкните ссылки, и можно выборочно исследовать интересующие вас части объекта.