资源简介

本代码主要用于MLP回归的反向传播的实现,阅读性和学习性极好,激活函数采用tanh.训练误差极小。
欢迎大家共享和探讨,一起完善预测功能。

资源截图

代码片段和文件信息

function [model L] = mlpReg(XYklambda)
% Train a multilayer perceptron neural network
% Input:
%   X: d x n data matrix
%   Y: p x n response matrix
%   k: T x 1 vector to specify number of hidden nodes in each layer
%   lambda: regularization parameter
% Ouput:
%   model: model structure
%   L: loss
% Written by Mo Chen (sth4nth@gmail.com).
if nargin < 4
    lambda = 1e-2;
end
eta = 1e-3;
maxiter = 50000;
L = inf(1maxiter);

k = [size(X1);k(:);size(Y1)];
T = numel(k)-1;
W = cell(T1);
b = cell(T1);
for t = 1:T
    W{t} = randn(k(t)k(t+1));
    b{t} = randn(k(t+1)1);
end
R = cell(T1);
Z = cell(T+11);
Z{1} = X;
for iter = 2:maxiter
%     forward
    for t = 1:T-1
        Z{t+1} = tanh(W{t}‘*Z{t}+b{t});
    end
    Z{T+1} = W{T}‘*Z{T}+b{T};

%     loss
    E = Z{T+1}-Y;     
    Wn = cellfun(@(x) dot(x(:)x(:))W);            % |W|^2
    L(iter) = dot(E(:)E(:))+lambda*sum(Wn);

%     backward
    R{T} = E;                % delta
    for t = T-1:-1:1
        df = 1-Z{t+1}.^2;    % h‘(a)
        R{t} = df.*(W{t+1}*R{t+1});    % delta
    end
    
%     gradient descent
    for t=1:T
        dW = Z{t}*R{t}‘+lambda*W{t};
        db = sum(R{t}2);
        W{t} = W{t}-eta*dW;
        b{t} = b{t}-eta*db;
    end
end
L = L(12:iter);
model.W = W;
model.b = b;

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件      12945  2019-11-11 20:56  MLP回归的反向传播的实现\A-Ein F-Hout.xlsx

     文件       1342  2019-11-19 19:59  MLP回归的反向传播的实现\mlpReg.m

     文件        336  2019-11-19 22:07  MLP回归的反向传播的实现\mlpRegPred.m

     文件        888  2019-11-21 16:58  MLP回归的反向传播的实现\mlp_demo.m

     目录          0  2019-11-21 16:59  MLP回归的反向传播的实现

----------- ---------  ---------- -----  ----

                15511                    5


评论

共有 条评论