[关闭]
@devilogic 2016-10-27T01:13:26.000000Z 字数 7215 阅读 1101

network

matlab


创建一个神经网络。

语法

  1. net = network
  2. 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 numLayersnumInputs列 布尔值矩阵
layerConnect numLayersnumLayers列 布尔值矩阵
outputConnect 1行 numLayers列 布尔值向量

返回一个神经网络

属性

架构属性

属性名 说明 注释
net.numInputs 0或者一个正整数 输入个数
net.numLayers 0或者一个正整数 隐藏层个数
net.biasConnect numLayer行 1列 布尔值向量 如果net.biasConnect(i)是1,那么层i开启偏置值,并且通过net.biases{i}是一个结构来描述偏置
net.inputConnect numLayersnumInputs 列布尔向量 如果net.inputConnect(i,j)是1,那么层i有从输入层j的一个权重,并且net.inputWeights{i,j}是一个结构来描述权重
net.layerConnect numLayersnumLayers列 布尔值矩阵 如果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 numLayersnumInputs列 cell队列 如果net.inputConnect(i,j)是1,那么net.inputWeights{i,j}是一个结构来描述从输入层j到层i的权重
net.layerWeights numLayersnumLayers列 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 numLayersnumInputs列 输入权重cell队列
net.LW numLayersnumLayers列 层权重cell队列
net.b numLayers行 1列 偏置值 cell队列

其他属性

net.userdata随意保存用户自定义信息。

例子

创建一个单输入两隐藏层的网络

  1. net = network
  2. net.numInputs = 1
  3. 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])

可以使用下列命令显示子对象的属性:

  1. net.inputs{1}
  2. net.layers{1}, net.layers{2}
  3. net.biases{1}
  4. net.inputWeights{1,1}, net.layerWeights{2,1}
  5. net.outputs{2}

可以通过下列代码修改子结构的属性,例如:

  1. net.layers{1}.transferFcn = 'tansig';
  2. 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];

对其进行仿真

  1. p = [0.5; -0.1];
  2. y = sim(net,p)

更多知识

代码分析

  1. function net = network(varargin)
  2. %NETWORK 创建一个自定义的神经网络.
  3. %
  4. % <a href="matlab:doc network">network</a> without arguments returns a new neural network with no
  5. % inputs, layers or outputs.
  6. %
  7. % <a href="matlab:doc network">network</a>(numInputs,numLayers,biasConnect,inputConnect,layerConnect,
  8. % outputConnect) takes additional optional arguments and returns a neural
  9. % network with the following properties defined:
  10. % numInputs - Number of inputs, 0.
  11. % numLayers - Number of layers, 0.
  12. % biasConnect - numLayers-by-1 Boolean vector, zeros.
  13. % inputConnect - numLayers-by-numInputs Boolean matrix, zeros.
  14. % layerConnect - numLayers-by-numLayers Boolean matrix, zeros.
  15. % outputConnect - 1-by-numLayers Boolean vector, zeros.
  16. %
  17. % 以下是一个一输入两层的网络被创建.
  18. %
  19. % net = <a href="matlab:doc network">network</a>(1,2)
  20. %
  21. % 以下代码将创建一个一输入,二层,前馈网络.
  22. % 仅仅第一层需要拥有一个bias.输入权重将链接层1. 1的权重将链接层2
  23. % 2是输出层.
  24. %
  25. % net = <a href="matlab:doc network">network</a>(1,2,[1;0],[1; 0],[0 0; 1 0],[0 1])
  26. %
  27. % 其他的子结构属性:
  28. %
  29. % net.<a href="matlab:doc nnproperty.net_inputs">inputs</a>{1}
  30. % net.<a href="matlab:doc nnproperty.net_layers">layers</a>{1}, net.<a href="matlab:doc nnproperty.net_layers">layers</a>{2}
  31. % net.<a href="matlab:doc nnproperty.net_biases">biases</a>{1}
  32. % net.<a href="matlab:doc nnproperty.net_inputWeights">inputWeights</a>{1,1}, net.<a href="matlab:doc nnproperty.net_layerWeights">layerWeights</a>{2,1}
  33. % net.<a href="matlab:doc nnproperty.net_outputs">outputs</a>{2}
  34. %
  35. % 我们能获取权值矩阵与偏导向量:
  36. %
  37. % 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}
  38. %
  39. % 我们能改变这些任意的子对象的属性。我们能同时改变两层的传输函数(激励函数):
  40. %
  41. % net.<a href="matlab:doc nnproperty.net_layers">layers</a>{1}.<a href="matlab:doc nnproperty.layer_transferFcn">transferFcn</a> = 'tansig';
  42. % net.<a href="matlab:doc nnproperty.net_layers">layers</a>{2}.<a href="matlab:doc nnproperty.layer_transferFcn">transferFcn</a> = 'logsig';
  43. %
  44. % 我们能改变一个输入元素为两个,通过设定每个元素的范围:
  45. %
  46. % net.<a href="matlab:doc nnproperty.net_inputs">inputs</a>{1}.<a href="matlab:doc nnproperty.input_range">range</a> = [0 1; -1 1];
  47. %
  48. % 接下来我能仿真一个两输入元素向量的网络:
  49. %
  50. % p = [0.5; -0.1];
  51. % y = net(p)
  52. %
  53. % See also INIT, REVERT, SIM, ADAPT, TRAIN, VIEW.
  54. % Mark Beale, 11-31-97
  55. % Copyright 1992-2012 The MathWorks, Inc.
  56. if (nargin == 1)
  57. in1 = varargin{1};
  58. % 如果输入的是结构,则直接转成network
  59. if isa(in1,'struct')
  60. net = class(in1,'network');
  61. % 如果参数已经是network类则直接赋值
  62. elseif isa(in1,'network')
  63. net = in1;
  64. else
  65. % 单个参数构建一个网络
  66. net = new_network(in1);
  67. end
  68. else
  69. % 多参数构建一个新的网络
  70. net = new_network(varargin{:});
  71. end
  72. function net = new_network(numInputs,numLayers,biasConnect,inputConnect, ...
  73. layerConnect,outputConnect,ignore) %#ok<INUSD>
  74. % Defaults
  75. if nargin < 1, numInputs = 0; end
  76. if nargin < 2, numLayers = 0; end
  77. if nargin < 3, biasConnect = false(numLayers,1); end
  78. if nargin < 4, inputConnect = false(numLayers,numInputs); end
  79. if nargin < 5, layerConnect = false(numLayers,numLayers); end
  80. if nargin < 6, outputConnect = false(1,numLayers); end
  81. % Checking
  82. % TODO - Error checking
  83. % NETWORK PROPERTIES
  84. % Note: "Param" and "Config" properties in NETWORK and subobject
  85. % (nnetInput, nnetOutput, nnetLayer, nnetWeight, nnetBias) properties must
  86. % always occur directly after their associated "Fcn" properties for
  87. % NN_STRUCT2OBJECT conversions to work properly.
  88. % Version
  89. net.version = '8';
  90. % Basics
  91. net.name = 'Custom Neural Network';
  92. % 在下一次升级中可能会删除
  93. % BACKWARDS COMPATIBILITY TO 8.0
  94. % Use TRAIN(net,x,t,'Reduction',num) notation instead.
  95. net.efficiency.cacheDelayedInputs = true;
  96. net.efficiency.flattenTime = true;
  97. net.efficiency.memoryReduction = 1;
  98. % User Data
  99. net.userdata.note = 'Put your custom network information here.';
  100. % Sizes
  101. net.numInputs = 0;
  102. net.numLayers = 0;
  103. net.numOutputs = 0;
  104. net.numInputDelays = 0;
  105. net.numLayerDelays = 0;
  106. net.numFeedbackDelays = 0;
  107. net.numWeightElements = 0;
  108. net.sampleTime = 1;
  109. % Connections
  110. net.biasConnect = false(0,1);
  111. net.inputConnect = false(0,0);
  112. net.layerConnect = false(0,0);
  113. net.outputConnect = false(1,0);
  114. % 子对象
  115. net.inputs = cell(0,1);
  116. net.layers = cell(0,1);
  117. net.biases = cell(0,1);
  118. net.outputs = cell(1,0);
  119. net.inputWeights = cell(0,0);
  120. net.layerWeights = cell(0,0);
  121. % 函数和参数
  122. net.adaptFcn = '';
  123. net.adaptParam = struct;
  124. net.divideFcn = '';
  125. net.divideParam = struct;
  126. net.divideMode = 'sample';
  127. net.initFcn = 'initlay';
  128. net.performFcn = 'mse';
  129. net.performParam = mse('defaultParam');
  130. net.plotFcns = cell(1,0);
  131. net.plotParams = cell(1,0);
  132. net.derivFcn = 'defaultderiv';
  133. net.trainFcn = '';
  134. net.trainParam = nnetParam;
  135. % 权值 & 偏差值
  136. net.IW = cell(0,0);
  137. net.LW = cell(0,0);
  138. net.b = cell(0,1);
  139. % 隐藏属性
  140. net.revert.IW = {}; % 输入层权重
  141. net.revert.LW = {}; % 隐藏层权重
  142. net.revert.b = {}; % 偏差
  143. % 要删掉的属性
  144. % NNET 6.0 Compatibility
  145. net.gradientFcn = ''; % Obsolete
  146. net.gradientParam = struct; % Obsolete
  147. % CLASS
  148. % 生成一个网络类型
  149. net = class(net,'network');
  150. % ARCHITECTURE
  151. net = setnet(net,'numInputs',numInputs);
  152. net = setnet(net,'numLayers',numLayers);
  153. net = setnet(net,'biasConnect',biasConnect);
  154. net = setnet(net,'inputConnect',inputConnect);
  155. net = setnet(net,'layerConnect',layerConnect);
  156. net = setnet(net,'outputConnect',outputConnect);
  157. function net = setnet(net,field,value)
  158. subscripts.type = '.';
  159. subscripts.subs = field;
  160. net = subsasgn(net,subscripts,value);
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注