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