⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 subsasgn.m

📁 RBF网络逼近、RBF-建模、RBF网络训练与测试程序
💻 M
📖 第 1 页 / 共 5 页
字号:
function net=subsasgn(net,subscripts,v)
%SUBSASGN Assign fields of a neural network.

% Mark Beale, 11-31-97
% Copyright 1992-2002 The MathWorks, Inc.
% $Revision: 1.14 $ $ Date: $

% Assume no error
err = '';

% First subscript
[subscripts,field,type,moresubs] = nextsubs(subscripts);

switch type

case '.'
  field = matchstring(field,fieldnames(net));
  
  switch(field)
  
  % Network architecture
  case 'numInputs',
    [numInputs,err] = nsubsasn(net.numInputs,subscripts,v);
  if length(err), error(err), end
    [net,err]=setNumInputs(net,numInputs);
  net.hint.ok = 0;
  case 'numLayers',
    [numLayers,err] = nsubsasn(net.numLayers,subscripts,v);
  if length(err), error(err), end
    [net,err]=setNumLayers(net,numLayers);
  case 'numOutputs',
    error('"numOutputs" is a read only property.')
  case 'numTargets',
    error('"numTargets" is a read only property.')
  case 'numInputDelays',
    error('"numInputDelays" is a read only property.')
  case 'numLayerDelays',
    error('"numLayerDelays" is a read only property.')
  case 'biasConnect',
    [biasConnect,err] = nsubsasn(net.biasConnect,subscripts,v);
  if length(err), error(err), end
    [net,err]=setBiasConnect(net,biasConnect);
  net.hint.ok = 0;
  case 'inputConnect',
    [inputConnect,err] = nsubsasn(net.inputConnect,subscripts,v);
  if length(err), error(err), end
    [net,err]=setInputConnect(net,inputConnect);
  net.hint.ok = 0;
  case 'layerConnect',
    [layerConnect,err] = nsubsasn(net.layerConnect,subscripts,v);
  if length(err), error(err), end
    [net,err]=setLayerConnect(net,layerConnect);
  net.hint.ok = 0;
  case 'outputConnect',
    [outputConnect,err] = nsubsasn(net.outputConnect,subscripts,v);
  if length(err), error(err), end
    [net,err]=setOutputConnect(net,outputConnect);
  net.hint.ok = 0;
  case 'targetConnect',
    [targetConnect,err] = nsubsasn(net.targetConnect,subscripts,v);
  if length(err), error(err), end
    [net,err]=setTargetConnect(net,targetConnect);
  net.hint.ok = 0;

  % Inputs
  case 'inputs',
    if ~moresubs, error('You must assign to subobject properties individually.'), end
    [subscripts,subs,type,moresubs] = nextsubs(subscripts);
  if strcmp(type,'.'), error('Attempt to assign field of non-structure array'), end
  if strcmp(type,'()'), error('Attempt to assign cell array as a double array'), end
    if ~moresubs, error('You must assign to subobject properties individually.'), end
  [sub1,err] = subs1(subs,[net.numInputs 1]);
  if length(err), error(err), end

    [subscripts,field,type,moresubs] = nextsubs(subscripts);
    if strcmp(type,'{}'),error('Cell contents assignment to a non-cell array object.'),end
    if strcmp(type,'()'),error('Array contents assignment to a non-array object.'),end
    field = matchfield(field,nninput);
  
  for i=sub1,
      switch(field)
    case 'range'
        [range,err] = nsubsasn(net.inputs{i}.range,subscripts,v);
      if length(err), error(err), end
      [net,err] = setInputRange(net,i,range);
      net.hint.ok = 0;
    case 'size'
        [newSize,err] = nsubsasn(net.inputs{i}.size,subscripts,v);
      if length(err), error(err), end
      [net,err] = setInputSize(net,i,newSize);
      net.hint.ok = 0;
      case 'userdata',
        [net.inputs{i}.userdata,err] = nsubsasn(net.inputs{i}.userdata,subscripts,v);
    otherwise,
      error('Reference to non-existent field.')
    end
  end
    
  % Layers
  case 'layers',
    if ~moresubs, error('You must assign to subobject properties individually.'), end
    [subscripts,subs,type,moresubs] = nextsubs(subscripts);
  if strcmp(type,'.'), error('Attempt to assign field of non-structure array'), end
  if strcmp(type,'()'), error('Attempt to assign cell array as a double array'), end
    if ~moresubs, error('You must assign to subobject properties individually.'), end
  [sub1,err] = subs1(subs,[net.numLayers 1]);
  if length(err), error(err), end

    [subscripts,field,type,moresubs] = nextsubs(subscripts);
    if strcmp(type,'{}'),error('Cell contents assignment to a non-cell array object.'),end
    if strcmp(type,'()'),,error('Array contents assignment to a non-array object.'),end
    field = matchfield(field,nnlayer);
  
  for i=sub1,
      switch(field)
    case 'dimensions'
        [newDimensions,err] = nsubsasn(net.layers{i}.dimensions,subscripts,v);
      if length(err), error(err), end
      [net,err] = setLayerDimensions(net,i,newDimensions);
      net.hint.ok = 0;
    case 'distanceFcn'
        [distanceFcn,err] = nsubsasn(net.layers{i}.distanceFcn,subscripts,v);
      if length(err), error(err), end
      [net,err] = setLayerDistanceFcn(net,i,distanceFcn);
      net.hint.ok = 0;
    case 'distances',
        error('"net.layers{i}.distances" is a read only property.')
    case 'initFcn'
        [initFcn,err] = nsubsasn(net.layers{i}.initFcn,subscripts,v);
      if length(err), error(err), end
      [net,err] = setLayerInitFcn(net,i,initFcn);
      net.hint.ok = 0;
    case 'netInputFcn'
        [netInputFcn,err] = nsubsasn(net.layers{i}.netInputFcn,subscripts,v);
      if length(err), error(err), end
      [net,err] = setLayerNetInputFcn(net,i,netInputFcn);
      net.hint.ok = 0;
    case 'positions',
        error('"net.layers{i}.distances" is a read only property.')
    case 'size'
        [newSize,err] = nsubsasn(net.layers{i}.size,subscripts,v);
      if length(err), error(err), end
      [net,err] = setLayerSize(net,i,newSize);
      net.hint.ok = 0;
    case 'topologyFcn'
        [topologyFcn,err] = nsubsasn(net.layers{i}.topologyFcn,subscripts,v);
      if length(err), error(err), end
      [net,err] = setLayerTopologyFcn(net,i,topologyFcn);
      net.hint.ok = 0;
    case 'transferFcn'
        [transferFcn,err] = nsubsasn(net.layers{i}.transferFcn,subscripts,v);
      if length(err), error(err), end
      [net,err] = setLayerTransferFcn(net,i,transferFcn);
      net.hint.ok = 0;
      case 'userdata',
        [net.layers{i}.userdata,err] = nsubsasn(net.layers{i}.userdata,subscripts,v);
    otherwise,
      error('Reference to non-existent field.')
    end
  end
  
  % Biases
  case 'biases',
    if ~moresubs, error('You must assign to subobject properties individually.'), end
    [subscripts,subs,type,moresubs] = nextsubs(subscripts);
  if strcmp(type,'.'), error('Attempt to assign field of non-structure array'), end
  if strcmp(type,'()'), error('Attempt to assign cell array as a double array'), end
    if ~moresubs, error('You must assign to subobject properties individually.'), end
    [sub1,err] = subs1(subs,[net.numLayers 1]);
  if length(err), error(err), end

    [subscripts,field,type,moresubs] = nextsubs(subscripts);
    if strcmp(type,'{}'),error('Cell contents assignment to a non-cell array object.'),end
    if strcmp(type,'()'),,error('Array contents assignment to a non-array object.'),end
    field = matchfield(field,nnoutput);
  
  for i=sub1
    if ~isempty(net.biases{i}), switch(field)
    case 'initFcn'
        [initFcn,err] = nsubsasn(net.biases{i}.initFcn,subscripts,v);
      if length(err), error(err), end
      [net,err] = setBiasInitFcn(net,i,initFcn);
      net.hint.ok = 0;
    case 'learn'
        [learn,err] = nsubsasn(net.biases{i}.learn,subscripts,v);
      if length(err), error(err), end
      [net,err] = setBiasLearn(net,i,learn);
      net.hint.ok = 0;
    case 'learnFcn'
        [learnFcn,err] = nsubsasn(net.biases{i}.learnFcn,subscripts,v);
      if length(err), error(err), end
      [net,err] = setBiasLearnFcn(net,i,learnFcn);
      net.hint.ok = 0;
    case 'learnParam'
        [learnParam,err] = nsubsasn(net.biases{i}.learnParam,subscripts,v);
      if length(err), error(err), end
      [net,err] = setBiasLearnParam(net,i,learnParam);
    case 'size'
        error('"net.biases{i}.size" is a read only property.')
      case 'userdata',
        [net.biases{i}.userdata,err] = nsubsasn(net.biases{i}.userdata,subscripts,v);
    otherwise,
      error('Reference to non-existent field.')
    end, end
  end

  % Input weights
  case 'inputWeights',
    if ~moresubs, error('You must assign to subobject properties individually.'), end
    [subscripts,subs,type,moresubs] = nextsubs(subscripts);
  if strcmp(type,'.'), error('Attempt to assign field of non-structure array'), end
  if strcmp(type,'()'), error('Attempt to assign cell array as a double array'), end
    if ~moresubs, error('You must assign to subobject properties individually.'), end
    [sub1,sub2,err] = subs2(subs,[net.numLayers net.numInputs]);
  if length(err), error(err), end

    [subscripts,field,type,moresubs] = nextsubs(subscripts);
    if strcmp(type,'{}'),error('Cell contents assignment to a non-cell array object.'),end
    if strcmp(type,'()'),,error('Array contents assignment to a non-array object.'),end
    field = matchfield(field,nnweight);

  for k=1:length(sub1)
    i = sub1(k);
    j = sub2(k);
    if ~isempty(net.inputWeights{i,j}), switch(field)
    case 'delays'
        [delays,err] = nsubsasn(net.inputWeights{i,j}.delays,subscripts,v);
      if length(err), error(err), end
      [net,err] = setInputWeightDelays(net,i,j,delays);
      net.hint.ok = 0;
    case 'initFcn'
        [initFcn,err] = nsubsasn(net.inputWeights{i,j}.initFcn,subscripts,v);
      if length(err), error(err), end
      [net,err] = setInputWeightInitFcn(net,i,j,initFcn);
      net.hint.ok = 0;
    case 'learn'
        [learn,err] = nsubsasn(net.inputWeights{i,j}.learn,subscripts,v);
      if length(err), error(err), end
      [net,err] = setInputWeightLearn(net,i,j,learn);
      net.hint.ok = 0;
    case 'learnFcn'
        [learnFcn,err] = nsubsasn(net.inputWeights{i,j}.learnFcn,subscripts,v);
      if length(err), error(err), end
      [net,err] = setInputWeightLearnFcn(net,i,j,learnFcn);
      net.hint.ok = 0;
    case 'learnParam'
        [learnParam,err] = nsubsasn(net.inputWeights{i,j}.learnParam,subscripts,v);
      if length(err), error(err), end
      [net,err] = setInputWeightLearnParam(net,i,j,learnParam);
    case 'size'
        error('"net.inputWeights{i,j}.size" is a read only property.')
      case 'userdata',
        [net.inputWeights{i,j}.userdata,err] = nsubsasn(net.inputWeights{i,j}.userdata,subscripts,v);
    case 'weightFcn'
        [weightFcn,err] = nsubsasn(net.inputWeights{i,j}.weightFcn,subscripts,v);
      if length(err), error(err), end
      [net,err] = setInputWeightWeightFcn(net,i,j,weightFcn);
      net.hint.ok = 0;
    otherwise,
      error('Reference to non-existent field.')
    end, end
  end  

  % Layer weights
  case 'layerWeights',
    if ~moresubs, error('You must assign to subobject properties individually.'), end
    [subscripts,subs,type,moresubs] = nextsubs(subscripts);
  if strcmp(type,'.'), error('Attempt to assign field of non-structure array'), end
  if strcmp(type,'()'), error('Attempt to assign cell array as a double array'), end
    if ~moresubs, error('You must assign to subobject properties individually.'), end
    [sub1,sub2,err] = subs2(subs,[net.numLayers net.numLayers]);
  if length(err), error(err), end

    [subscripts,field,type,moresubs] = nextsubs(subscripts);
    if strcmp(type,'{}'),error('Cell contents assignment to a non-cell array object.'),end
    if strcmp(type,'()'),,error('Array contents assignment to a non-array object.'),end
    field = matchfield(field,nnweight);

  for k=1:length(sub1)
    i = sub1(k);
    j = sub2(k);
    if ~isempty(net.layerWeights{i,j}), switch(field)
    case 'delays'
        [delays,err] = nsubsasn(net.layerWeights{i,j}.delays,subscripts,v);
      if length(err), error(err), end
      [net,err] = setLayerWeightDelays(net,i,j,delays);
      net.hint.ok = 0;
    case 'initFcn'
        [initFcn,err] = nsubsasn(net.layerWeights{i,j}.initFcn,subscripts,v);
      if length(err), error(err), end
      [net,err] = setLayerWeightInitFcn(net,i,j,initFcn);
      net.hint.ok = 0;
    case 'learn'
        [learn,err] = nsubsasn(net.layerWeights{i,j}.learn,subscripts,v);
      if length(err), error(err), end
      [net,err] = setLayerWeightLearn(net,i,j,learn);
      net.hint.ok = 0;
    case 'learnFcn'
        [learnFcn,err] = nsubsasn(net.layerWeights{i,j}.learnFcn,subscripts,v);
      if length(err), error(err), end
      [net,err] = setLayerWeightLearnFcn(net,i,j,learnFcn);
      net.hint.ok = 0;
    case 'learnParam'
        [learnParam,err] = nsubsasn(net.layerWeights{i,j}.learnParam,subscripts,v);
      if length(err), error(err), end
      [net,err] = setLayerWeightLearnParam(net,i,j,learnParam);
      net.hint.ok = 0;
    case 'size'
        error('"net.layerWeights{i,j}.size" is a read only property.')
      case 'userdata',
        [net.layerWeights{i,j}.userdata,err] = nsubsasn(net.layerWeights{i,j}.userdata,subscripts,v);
    case 'weightFcn'
        [weightFcn,err] = nsubsasn(net.layerWeights{i,j}.weightFcn,subscripts,v);
      if length(err), error(err), end
      [net,err] = setLayerWeightWeightFcn(net,i,j,weightFcn);
      net.hint.ok = 0;
    otherwise,
      error('Reference to non-existent field.')
    end, end
  end  
  
  % Outputs
  case 'outputs',
    if ~moresubs, error('You must assign to subobject properties individually.'), end
    [subscripts,subs,type,moresubs] = nextsubs(subscripts);
  if strcmp(type,'.'), error('Attempt to assign field of non-structure array'), end
  if strcmp(type,'()'), error('Attempt to assign cell array as a double array'), end
    if ~moresubs, error('You must assign to subobject properties individually.'), end
    [sub1,err] = subs1(subs,[net.numLayers 1]);
  if length(err), error(err), end

    [subscripts,field,type,moresubs] = nextsubs(subscripts);
    if strcmp(type,'{}'),error('Cell contents assignment to a non-cell array object.'),end
    if strcmp(type,'()'),,error('Array contents assignment to a non-array object.'),end
    field = matchfield(field,nnoutput);
  
  for i=sub1
    if ~isempty(net.outputs{i}), switch(field)
    case 'size'
        error('"net.outputs{i}.size" is a read only property.')
      case 'userdata',
        [net.outputs{i}.userdata,err] = nsubsasn(net.outputs{i}.userdata,subscripts,v);
    
    otherwise,
      error('Reference to non-existent field.')
    end, end
  end  
  
  % Targets
  case 'targets',
    if ~moresubs, error('You must assign to subobject properties individually.'), end
    [subscripts,subs,type,moresubs] = nextsubs(subscripts);
  if strcmp(type,'.'), error('Attempt to assign field of non-structure array'), end
  if strcmp(type,'()'), error('Attempt to assign cell array as a double array'), end
    if ~moresubs, error('You must assign to subobject properties individually.'), end
    [sub1,err] = subs1(subs,[net.numLayers 1]);
  if length(err), error(err), end

    [subscripts,field,type,moresubs] = nextsubs(subscripts);
    if strcmp(type,'{}'),error('Cell contents assignment to a non-cell array object.'),end
    if strcmp(type,'()'),,error('Array contents assignment to a non-array object.'),end
    field = matchfield(field,nnoutput);
  
  for i=sub1
    if ~isempty(net.outputs{i}), switch(field)
    case 'size'
        error('"net.targets{i}.size" is a read only property.')
      case 'userdata',
        [net.targets{i}.userdata,err] = nsubsasn(net.targets{i}.userdata,subscripts,v);
    
    otherwise,
      error('Reference to non-existent field.')
    end, end
  end  
  
  % Network functions and parameters
  case 'adaptFcn',
    [adaptFcn,err] = nsubsasn(net.adaptFcn,subscripts,v);
  if length(err), error(err), end
    [net,err]=setAdaptFcn(net,adaptFcn);
  case 'adaptParam',
    [adaptParam,err] = nsubsasn(net.adaptParam,subscripts,v);
  if length(err), error(err), end
    [net,err]=setAdaptParam(net,adaptParam);
  case 'initFcn',
    [initFcn,err] = nsubsasn(net.initFcn,subscripts,v);
  if length(err), error(err), end
    [net,err]=setInitFcn(net,initFcn);
      net.hint.ok = 0;
  case 'initParam',
    [initParam,err] = nsubsasn(net.initParam,subscripts,v);
  if length(err), error(err), end
    [net,err]=setInitParam(net,initParam);
  case 'performFcn',
    [performFcn,err] = nsubsasn(net.performFcn,subscripts,v);
  if length(err), error(err), end
    [net,err]=setPerformFcn(net,performFcn);
  case 'performParam',
    [performParam,err] = nsubsasn(net.performParam,subscripts,v);
  if length(err), error(err), end
    [net,err]=setPerformParam(net,performParam);
  case 'trainFcn',
    [trainFcn,err] = nsubsasn(net.trainFcn,subscripts,v);
  if length(err), error(err), end
    [net,err]=setTrainFcn(net,trainFcn);
  case 'trainParam',
    [trainParam,err] = nsubsasn(net.trainParam,subscripts,v);
  if length(err), error(err), end
    [net,err]=setTrainParam(net,trainParam);

  % Weight and bias values
  case 'IW'
    [IW,err] = nsubsasn(net.IW,subscripts,v);
  if length(err), error(err), end
  [net,err] = setiw(net,IW);
  case 'LW'
    [LW,err] = nsubsasn(net.LW,subscripts,v);
  if length(err), error(err), end
  [net,err] = setlw(net,LW);
  case 'b'
    [B,err] = nsubsasn(net.b,subscripts,v);
  if length(err), error(err), end
  [net,err] = setb(net,B);
  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -