?? fisherff_snn.m
字號:
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 + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -