%主要功能:计算梯度
%实现步骤:
%注意事项:1)这里与Notes on Convolutional Neural Networks中不同,这里的子采样层没有参数,也没有
%激活函数,所以在子采样层是没有需要求解的参数的
for l = 2 : n
if strcmp(net.layers{l}.type, 'c')
forj = 1 : numel(net.layers{l}.a)
fori = 1 : numel(net.layers{l - 1}.a)
%dk保存的是误差对卷积核的导数net.layers{l}.dk{i}{j} = convn(flipall(net.layers{l - 1}.a{i}), net.layers{l}.d{j}, 'valid') / size(net.layers{l}.d{j}, 3);
end%db保存的是误差对于bias基的导数net.layers{l}.db{j} = sum(net.layers{l}.d{j}(:)) / size(net.layers{l}.d{j}, 3);
endendend
%最后一层perceptron的gradient的计算
net.dffW = net.od * (net.fv)' / size(net.od, 2);
net.dffb = mean(net.od, 2);
function X = rot180(X)
X = flipdim(flipdim(X, 1), 2);
end
end