WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

[neuronale Netze] benötige Erklärung zum Netz-Code

 

Fabian Baumgarten
Forum-Anfänger

Forum-Anfänger


Beiträge: 25
Anmeldedatum: 27.08.12
Wohnort: ---
Version: R2012a 7.14.0.739
     Beitrag Verfasst am: 04.09.2012, 13:14     Titel: [neuronale Netze] benötige Erklärung zum Netz-Code
  Antworten mit Zitat      
Hallo zusammen.

Wie bereits in meinem ersten Beitrag angekündigt, kommt hier direkt meine nächste Frage. Dabei handelt es sich im Prinzip um keine direkte Frage, sondern eher um die Bitte zur allgemeinen Erklärung.
Momentan bin Ich dabei den Programmcode, der hinter den Funktionen der einzelnen Netzwerke steht zu untersuchen.

z.B. das Feed Forward Netz (newff)

Zwecks Übersichtlichkeit habe Ich den Code in 2 Abschnitte getrennt. normalerweise steht Alles in einer einzigen m-file, ohne Unterbrechung. Den ersten Teil verstehe Ich gar nicht! Hier bräuchte Ich so einige Erklärungen.
Den zweiten Teil verstehe Ich fast komplett. Hier bedarf es erstmal keiner weiteren Erklärung. Ich füge Ihn jedoch trotzdem ein, damit Ihr evtl. den Zusammenhang besser erkennen könnt.

da der code ziemlich lang ist und ihr mir sicherlich nicht zu jeder zeile was schreiben könnt, oder wollt - was ich durchaus verstehe - würde ich euch bitten mir in erster linie folgendes zu erklären:

Das was ich nicht verstehe im ersten Abschnitt habe ich mit %AB HIER VERSTEHE ICH ES NICHT!!! markiert. Ich wollte die Teile im Code zunächst fett machen, aber das geht wohl nicht, wie sich nachher herausstellte.

Also los gehts:

Code:
%% Boilerplate Code - Same for all Network Functions

persistent INFO;

%AB HIER VERSTEHE ICH ES NICHT!!!

if (nargin < 1), error(message('nnet:Args:NotEnough')); end
in1 = varargin{1};
if ischar(in1)
  switch in1
    case 'info',
      if isempty(INFO), INFO = get_info; end
      out1 = INFO;
  end
else
  out1 = create_network(varargin{:});
end

%BIS HIER VERSTEHE ICH ES NICHT!!!

%% Boilerplate Code - Same for all Network Functions

%%
function info = get_info

info.function = mfilename;
info.name = 'Feed-Forward';
info.description = nnfcn.get_mhelp_title(mfilename);
info.type = 'nntype.network_fcn';
info.version = 6.0;

%%

%AB HIER VERSTEHE ICH ES NICHT!!!

function net = create_network(varargin)

if nargin < 2, error(message('nnet:Args:NotEnough')), end

v1 = varargin{1};
if isa(v1,'cell'), v1 = cell2mat(v1); end
v2 = varargin{2};
if nargin > 2, v3 = varargin{3}; end

if (nargin<= 6) && (size(v1,2)==2) && (~iscell(v2)) && (size(v2,1)==1) && ((nargin<3)||iscell(v3))
  nnerr.obs_use(mfilename,['See help for ' upper(mfilename) ' to update calls to the new argument list.']);
  net = new_5p0(varargin{:});
else
  net = new_5p1(varargin{:});
end

%BIS HIER VERSTEHE ICH ES NICHT!!!

%=============================================================
function net = new_5p1(p,t,s,tf,btf,blf,pf,ipf,tpf,ddf)

%AB HIER VERSTEHE ICH ES NICHT!!!

if nargin < 2, error(message('nnet:Args:NotEnough')), end

% Defaults
if (nargin < 3), s = []; end
if (nargin < 4), tf = {}; end
if (nargin < 5), btf = 'trainlm'; end
if (nargin < 6), blf = 'learngdm'; end
if (nargin < 7), pf = 'mse'; end
if (nargin < 8), ipf = {'fixunknowns','removeconstantrows','mapminmax'}; end
if (nargin < 9), tpf = {'removeconstantrows','mapminmax'}; end
if (nargin < 10), ddf = 'dividerand'; end

% Format
if isa(p,'cell'), p = cell2mat(p); end
if isa(t,'cell'), t = cell2mat(t); end

% Error checking
if ~(isa(p,'double') || isreal(p)  || islogical(t))
  error(message('nnet:NNet:XNotLegal'))
end
if ~(isa(t,'double') || isreal(t) || islogical(t))
  error(message('nnet:NNet:TNotLegal'))
end
if isa(s,'cell')
  if (size(s,1) ~= 1)
    error(message('nnet:NNet:LayerSizes'))
  end
  for i=1:length(s)
    si = s{i};
    if ~isa(si,'double') || ~isreal(si) || any(size(si) ~= 1) || any(si<1) || any(round(si) ~= si)
      error(message('nnet:NNet:LayerSizes'))
    end
  end
  s = cell2mat(s);
end
if (~isa(s,'double')) || ~isreal(s) || (size(s,1) > 1) || any(s<1) || any(round(s) ~= s)
  error(message('nnet:NNet:LayerSizes'))
end

%BIS HIER VERSTEHE ICH ES NICHT!!!

% Architecture
Nl = length(s)+1;
net = network;
net.numInputs = 1;
net.numLayers = Nl;
net.biasConnect = ones(Nl,1);
net.inputConnect(1,1) = 1;
[j,i] = meshgrid(1:Nl,1:Nl);
net.layerConnect = (j == (i-1));
net.outputConnect(Nl) = 1;

% Simulation

%AB HIER VERSTEHE ICH ES NICHT!!!

net.inputs{1}.processFcns = ipf;
for i=1:Nl
  if (i < Nl)
    net.layers{i}.size = s(i);
    if (Nl == 2)
      net.layers{i}.name = 'Hidden Layer';
    else
      net.layers{i}.name = ['Hidden Layer ' num2str(i)];
    end
  else
    net.layers{i}.name = 'Output Layer';
  end
  if (length(tf) < i) || all(isnan(tf{i}))
    if (i<Nl)
      net.layers{i}.transferFcn = 'tansig';
    else
      net.layers{i}.transferFcn = 'purelin';
    end
  else
    net.layers{i}.transferFcn = tf{i};
  end
end
net.outputs{Nl}.processFcns = tpf;

%BIS HIER VERSTEHE ICH ES NICHT!!!

% Adaption
net.adaptfcn = 'adaptwb';
net.inputWeights{1,1}.learnFcn = blf;
for i=1:Nl
  net.biases{i}.learnFcn = blf;
  net.layerWeights{i,:}.learnFcn = blf;
end

% Training
net.trainfcn = btf;
net.dividefcn = ddf;
net.performFcn = pf;

% Initialization
net.initFcn = 'initlay';
for i=1:Nl
  net.layers{i}.initFcn = 'initnw';
end

% Configuration
% Warning: Use of these properties is no longer recommended
net.inputs{1}.exampleInput = p;
net.outputs{Nl}.exampleOutput = t;

% Initialize
net = init(net);

% Plots
net.plotFcns = {'plotperform','plottrainstate','plotregression'};

%================================================================
function net = new_5p0(p,s,tf,btf,blf,pf)
% Backward compatible to NNT 5.0

%AB HIER VERSTEHE ICH ES NICHT!!!

if nargin < 2, error(message('nnet:Args:NotEnough')), end

% Defaults
Nl = length(s);
if nargin < 3, tf = {'tansig'}; tf = tf(ones(1,Nl)); end
if nargin < 4, btf = 'trainlm'; end
if nargin < 5, blf = 'learngdm'; end
if nargin < 6, pf = 'mse'; end

% Error checking
if isa(p,'cell') && all(size(p)==[1 1]), p = p{1,1}; end
if (~isa(p,'double')) || ~isreal(p)
  error(message('nnet:NNData:XNotMatorCell1Mat'))
end
if isa(s,'cell')
  if (size(s,1) ~= 1)
    error(message('nnet:NNet:LayerSizes'))
  end
  for i=1:length(s)
    si = s{i};
    if ~isa(si,'double') || ~isreal(si) || any(size(si) ~= 1) || any(si<1) || any(round(si) ~= si)
      error(message('nnet:NNet:LayerSizes'))
    end
  end
  s = cell2mat(s);
end
if (~isa(s,'double')) || ~isreal(s) || (size(s,1) ~= 1) || any(s<1) || any(round(s) ~= s)
  error(message('nnet:NNet:LayerSizes'))
end;

%BIS HIER VERSTEHE ICH ES NICHT!!!

 


und der rest ( den ich größten teils verstehe):

Code:
% Architecture
net = network(1,Nl);
net.biasConnect = ones(Nl,1);
net.inputConnect(1,1) = 1;
[j,i] = meshgrid(1:Nl,1:Nl);
net.layerConnect = (j == (i-1));
net.outputConnect(Nl) = 1;

% Simulation
for i=1:Nl
  net.layers{i}.size = s(i);
  net.layers{i}.transferFcn = tf{i};
end

% Performance
net.performFcn = pf;

% Adaption
net.adaptfcn = 'adaptwb';
net.inputWeights{1,1}.learnFcn = blf;
for i=1:Nl
  net.biases{i}.learnFcn = blf;
  net.layerWeights{i,:}.learnFcn = blf;
end

% Training
net.trainfcn = btf;

% Initialization
net.initFcn = 'initlay';
for i=1:Nl
  net.layers{i}.initFcn = 'initnw';
end

% Warning: this property is no longer recommended for use
net.inputs{1}.exampleInput = p;

net = init(net);

% Plots
net.plotFcns = {'plotperform','plottrainstate','plotregression'};


Ich weis, es ist ziemlich viel, aber vom programmieren habe Ich leider ziemlich wenig bis gar keine Ahnung. mit den neuronalen Netzwerken an sich komme Ich klar. Wie gesagt, es tut mir wirklich leid, dass es so viel ist, aber vielleicht kann mir jemand zumindest ein paar Passagen, die markiert sind "übersetzten".

Vielen, vielen Dank schon mal.
Private Nachricht senden Benutzer-Profile anzeigen


Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.