LeNet5的一个MATLAB实现的代码解析(2)

本文详细介绍了一种卷积神经网络(CNN)的向前传播算法实现。从输入图像开始,通过池化层、卷积层及全连接层的计算,最终得到网络的输出。过程中涉及池化、卷积、权重和偏置的加权求和以及激活函数的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

向前传递过程
function [out, cnet] = sim(cnet,inp)
%作者对程序的介绍
%SIM simulate convolutional neural network
%
% Syntax
%
% [out, sinet] = sim(cnet,inp)
%
% Description
% Input:
% cnet - Convolutional neural network class object
% inp - input image
% Output:
% cnet - Convolutional neural network with unchanged weignts and biases
% but with saved layers outputs
% out - simulated neural network output
%
%© Sirotenko Mikhail, 2009

cnet.SLayer{1}.SS{1} = subsample(inp,cnet.SLayer{1}.SRate);%池化
cnet.SLayer{1}.YS{1} = cnet.SLayer{1}.SS{1}.*cnet.SLayer{1}.WS{1}+cnet.SLayer{1}.BS{1} ;
%第一次计算
cnet.SLayer{1}.XS{1} = feval(cnet.SLayer{1}.TransfFunc,cnet.SLayer{1}.YS{1});
%第二次计算(使用激活函数激活,本程序用Sigmoid函数)
for k=2:(cnet.numLayers-cnet.numFLayers)
if(rem(k,2)) %Parity check
%S-layer 池化层
for l=1:cnet.CLayer{k-1}.numFMaps %For all feature maps from previous layer
%池化(平均)
XC = reshape(cnet.CLayer{k-1}.XC,1,[]); %将矩阵转化为向量
cnet.SLayer{k}.SS{l} = subsample(XC{l},cnet.SLayer{k}.SRate);%此程序中SRate = 2
cnet.SLayer{k}.YS{l} = cnet.SLayer{k}.SS{l}*cnet.SLayer{k}.WS{l}+cnet.SLayer{k}.BS{l} ;
cnet.SLayer{k}.XS{l} = feval(cnet.SLayer{k}.TransfFunc,cnet.SLayer{k}.YS{l});
end
else
%C-layer 卷积层
YC = num2cell(zeros(cnet.CLayer{k}.numKernels,1));
for l=1:cnet.CLayer{k}.numKernels %For all convolutional kernels
for m=find(cnet.CLayer{k}.ConMap(l,:)) %根据ConMap中提供的卷积模式选择特征图进行卷积
%卷积
YC{l} = YC{l}+fastFilter2(cnet.CLayer{k}.WC{l},cnet.SLayer{k-1}.XS{m},‘valid’)+cnet.CLayer{k}.BC{l};
end
end
cnet.CLayer{k}.YC = YC;
cnet.CLayer{k}.XC=cnet.CLayer{k}.YC; %卷积时激活函数为y = x

end

end

%XC转化为向量
XC = cell2mat(cnet.CLayer{k}.XC)’;
%F层的计算
for k=(cnet.numLayers-cnet.numFLayers+1):cnet.numLayers
if (k == cnet.numCLayers+cnet.numSLayers+1) %前一层是卷积层
cnet.FLayer{k}.Y = XCcnet.FLayer{k}.W+cnet.FLayer{k}.B;
cnet.FLayer{k}.X = feval(cnet.FLayer{k}.TransfFunc,cnet.FLayer{k}.Y);
else
cnet.FLayer{k}.Y = cnet.FLayer{k-1}.X
cnet.FLayer{k}.W+cnet.FLayer{k}.B;
cnet.FLayer{k}.X = feval(cnet.FLayer{k}.TransfFunc,cnet.FLayer{k}.Y);%激活
end
end

out = cnet.FLayer{k}.X;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值