您的位置:首页 > 产品设计 > UI/UE

深度学习笔记5:Building Deep Networks for Classification

2015-06-16 09:26 543 查看
由多个稀疏自编码器的编码层和一个分类器组成。

直接上代码:

numLayers=numel(stack);
a{1}=data;
for i=1:numLayers
z{i+1}=stack{i}.w*a{i}+repmat(stack{i}.b,1,M);
a{i+1}=sigmoid(z{i+1});
end
z{numLayers+2}=softmaxTheta*a{numLayers+1};
p=bsxfun(@rdivide,exp(z{numLayers+2}),sum(exp(z{numLayers+2})));

%代价函数,只考虑Softmax回归模型的代价
cost=-1/M*sum(sum(groundTruth.*log(p)))+lambda/2*sum(sum(softmaxTheta.^2));

%Softmax单独求导
softmaxThetaGrad = -1/M * (groundTruth -p) *a{numLayers+1}' + lambda * softmaxTheta;

%BP
d = cell(numLayers+1);
d{numLayers+1} = -(softmaxTheta' * (groundTruth - p)) .* (a{numLayers+1} .* (1-a{numLayers+1}));
for layer = (numLayers:-1:2)
d{layer} = (stack{layer}.w' * d{layer+1}) .* (a{layer} .* (1- a{layer}));
end

for layer = (numLayers:-1:1)
stackgrad{layer}.w = (1/M) * d{layer+1} * a{layer}';
stackgrad{layer}.b = (1/M) * sum(d{layer+1}, 2);
end


梯度求导,感谢博主小村长的分享,贴下图:





结合以上推导过程,加上自己理解,写出推导过程如下:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: