@devilogic
2016-10-27T01:13:26.000000Z
字数 7215
阅读 2607
matlab
创建一个神经网络。
net = networknet = network(numInputs,numLayers,biasConnect,inputConnect,layerConnect,outputConnect)
键入help network/network
network创建一个新的自定义的网络。
net = network没有任何参数创建一个没有输入,层与输出的网络。
net = network(numInputs,numLayers,biasConnect,inputConnect,layerConnect,outputConnect)
| 参数 | 说明 |
|---|---|
numInputs |
输入层数量,默认0 |
numLayers |
隐藏层数量,默认0 |
biasConnect |
numLayers行 1列 布尔值向量 |
inputConnect |
numLayers行 numInputs列 布尔值矩阵 |
layerConnect |
numLayers行 numLayers列 布尔值矩阵 |
outputConnect |
1行 numLayers列 布尔值向量 |
返回一个神经网络
| 属性名 | 说明 | 注释 |
|---|---|---|
net.numInputs |
0或者一个正整数 | 输入个数 |
net.numLayers |
0或者一个正整数 | 隐藏层个数 |
net.biasConnect |
numLayer行 1列 布尔值向量 |
如果net.biasConnect(i)是1,那么层i开启偏置值,并且通过net.biases{i}是一个结构来描述偏置 |
net.inputConnect |
numLayers行 numInputs 列布尔向量 |
如果net.inputConnect(i,j)是1,那么层i有从输入层j的一个权重,并且net.inputWeights{i,j}是一个结构来描述权重 |
net.layerConnect |
numLayers行 numLayers列 布尔值矩阵 |
如果net.layerConnect(i,j)是1,那么层i有从输入层j的一个权重,并且net.layerWeights{i,j}是一个结构来描述权重 |
net.outputConnect |
1行 numLayers列 布尔值向量 |
如果net.outputConnect(i)是1,那么网络有一个输出从层i,并且net.outputs{i}做为一个结构来描述输出 |
net.numOutputs |
0或者一个正整数(只读) | 网络输出数量,依赖net.outputConnect |
net.numInputDelays |
0或者一个正整数(只读) | 最大输入延时,根据所有net.inputWeights{i,j}.delays |
net.numLayerDelays |
0或者一个正整数(只读) | 最大输入延时,根据所有net.layerWeights{i,j}.delays |
| 参数 | 说明 | 注释 |
|---|---|---|
net.inputs |
numInputs行 1列 cell队列 |
net.inputs{i}是一个结构描述输入i |
net.layers |
numLayers行 1列 cell队列 |
net.layers{i}是一个结构描述层i |
net.biases |
numLayers行 1列 cell队列 |
如果net.biasConnect(i)是1,那么net.biases{i}是一个结构来描述层i的偏置值 |
net.inputWeights |
numLayers行 numInputs列 cell队列 |
如果net.inputConnect(i,j)是1,那么net.inputWeights{i,j}是一个结构来描述从输入层j到层i的权重 |
net.layerWeights |
numLayers行 numLayers列 cell队列 |
如果net.layerConnect{i,j}值为1,那么net.layerWeight{i,j}表示从层j到层i的权值结构 |
net.outputs |
1行 numLayers列 cell队列 |
如果net.outputConnect(i)是1,那么net.outputs{i}定义了从层i的输出 |
| 名称 | 说明 |
|---|---|
net.adaptFcn |
网络适应性函数名或者`` |
net.initFcn |
网络初始化函数名或者`` |
net.performFcn |
网路性能评估函数名或者`` |
net.trainFcn |
网络训练函数名或者`` |
| 名称 | 说明 |
|---|---|
net.adaptParam |
网络适应性函数参数 |
net.initParam |
网络初始化函数参数 |
net.performParam |
网路性能评估函数参数 |
net.trainParam |
网络训练函数参数 |
| 名称 | 说明 |
|---|---|
net.IW |
numLayers行 numInputs列 输入权重cell队列 |
net.LW |
numLayers行 numLayers列 层权重cell队列 |
net.b |
numLayers行 1列 偏置值 cell队列 |
net.userdata随意保存用户自定义信息。
net = networknet.numInputs = 1net.numLayers = 2
也可以使用net = network(1,2)来创建。
创建一个单输入,两隐藏层,前向网络。仅第一层有偏置。一个输入权重链接到层1从输入层1.一个层权重链接从层1到层2.层2是网络输出层并且有一个目标。
net = network(1,2,[1;0],[1; 0],[0 0; 1 0],[0 1])
可以使用下列命令显示子对象的属性:
net.inputs{1}net.layers{1}, net.layers{2}net.biases{1}net.inputWeights{1,1}, net.layerWeights{2,1}net.outputs{2}
可以通过下列代码修改子结构的属性,例如:
net.layers{1}.transferFcn = 'tansig';net.layers{2}.transferFcn = 'logsig';
也可以浏览去权重值,例如从输入层1到层1的权重。
net.IW{1,1}
从层1到层2的权重值:
net.LW{2,1}
层1的偏置值
net.b{1}
修改输入单元1为两个元素,并且设置每个元素的值范围:
net.inputs{1}.rang = [0 1; -1 1];
对其进行仿真
p = [0.5; -0.1];y = sim(net,p)
更多知识
function net = network(varargin)%NETWORK 创建一个自定义的神经网络.%% <a href="matlab:doc network">network</a> without arguments returns a new neural network with no% inputs, layers or outputs.%% <a href="matlab:doc network">network</a>(numInputs,numLayers,biasConnect,inputConnect,layerConnect,% outputConnect) takes additional optional arguments and returns a neural% network with the following properties defined:% numInputs - Number of inputs, 0.% numLayers - Number of layers, 0.% biasConnect - numLayers-by-1 Boolean vector, zeros.% inputConnect - numLayers-by-numInputs Boolean matrix, zeros.% layerConnect - numLayers-by-numLayers Boolean matrix, zeros.% outputConnect - 1-by-numLayers Boolean vector, zeros.%% 以下是一个一输入两层的网络被创建.%% net = <a href="matlab:doc network">network</a>(1,2)%% 以下代码将创建一个一输入,二层,前馈网络.% 仅仅第一层需要拥有一个bias.输入权重将链接层1. 层1的权重将链接层2% 层2是输出层.%% net = <a href="matlab:doc network">network</a>(1,2,[1;0],[1; 0],[0 0; 1 0],[0 1])%% 其他的子结构属性:%% net.<a href="matlab:doc nnproperty.net_inputs">inputs</a>{1}% net.<a href="matlab:doc nnproperty.net_layers">layers</a>{1}, net.<a href="matlab:doc nnproperty.net_layers">layers</a>{2}% net.<a href="matlab:doc nnproperty.net_biases">biases</a>{1}% net.<a href="matlab:doc nnproperty.net_inputWeights">inputWeights</a>{1,1}, net.<a href="matlab:doc nnproperty.net_layerWeights">layerWeights</a>{2,1}% net.<a href="matlab:doc nnproperty.net_outputs">outputs</a>{2}%% 我们能获取权值矩阵与偏导向量:%% net.<a href="matlab:doc nnproperty.net_IW">IW</a>{1,1}, net.<a href="matlab:doc nnproperty.net_IW">IW</a>{2,1}, net.<a href="matlab:doc nnproperty.net_b">b</a>{1}%% 我们能改变这些任意的子对象的属性。我们能同时改变两层的传输函数(激励函数):%% net.<a href="matlab:doc nnproperty.net_layers">layers</a>{1}.<a href="matlab:doc nnproperty.layer_transferFcn">transferFcn</a> = 'tansig';% net.<a href="matlab:doc nnproperty.net_layers">layers</a>{2}.<a href="matlab:doc nnproperty.layer_transferFcn">transferFcn</a> = 'logsig';%% 我们能改变一个输入元素为两个,通过设定每个元素的范围:%% net.<a href="matlab:doc nnproperty.net_inputs">inputs</a>{1}.<a href="matlab:doc nnproperty.input_range">range</a> = [0 1; -1 1];%% 接下来我能仿真一个两输入元素向量的网络:%% p = [0.5; -0.1];% y = net(p)%% See also INIT, REVERT, SIM, ADAPT, TRAIN, VIEW.% Mark Beale, 11-31-97% Copyright 1992-2012 The MathWorks, Inc.if (nargin == 1)in1 = varargin{1};% 如果输入的是结构,则直接转成network类if isa(in1,'struct')net = class(in1,'network');% 如果参数已经是network类则直接赋值elseif isa(in1,'network')net = in1;else% 单个参数构建一个网络net = new_network(in1);endelse% 多参数构建一个新的网络net = new_network(varargin{:});endfunction net = new_network(numInputs,numLayers,biasConnect,inputConnect, ...layerConnect,outputConnect,ignore) %#ok<INUSD>% Defaultsif nargin < 1, numInputs = 0; endif nargin < 2, numLayers = 0; endif nargin < 3, biasConnect = false(numLayers,1); endif nargin < 4, inputConnect = false(numLayers,numInputs); endif nargin < 5, layerConnect = false(numLayers,numLayers); endif nargin < 6, outputConnect = false(1,numLayers); end% Checking% TODO - Error checking% NETWORK PROPERTIES% Note: "Param" and "Config" properties in NETWORK and subobject% (nnetInput, nnetOutput, nnetLayer, nnetWeight, nnetBias) properties must% always occur directly after their associated "Fcn" properties for% NN_STRUCT2OBJECT conversions to work properly.% Versionnet.version = '8';% Basicsnet.name = 'Custom Neural Network';% 在下一次升级中可能会删除% BACKWARDS COMPATIBILITY TO 8.0% Use TRAIN(net,x,t,'Reduction',num) notation instead.net.efficiency.cacheDelayedInputs = true;net.efficiency.flattenTime = true;net.efficiency.memoryReduction = 1;% User Datanet.userdata.note = 'Put your custom network information here.';% Sizesnet.numInputs = 0;net.numLayers = 0;net.numOutputs = 0;net.numInputDelays = 0;net.numLayerDelays = 0;net.numFeedbackDelays = 0;net.numWeightElements = 0;net.sampleTime = 1;% Connectionsnet.biasConnect = false(0,1);net.inputConnect = false(0,0);net.layerConnect = false(0,0);net.outputConnect = false(1,0);% 子对象net.inputs = cell(0,1);net.layers = cell(0,1);net.biases = cell(0,1);net.outputs = cell(1,0);net.inputWeights = cell(0,0);net.layerWeights = cell(0,0);% 函数和参数net.adaptFcn = '';net.adaptParam = struct;net.divideFcn = '';net.divideParam = struct;net.divideMode = 'sample';net.initFcn = 'initlay';net.performFcn = 'mse';net.performParam = mse('defaultParam');net.plotFcns = cell(1,0);net.plotParams = cell(1,0);net.derivFcn = 'defaultderiv';net.trainFcn = '';net.trainParam = nnetParam;% 权值 & 偏差值net.IW = cell(0,0);net.LW = cell(0,0);net.b = cell(0,1);% 隐藏属性net.revert.IW = {}; % 输入层权重net.revert.LW = {}; % 隐藏层权重net.revert.b = {}; % 偏差% 要删掉的属性% NNET 6.0 Compatibilitynet.gradientFcn = ''; % Obsoletenet.gradientParam = struct; % Obsolete% CLASS% 生成一个网络类型net = class(net,'network');% ARCHITECTUREnet = setnet(net,'numInputs',numInputs);net = setnet(net,'numLayers',numLayers);net = setnet(net,'biasConnect',biasConnect);net = setnet(net,'inputConnect',inputConnect);net = setnet(net,'layerConnect',layerConnect);net = setnet(net,'outputConnect',outputConnect);function net = setnet(net,field,value)subscripts.type = '.';subscripts.subs = field;net = subsasgn(net,subscripts,value);