深度学习Matlab工具箱代码注释——cnnff.m

来源:互联网 发布:python 伯乐在线 编辑:程序博客网 时间:2024/05/22 16:06
%%=========================================================================%函数名称:cnnff()%输入参数:net,神经网络;x,训练数据矩阵;%输出参数:net,训练完成的卷积神经网络%主要功能:使用当前的神经网络对输入的向量进行预测%算法流程:1)将样本打乱,随机选择进行训练;%         2)讲样本输入网络,层层映射得到预测值%注意事项:1)使用BP算法计算梯度%%=========================================================================function net = cnnff(net, x)n                  = numel(net.layers);      %层数net.layers{1}.a{1} = x;                      %网络的第一层就是输入,但这里的输入包含了多个训练图像inputmaps          = 1;                      %输入层只有一个特征map,也就是原始的输入图像for l = 2 : n                                %对于每层(第一层是输入层,循环时先忽略掉)    if strcmp(net.layers{l}.type, 'c')       %如果当前是卷积层        for j = 1 : net.layers{l}.outputmaps %对每一个输入map,需要用outputmaps个不同的卷积核去卷积图像            %%=========================================================================            %主要功能:创建outmap的中间变量,即特征矩阵            %实现步骤:用这个公式生成一个零矩阵,作为特征map            %注意事项:1)对于上一层的每一张特征map,卷积后的特征map的大小是:(输入map宽 - 卷积核的宽 + 1)* (输入map高 - 卷积核高 + 1)            %         2)由于每层都包含多张特征map,则对应的索引则保存在每层map的第三维,及变量Z中            %%=========================================================================            z = zeros(size(net.layers{l - 1}.a{1}) - [net.layers{l}.kernelsize - 1 net.layers{l}.kernelsize - 1 0]);            for i = 1 : inputmaps    %对于输入的每个特征map                %%=========================================================================                %主要功能:将上一层的每一个特征map(也就是这层的输入map)与该层的卷积核进行卷积                %实现步骤:1)进行卷积                %         2)加上对应位置的基b,然后再用sigmoid函数算出特征map中每个位置的激活值,作为该层输出特征map                %注意事项:1)当前层的一张特征map,是用一种卷积核去卷积上一层中所有的特征map,然后所有特征map对应位置的卷积值的和                %         2)有些论文或者实际应用中,并不是与全部的特征map链接的,有可能只与其中的某几个连接                %%=========================================================================                z = z + convn(net.layers{l - 1}.a{i}, net.layers{l}.k{i}{j}, 'valid');            end            net.layers{l}.a{j} = sigm(z + net.layers{l}.b{j});   %加基(加上加性偏置b)        end        inputmaps = net.layers{l}.outputmaps;                    %更新当前层的map数量;    elseif strcmp(net.layers{l}.type, 's')                       %如果当前层是下采样层        for j = 1 : inputmaps            %%=========================================================================            %主要功能:对特征map进行下采样            %实现步骤:1)进行卷积            %         2)最终pooling的结果需要从上面得到的卷积结果中以scale=2为步长,跳着把mean pooling的值读出来            %注意事项:1)例如我们要在scale=2的域上面执行mean pooling,那么可以卷积大小为2*2,每个元素都是1/4的卷积核            %         2)因为convn函数的默认卷积步长为1,而pooling操作的域是没有重叠的,所以对于上面的卷积结果            %         3)是利用卷积的方法实现下采样            %%=========================================================================            z = convn(net.layers{l - 1}.a{j}, ones(net.layers{l}.scale) / (net.layers{l}.scale ^ 2), 'valid');            net.layers{l}.a{j} = z(1 : net.layers{l}.scale : end, 1 : net.layers{l}.scale : end, :);   %跳读mean pooling的值        end    endend%%=========================================================================%主要功能:输出层,将最后一层得到的特征变成一条向量,作为最终提取得到的特征向量%实现步骤:1)获取倒数第二层中每个特征map的尺寸%         2)用reshape函数将map转换为向量的形式%         3)使用sigmoid(W*X + b)函数计算样本输出值,放到net成员o中%注意事项:1)在使用sigmoid()函数是,是同时计算了batchsize个样本的输出值%%=========================================================================net.fv = [];                       %net.fv为神经网络倒数第二层的输出mapfor j = 1 : numel(net.layers{n}.a) %最后一层的特征map的个数    sa = size(net.layers{n}.a{j}); %第j个特征map的大小    net.fv = [net.fv; reshape(net.layers{n}.a{j}, sa(1) * sa(2), sa(3))];endnet.o = sigm(net.ffW * net.fv + repmat(net.ffb, 1, size(net.fv, 2))); %通过全连接层的映射得到网络的最终预测结果输出end

原文链接

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 被强制消费后应怎么办? 当保安不发工资怎么办? 辅警改革流管员怎么办 退伍证上照片毁了怎么办 辅警年龄大了怎么办 交警2小时不出警怎么办 中暑发烧39度了怎么办 中暑头疼怎么办最快最有效 十五个月的宝宝拉肚子怎么办 中暑了头疼想吐怎么办 2周岁中暑了呕吐怎么办 容易中暑的人该怎么办 喷泡3m反光脏了怎么办 新摩托车被交警查到怎么办 写字楼保安夜班巡逻害怕怎么办 全民k歌歌曲删了怎么办 莲藕洞里的黑膜怎么办 鞋子后面的拉链磨脚怎么办 磨砂鞋尖踢掉皮怎么办 塔吊吊装过程中遇到障碍物怎么办 高速路上突然遇到障碍物怎么办 被不明物蛰了怎么办 喝酒后开车撞路政护栏怎么办 电脑过了质保期怎么办 电闸推不上去怎么办啊? 寝室的电闸不亮了怎么办 海绵城市改造只挖不修怎么办 怀孕一个月做了胸透怎么办 怀孕了照了胸透怎么办 刚怀孕照了胸透怎么办 怀孕进了ct室怎么办 消防稳压罐气囊压力不够怎么办 备孕期间拍了ct怎么办 晚上睡不好老做梦怎么办 零线和地线短路怎么办 火花塞拧的过紧怎么办 眼睛被电弧光灼伤怎么办 电脑模拟器微信附近人屏蔽了怎么办 美的电压锅漏气怎么办 电压力锅排气阀漏气怎么办 win10系统上不了网怎么办