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

Этой темой является часть рабочего процесса проекта, описанного в Рабочем процессе для Проекта Нейронной сети.

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

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

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