使用ReLU层进行慢速训练

时间:2016-08-15 17:47:15

标签: matlab neural-network

我试图对Matlab2014b实现ReLU激活功能,但我不确定我是否做得对。我将pureline.m和+ pureling(作为模板)文件夹复制到工作目录中。并改变它们如下所示:

function a = ReLU(n,varargin)
if ischar(n)
    a = nnet7.transfer_fcn(mfilename,n,varargin{:});
  return
end

    a = ReLU.apply(n);
end

function a = apply(n,param)
    a = max(n,0.01*n);
end

function d = da_dn(n,a,param)
    d=ones(size(n));
    d(n<0)=0.01;
    d(n==0)=0.5;
end

function da = forwardprop(dn,n,a,param)
    da = dn;
end
function dn = backprop(da,n,a,param)
    dn = da;
end

function s = isScalar
    s = true;
end

function flag = discontinuity(n,param)
    flag = false(1,size(n,2));
end

function or = outputRange
    or = [0 inf];
end

function ir = activeInputRange
    ir = [-inf inf];
end

function param = parameterInfo
    param = [];
end

function t = type
    t = 'transfer_fcn';
end

function name = name()
    name = 'ReLU';
end

并将其实施到NN net.layers{1}.transferFcn='ReLU'。它似乎有效但用ReLU训练NN所花费的时间比其他激活函数长3倍(平均),如tansig hiperbolic tangent或pureline linear。我用trainlm Levenber-Marquardt和trainscg比例共轭梯度测试了它。时间比较结果是一样的。

Actualy是Leaky ReLU。基于https://stackoverflow.com/a/32545990/6718612的导数,虽然对于n = 0看起来像dn / da = 0.5并没有产生影响。 我错过了什么?

编辑:我发现ReLU已经存在于Matlab2014b中并且被称为“poslin&#39;”。它与其他内置程序一样有效。

0 个答案:

没有答案