@devilogic
2016-10-27T09:13:26.000000Z
字数 7215
阅读 1790
matlab
创建一个神经网络。
net = network
net = 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 = network
net.numInputs = 1
net.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);
end
else
% 多参数构建一个新的网络
net = new_network(varargin{:});
end
function net = new_network(numInputs,numLayers,biasConnect,inputConnect, ...
layerConnect,outputConnect,ignore) %#ok<INUSD>
% Defaults
if nargin < 1, numInputs = 0; end
if nargin < 2, numLayers = 0; end
if nargin < 3, biasConnect = false(numLayers,1); end
if nargin < 4, inputConnect = false(numLayers,numInputs); end
if nargin < 5, layerConnect = false(numLayers,numLayers); end
if 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.
% Version
net.version = '8';
% Basics
net.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 Data
net.userdata.note = 'Put your custom network information here.';
% Sizes
net.numInputs = 0;
net.numLayers = 0;
net.numOutputs = 0;
net.numInputDelays = 0;
net.numLayerDelays = 0;
net.numFeedbackDelays = 0;
net.numWeightElements = 0;
net.sampleTime = 1;
% Connections
net.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 Compatibility
net.gradientFcn = ''; % Obsolete
net.gradientParam = struct; % Obsolete
% CLASS
% 生成一个网络类型
net = class(net,'network');
% ARCHITECTURE
net = 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);