关于深度学习的计算机考研复试项目(五)

发布时间:2026/5/23 21:22:35

关于深度学习的计算机考研复试项目(五) 前四节是弄懂深度学习到底是在做什么和简单的回归任务分析从这一节开始学习分类任务核心是卷积神经网络分类任务与回归任务有很大的区别可以将分类任务理解为选择题回归任务理解为填空题回归需要输出一个不知道的值分类是挑选若干个结果中符合输入的一个举个例子使用三个三维向量分别表示dogcattree我们根据图像特征计算出的值肯定不是整数是三个复杂的数拼成的三维列向量比如计算出此结果后我们令三个数之中最大的值为1其余全为0得到【0,1,0】对应狗输出 结果为“狗”分类成功这就是基本的思路那么如何从读入图像特征到输出对应标签呢我们知道图像是由像素点矩阵组成的以一张224x224的哈基米照片为例但是在计算机的视角下一张彩图是三通道色的图片叠在一起的状态以下是例子本质是3x224x224的三张图片但是我们线性模型输入的是向量那我们就把224x224矩阵拉直拉成224个224维的向量三张底色图大概13w多个向量再塞入模型这就和我们之前的回归模型一样的就是输出结果有更多种就比如我上面提到的猫狗树三种。以下是示意图但是可以看见如果全连接模型中间参数过多那么一个模型可能要计算上亿个参数非常之夸张此时我们引入卷积神经网络来解决这一问题卷积神经网络引例黑块记为-1红块记为1小图我们称作卷积核将小图的矩阵与大图的子矩阵相乘累加对应子图的权值越大那么说明越像卷积核再引入一个高级一点的例子判断一张图片里面是不是一只鸟。对我之前说过的拆分图像的说明将整张图像放入模型是很费时间的参数太多。但是判断是不是鸟我们需要观看整张图吗鸟是不是有特点比如锋利的爪子和嘴只要识别到了鸟类的特征就可以辨识出图像是鸟了找到这个小的特征图就是卷积核局部的那个喙将好的卷积核与图像做运算得到对应的特征映射图例子如下图若我们把卷积核扩大成3x3的矩阵那么与原始图片点乘所得到的特征图变成2x2特征图尺寸进一步减少如何保持尺寸不变简单扩大原始图边界填充0即可卷积后要保证特征图大小不变继续深入探讨一下原始特征图和新特征图和卷积核的深度有什么关系以原始图224x224x3为例原始图深度为3那么卷积核深度必为3卷积核深度与原始图深度保持一致卷积核在原始图上卷积所得的新特征图。新特征图看有几个卷积核这里有五张卷积核得到的新特征图深度为五第二个问题一个卷积层是什么卷积层的参数量怎么计算像上图一样通过若干个卷积核卷积得到新的特征图5x224x224就叫做一层卷积该层的卷积参数量为3x3x3x5135个3为深度3x3为卷积核大小5为卷积核个数这里忽略了偏置值b试手算下列参数值这里挑1和7来回答一下第一问特征图为3x3可按算法4-21得到。卷积核参数量为卷积核大小即2x2第七问特征图为94x94参数量为7x749个padding是向外层扩充几层0的指标比如padding1外层扩充一圈0即第三问特征图经过扩充0后尺寸变为6x6卷出来的特征图变为4x4进一步深入求解参数问题稍微绕了个弯我们先看看第一问第一问特征图大小不变即保持和原特征图相同100x100经过大小为7的卷积核卷积后特征图变为94x94还差六行六列那么给原特征图扩充padding6/23即可再算一个第六问吧:卷积核深度一定是与原始特征图深度一致故X64padding1那么卷出来的特征图为2242-31224卷出来的特征图为224x224共128张。参数量为3x3x64x128问题来了特征图一直大小不变怎么卷参数展平后都需要大量参数特征图如何变小方法1扩大卷积步长我们上面所计算的卷积步长均为1那么可不可以试试把步长扩大因为特征图的大小不影响我们去分类图片比如引入步长S后可以推的卷积尺寸计算公式试计算下面问题根据公式O224-112x2/4155一般卷积是向下取整和C语言一样的那么输出的特征图就是64x55x55方法池化pooling池化是什么就是把一定范围内的数合成一个数来达到缩小矩阵的目的例如先介绍两种池化最大池化与平均池化由图可见池化就是把一个大矩阵的各个子矩阵压缩为一个数从而变成一个更小的矩阵知道了池化和卷积的计算之后那我们可以尝试一下手搓一个卷积神经网络将一张3x224x224的图卷成1024x7x7可以怎么卷积和池化能够一次给卷成功吗当然可以一次就卷好用1024个3x3x3的卷积核去卷积原始特征图设置padding1即可得到但一般不这么做就像我们之前的回归模型一般设置多个全连接这样模型训练的效果会更好比如这样的过程ok现在我们得到了很小的特征图那么再回到我们最初的问题卷积神经网络卷卷卷怎么卷了个类别呢将特征图拉成若干向量传入全连接模型输出一个分类向量见前面怎么处理分类的最大的值即为类别转化为【0,0,1】向量里面的0,1表示概率即001表示狗的概率是1但是我们卷积后得到的向量通常不是概率而是一些数值我们需要将其转化为概率概率都知道全集概率为1.该怎么办呢答用torch里面的softmax函数计算式为exp是对数函数的意思。即e的几次方计算后的三个结果和肯定为1因为分母为三个数值的和在学过回归任务之后我们知道训练的过程是必须要求loss函数的那么向量是怎么求loss的呢引入一个新概念交叉熵损失CrossEntropy关于交叉熵损失的本质我这里不做多介绍只需知道他是处理向量的loss函数值即可我们需要给LOSS函数的参数预测的分布即原始输出的数据向量还未概率化真实值的标签其实就是001那种pytorch自动帮我们完成概率化无须担心小结以下一个基本的分类神经网络一丶将原始特征图卷积池化成新的特征图这一步就是减少参数防止千万上亿的参数计算量爆炸二丶将新特征图拉伸成向量建立全连接模型 向前传导计算预测值y^与真实值y做交叉熵损失函数三丶损失函数梯度回传优化器优化模型可以看见过程和回归任务基本一致就只有输入输出时进行了修改知识拓展用一个经典的卷积神经网络AlexNet进一步熟悉Conv2d就是上面介绍过的卷积过程。Pool指的是池化里面的第一个参数是指每几个数池化一次第二个参数是和卷积一样的步长的意思参数量要会算这很重要第一次Conv2d时参数量为11x11卷积核大小x3深度与原特征图保持一致x64卷积核个数根据输出的特征图数量得到知晓了理论我们看看代码怎么写的简单版import torch.nn as nn class myModel(nn.Module): def __init__(self,num_cls): super(myModel,self).__init__() self.conv1nn.Conv2d(3,64,kernel_size11,stride4,padding2) self.pool1 nn.MaxPool2d(3,2) self.conv2nn.Conv2d(64,192,kernel_size5,stride1,padding2) self.pool2 nn.MaxPool2d(3,2) self.conv3 nn.Conv2d(192,384,kernel_size3,stride1,padding1) self.conv4 nn.Conv2d(384,256,kernel_size3,stride1,padding1) self.conv5 nn.Conv2d(256,256,kernel_size3,stride1,padding1) self.pool3 nn.MaxPool2d(3,2) self.pool4 nn.AdaptiveAvgPool2d(6) self.fc1 nn.Linear(9216,4096) self.fc2 nn.Linear(4096,4096) self.fc3 nn.Linear(4096,1000) def forward(self,x): x self.conv1(x) x self.pool1(x) x self.conv2(x) x self.pool2(x) x self.conv3(x) x self.conv4(x) x self.conv5(x) x self.pool3(x) x self.pool4(x) x x.view(x.size(0),-1) #view 函数将张量x的维度变为-1flatten拉成一维向量 x self.fc1(x) x self.fc2(x) x self.fc3(x) return x import torch img torch.ones((4,3,224,224)) model myModel(1000) y model(img) print(y)

相关新闻