?? subsasgn.m
字號:
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 + -