fisherff_snn.m

来自「神经网络的工具箱, 神经网络的工具箱,」· M 代码 · 共 137 行

M
137
字号
function [F, dE_dX] = fisherff_snn(X, net, data)%FISHERFF_SNN derivatives for costfunction with respect to connection%             weights and biases (Fisher matrix).%%  Syntax%%   [F, dE_dX] = fisherff_snn(net, data)%   [F, dE_dX] = fisherff_snn(X, net, data)%%  Description%%   FISHERFF_SNN takes%    net    - a net_struct%    data   - the data for net.costFcn.name%    X      - a vector containing connection weights and biases (optional).%   and returns%    F      - dy_dX' * d^2E_dy^2 * dy_dX %    dE_dX  - dE_dy' * dy_dX%   (E is cost function)%%#function lintf_snn exptf_snn logsigtf_snn radbastf_snn tansigtf_snn %#function dlintf_snn dexptf_snn dlogsigtf_snn dradbastf_snn dtansigtf_snn if (nargin == 2)         % fisherff_snn(net, data)   [F, dE_dX] = fisherff_all(X, net);elseif (nargin == 3)     % fisherff_snn(X, net, data)   net = setx_snn(net,X);   [F, dE_dX] = fisherff_all(net, data);end%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%function [F, dE_dX] = fisherff_all(net, data)M = net.numLayers;q = size(data.P,2);indb = 1;inde = 0;for m = 1:M    indb = inde + 1;    inde = inde + prod(size(net.weights{m}));    Xindices{m}.w = [indb:inde];    indb = inde + 1;    inde = inde + size(net.biases{m},1);    Xindices{m}.b = [indb:inde];endN{1} = net.weights{1}*data.P + repmat(net.biases{1}, 1, size(data.P,2));V{1} = feval(net.transferFcn{1}, N{1});n0 = size(net.weights{1},2);nl{1} = size(net.biases{1},1);if (M > 1)    for m = 2:M       N{m} = net.weights{m}*V{m-1} + repmat(net.biases{m}, 1, q);       V{m} = feval(net.transferFcn{m}, N{m});       nl{m} = size(net.biases{m},1);    endendgamma{M} = repmat(...             reshape(...	       feval(feval(net.transferFcn{M}, 'deriv'), N{M}, V{M}),...	       nl{M}*q, 1), ...	     1,nl{M}) ...           .* ...	   reshape(shiftdim(repdim(diag(ones(nl{M},1)), q),1), nl{M}*q, nl{M});for m = [(M-1):-1:1]    gamma{m} = (gamma{m+1}*net.weights{m+1}) .* ...                reshape(...                    shiftdim(...                    repdim(...		     feval(feval(net.transferFcn{m}, 'deriv'), N{m}, V{m})', ...	            nl{M}),...                  2),...                nl{M}*q, nl{m});enddY_dX(:,Xindices{1}.w) = repmat(gamma{1},1,n0) .* ...                         reshape(...                           shiftdim(...                             repdim(...                               shiftdim(...                                 repdim(data.P', nl{M}), ...                                 1), ...                               nl{1}), ...                             1), ...                           nl{M}*q, nl{1}*n0);dY_dX(:,Xindices{1}.b) = gamma{1};for m = 2:M    dY_dX(:,Xindices{m}.w) = repmat(gamma{m},1,nl{m-1}) .* ...                             reshape(...                               shiftdim(...                                 repdim(...                                     shiftdim(...                                      repdim(V{m-1}', nl{M}),...                                     1), ...                                   nl{m}), ...                                 1), ...                               nl{M}*q, nl{m}*nl{m-1});    dY_dX(:,Xindices{m}.b) = gamma{m};end%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#function wcf_snn dwcf_snn D = feval(feval(net.costFcn.name, 'deriv'), net, data, V{M});%#function wcf_snn d2wcf_snn H = feval(feval(net.costFcn.name, '2deriv'), net, data, V{M}, V{M});    %SOME OPTIMALIZATION CODE (begin)%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%    if strcmp(net.costFcn.name, 'wcf_snn')       F = (dY_dX') * ((repmat(diag(H), 1, size(dY_dX,2))).*(dY_dX));       dE_dX = dY_dX' * reshape(D, nl{M}*q, 1);       return;    end    %SOME OPTIMALIZATION CODE (end)%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%F = dY_dX' * H * dY_dX;dE_dX = dY_dX' * reshape(D, nl{M}*q, 1);%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%function B = repdim(A, q)sizeA = size(A);B = reshape(repmat(reshape(A, prod(sizeA), 1),1,q),[sizeA q]);%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

⌨️ 快捷键说明

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