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