function [W1,W3,W4] = DeltaMiniBatch(W1,W3,W4,X,D,N)
alpha = 0.01;
V1 = zeros(20,20,20);
M = 5;
for i = 1:(N/M)
[i,N/M]
dW3sum = zeros(100,2000);
dW4sum = zeros(10,100);
for j = 1:M
id = (i-1)*M+j;
x = X(:,:,id);
d = D(:,id);
%滤波
for epoch = 1:20
V1(:,:,epoch) = filter2(W1(:,:,epoch), x, 'valid');
end
%ReLU
Y1 = max(0,V1);
%2×2平均池化
Y2 = (Y1(1:2:end,1:2:end,:)+Y1(2:2:end,1:2:end,:)+Y1(1:2:end,2:2:end,:)+Y1(2:2:end,2:2:end,:))/4;
%Reshape变为列向量
y2 = reshape(Y2,[],1);
v3 = W3*y2;
%ReLU
y3 = max(0,v3);
v = W4*y3;
%Softmax
y = Softmax(v);
%向前传播误差,并更新权重
e = d - y;
delta = e;
e3 = W4'*delta;
delta3 = (v3 > 0).*e3;
e2 = W3'*delta3;
dW4 = alpha*delta*y3';
dW3 = alpha*delta3*y2';
E2 = reshape(e2,size(Y2));
E2_4 = E2/4;
E1 = zeros(20,20,20);
E1(1:2:end,1:2:end,:) = E2_4;
E1(1:2:end,2:2:end,:) = E2_4;
E1(2:2:end,1:2:end,:) = E2_4;
E1(2:2:end,2:2:end,:) = E2_4;
delta1 = (V1>0).*E1;
dW1 = zeros(9,9,20);
for epoch = 1:20
dW1(:,:,epoch) = alpha*filter2(delta1(:,:,epoch),x,'valid');
end
W1 = W1 + dW1;
dW4sum = dW4sum + dW4;
dW3sum = dW3sum + dW3;
end
dW3avg = dW3sum / M;
dW4avg = dW4sum / M;
W3=W3+dW3avg;
W4=W4+dW4avg;
end
end
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
matlab_通过MATLAB编程实现基于CNN卷积神经网络的手写数字识别算法,数据库为MNIST标准数据库_源码.rar (7个子文件)
matlab_通过MATLAB编程实现基于CNN卷积神经网络的手写数字识别算法,数据库为MNIST标准数据库_源码
MNISTData.mat 29.5MB
Runme.m 940B
FUNC
ReLU.m 44B
Pool.m 130B
DeltaMiniBatch.m 2KB
Softmax.m 63B
Conv.m 159B
共 7 条
- 1
资源评论
mYlEaVeiSmVp
- 粉丝: 1886
- 资源: 19万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功