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

📄 drnnx.m

📁 DRNN实例运用编程
💻 M
字号:
function output = DRNNX(Is,Os)
  % Is 是特征矩阵,大小为 n * 8, n为样本个数, 8 为特征向量的长度
  % Os 为输出参考矩阵, 大小为 n* 1
  % 输出为cell变量{Woij,Wdij,WIij},Woij = output{1},Wdij = output{2}, WIij = output{3}

NumI = 8;                                                                  % i = 8;
NumJ = 17;                                                                 % j = 17;
Wi = ones(NumI,NumJ);                                                      % Wij;
X = zeros(size(Is,1),NumJ);                                                % Xij;
Wd = ones(1,NumJ);                                                         % Wdij;
Wo = ones(1,NumJ);                                                         % Woij;
WO = 1;                                                                    
no = 0.2;
nd = 0.2;
ni = 0.2;
a = 0.9;
Rk = zeros(1,NumJ);Rk0 = zeros(1,NumJ);                                    % R(k),R(k-1) = [0],  % P(k),P(k-1) = [0],  % Q(k),Q(k-1) = [0];                             
Qk = zeros(1,NumJ);Qk0 = zeros(1,NumJ);                                    % ( R(1),R(0);Q(1),Q(0);P(1),P(0) );
Pk = zeros(NumI,NumJ);Pk0 = zeros(NumI,NumJ);

S = Is * Wi;                                                               % Sij;            ( S1j )                                     
X = Sigmoid(S);                                                            % Xij = f(Sij);   ( X1j )              
DfS = Dsigmoid(S);                                                         % f'(Sij);        ( f'(S1j) )
Os0 = X(1,:) * Wo';                                                        % O(k);           ( O(1) )

Rk = X(1,:) + Rk0;                                                         % R(k), P(k), Q(k) ;       
Qk = DfS(1,:) .* Qk0;                                                      % ( R(1), P(1), Q(1) ) ; 
for t1 = 1:NumI
    for t2 = 1:NumJ
        Pk(t1,t2) = Is(1,t1) * DfS(t2);
    end
end

Dwo = no * (Os0 - Os(1)) * Rk;                                             % DWo,Dwd,Dwo                      
Dwd = nd * (Os0 - Os(1)) * Wo .* Qk;                                       % ( DWo(1),Dwd(1),Dwo(1)  )
Dwi = zeros(size(Wi));
for t1 = 1 : NumI
    Dwi(t1,:) = ni * (Os0 - Os(1)) * Wo .* Pk(t1,:);
end

Rk0 = Rk;                                                                  % 存储R(k), P(k), Q(k)为R(k-1), Q(k-1), P(k-1);
Qk0 = Qk;                                                                  
Pk0 = Pk;
Wo0 = Wo;                                                                  % 存储Wo(k),Wd(k), Wi(k)为Wo(k-1),Wd(k-1),Wi(k-1);
Wd0 = Wd;
Wi0 = Wi;

Wo = Wo + Dwo;                                                             % 求W(k+1) ( W(2) );                                                            
Wd = Wd + Dwd;
Wi = Wi + Dwi;

for k = 2:size(Is,1)                                                       % 从第二个样本的特征开始,到最后一个样本的特征,循环
    
    S = Is * Wi;                                                           % Sij
    X = Sigmoid(S);                                                        % Xij = f(Sij) 
    DfS = Dsigmoid(S);                                                     % f'(Sij);
    Os0 = X(k,:) * Wo';                                                    % O(k)    

    error = Os0 - Os(k);                                                   % E(k)
    
    Rk = X(k,:) + Rk0;                                                     % R(k), P(k), Q(k) ;
    Qk = DfS(k,:) .* (X(k-1) + Qk0);
    for t1 = 1:NumI
        for t2 = 1:NumJ
            Pk(t1,t2) = Is(k,t1) * DfS(t2);
        end
    end
    Pk = Pk + Pk0;
     
    Dwo = no * (Os0 - Os(k)) * Rk;                                         % DWo,Dwd,Dwo   
    Dwd = nd * (Os0 - Os(k)) * Wo .* Qk;
    Dwi = zeros(size(Wi));
    for t1 = 1 : NumI
        Dwi(t1,:) = ni * (Os0 - Os(k)) * Wo .* Pk(t1,:);
    end

    Rk0 = Rk;                                                              % 存储R(k), P(k), Q(k)为R(k-1), Q(k-1), P(k-1);
    Qk0 = Qk;
    Pk0 = Pk;
    Wo0 = Wo;                                                              % 存储Wo(k),Wd(k), Wi(k)为Wo(k-1),Wd(k-1),Wi(k-1) ;
    Wd0 = Wd;
    Wi0 = Wi;
    
    Wo = Wo + Dwo;                                                         % 求W(k+1);
    Wd = Wd + Dwd;
    Wi = Wi + Dwi;
 
end

output = {Wo,Wd,Wi};




    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    

⌨️ 快捷键说明

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