详解深度学习图像分类任务中,进入分类头前的数据结构、分类头的输出,以及经过Softmax函数处理后的输出

本文详细介绍了深度学习模型中,尤其是卷积神经网络中特征图的作用,分类头如何将特征图转换为预测向量,以及Softmax函数在输出概率分布中的应用。以ConvNeXtV2模型为例,展示了模型训练中输入和输出的形状,并强调了这些概念在图像分类任务中的重要性。
摘要由CSDN通过智能技术生成

1.进入分类头前的数据

        在深度学习模型中,尤其是在卷积神经网络(CNN)中,进入分类头前的数据通常是特征图(feature maps)。这些特征图是通过多个卷积层、激活函数和池化层等操作处理后的结果,它们捕捉了输入图像的抽象特征,如边缘、纹理等。到达分类头之前,这些特征图可能会经过全局平均池化(Global Average Pooling)或其他形式的降维处理,以减少参数数量和避免过拟合。尽管这些特征图在技术上是张量,但在深度学习的上下文中,它们通常被称为特征图,以强调它们包含的抽象特征信息

2.分类头的输出

        分类头的主要作用是将特征图转换为最终的分类结果。在大多数情况下,这意味着将高维的特征图通过一个或多个全连接层(也称为密集层)处理,以生成一个固定长度的向量。这个向量的每个元素对应于模型识别的一个类别的预测得分。因此,分类头的直接输出是一个向量,这个向量在技术上也是一个张量,但其形状通常是 1 × N ,其中 1 是batch size(不知道这个说法准确不准确), N 是类别的数量

        上面说其形状是 1 × N ,说的是测试时候一张图片进入模型分类头的输出。在模型的test.py脚本里面会有这一句代码:img.unsqueeze_(0)。写这句代码是因为在PyTorch中,对于单张图片,一般需要增加一个维度作为batch维度。执行完这句代码后会在索引 0 的位置增加一个维度,表示这是一个包含单张图片的batch

        如果是在模型训练或者验证评估阶段输出分类头输出的形状,那么输出就是 n :m,其中 n 是模型训练设置的batch size,m 是数据集类别数

        那么,这里多思考一个问题。分类头的输入是什么呢?打印分类头的输入可以知道其输入也是一个张量,其形状为x : y,其中 x 是模型设置的batch size,y 则是模型最后一个阶段输出的特征图的通道数。可能很多人不知道什么意思,在这里举个例子解释一下。在深度学习图像分类模型ConvNeXt V2(large版本)模型中有这么一句代码:

        model = ConvNeXtV2(depths=[3, 3, 27, 3], dims=[192, 384, 768, 1536], **kwargs)

        其中,dims = [192, 384, 768, 1536]是一个关键参数,用于指定ConvNeXt V2模型中不同阶段的通道数(或维度),即 dims数组中的每个数值代表了模型中不同阶段的特征图的通道数。

        PS : 在深度学习中,通道数可以理解为特征图中的深度,即每个特征图包含的独立特征数量。在卷积神经网络中,输入图像通过多个卷积层处理,每个卷积层都会生成一定数量的特征图,这些特征图的通道数由模型设计时指定。

        ConvNeXt V2模型中这些不同阶段对应于模型中不同深度的卷积层组。这里的数值意味着:

        第一个阶段的通道数为192,这意味着在模型的这一部分,每个特征图有192个独立的特征通道

        第二个阶段的通道数为384,即在这一阶段,特征图的深度增加,每个特征图有384个独立的特征通道

        第三个阶段的通道数为768,特征图的通道数继续增加,每个特征图有768个独立的特征通道

        最后一个阶段的通道数为1536,这是模型中通道数最多的阶段,每个特征图有1536个独立的特征通道

        假设训练ConvNeXt V2(large版本)模型设置的batch size为128,那么输出该模型分类头的输入形状,得到的结果就会是128:1536

        大家感兴趣的话可以在模型训练和测试的时候输出看看

3.经过Softmax函数后的输出

        Softmax函数是一种常用的激活函数,用于多类分类问题中。它将分类头输出的原始预测得分转换为概率分布,使所有输出值的和为1,每个值都在0到1之间,表示模型对每个类别的预测概率。因此,经过Softmax函数处理后的输出仍然是一个向量,其元素数等于类别数,每个元素表示对应类别的预测概率

        举个例子,假设模型Test.py脚本中有这么一句代码:

        probabilities = F.softmax(out, dim=1)

        这里使用softmax函数将分类头输出的原始预测得分转换为概率值。F.softmax()是PyTorch中的函数,dim=1表示在第1个维度(通常是类别维度)上进行softmax操作

        在模型Test.py脚本中可能也会有这么一句代码:

        _, pred = torch.max(out, 1)

        上面的代码有时候可能会写成  _, pred = torch.max(out.data, 1),意思是差不多的

        torch.max()会返回两个值,第一个值是最大值,第二个值是最大值所在的索引。由于我们一般只关心最大值所在的索引,所有一般会用下划线_表示忽略了最大值,而将索引赋值给了pred变量

        在图像分类任务中,通常使用这两种操作来解释模型的输出,F.softmax()用于得到类别的概率分布,而torch.max()用于找到最可能的类别

4.总结

        总结来说,进入分类头前的数据是特征图,这些特征图是通过深度网络处理输入图像得到的高维张量。分类头的输出是一个向量,包含了模型对每个类别的原始预测得分。经过Softmax函数处理后,这个向量转换为一个概率分布,每个元素表示模型对相应类别的预测概率。这些概念和数据结构是深度学习图像分类任务中的基础,它们支持模型学习从输入图像中提取抽象特征,并将这些特征映射到具体的类别上

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值