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