exponenta event banner

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

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

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

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

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