1 基础知识
1)torchvision
独立于pytorch,专门用来处理图像,通常用于计算机视觉领域。
torchvision主要包含三部分:
models:提供深度学习中各种经典的网络结构以及预训练好的模型,例如VGG、ResNet等。
datasets:提供常用的数据集,包括MNIST、CIFAR10/100等。
transforms:数据预处理操作,主要包括对Tensor以及PIL Image对象的操作。
2)卷积神经网络
卷积神经网络(Convolutional Neural Networks,简称CNN)是一种监督学习的神经网络,主要是通过一个个的过滤器,不断提取特征,从局部的特征到总体的特征,从而进行图像识别。CNN的基本结构由输入层、隐藏层、输出层构成。其中隐藏层又包括卷积层、池化层、全连接层。
3)卷积计算
一种有效提取图像特征的方法,一般用一个正方形的卷积核,按照指定步长,在输入特征图上滑动,卷积核会与输入特征图出现重合区域,重合区域对应元素相乘、求和再加上偏置项,得到输出特征的一个像素点。执行卷积计算时,卷积核里的参数是固定的,在每次反向传播时,这些参数会被梯度下降法更新。卷积是利用立体卷积核实现了参数的空间共享。图像卷积可以实现很多不同的效果,例如模糊、边缘提取、浮雕等。
4)nn.Conv2d( )
nn.Conv2d()是PyTorch中用于卷积操作的方法。
torch.nn.Conv2d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True, padding_mode='zeros', device=None, dtype=None)
参数介绍:
- in_channels:输入数据的通道数。
- out_channels:输出数据的通道数,也就是卷积核的数量。
- kernel_size:卷积核的大小。可以是单一的整数(如 3),表示卷积核的高度和宽度都是 3;也可以是一个元组(如 (3, 3)),分别表示卷积核的高度和宽度。
- stride:卷积核滑动的步长,默认是 1。
- padding:在输入数据的边缘填充的零的层数,这通常用于控制输出数据的大小,默认是 0。
- bias:是否添加偏置项,默认是 True。
5)nn.MaxPool2d( )
最大池化,池化处理也叫作降采样处理,是对不同位置的特征进行聚合统计。通常是取对应位置的最大值(最大池化)、平均值(平均池化)等。
池化的优点:降维、克服过拟合、在图像识别领域,池化还能提供平移、旋转不变性。
torch.nn.MaxPool2d(kernel_size, stride=None, padding=0, dilation=1, return_indices=False, ceil_mode=False)
参数介绍:
- kernel_size:池化窗口的大小。
- stride:池化操作的步长。
- padding:在输入数据的边缘填充的零的层数,用来控制输出数据的大小,默认是 0。
- dilation:控制池化窗口中元素之间的间距,默认是 1。
- ceil_mode:当设置为 True 时,将使用向上取整来计算输出形状,默认是 False。
6)nn.Linear( )
nn.Linear是 PyTorch 中用于创建全连接层,输入经过卷积层、激活函数和池化层等操作后,得到的输出是卷积网络学习到的,关于原始数据的高级特征。全连接层是特征提取到分类的桥梁,它将学到的特征表示映射到样本的标记空间。神经网络的隐含层可以自动学习数据的特征。在全连接神经网络中,隐含层中的每个节点与它前面一层的所有节点相连接,能最大程度保留输入数据中的所有信息,不会漏掉每个维度贡献的信息。
torch.nn.Linear(in_features, out_features, bias=True, device=None, dtype=None)
参数介绍:
- in_features:输入数据的特征数,即输入张量的第一个维度的大小。
- out_features:输出数据的特征数,即输出张量的第二个维度的大小。
- bias:布尔值,表示是否要为此层添加偏置项,默认为 True。
- device:设备对象,表示该层应该在哪个设备上计算(例如 CPU 或 GPU),默认为 None,表示使用与输入数据相同的设备。
- dtype:输出数据的期望数据类型,默认为 None,表示使用与输入数据相同的数据类型。
7)torch.max(inputs, dim)
在PyTorch中,torch.max() 用于计算张量 inputs 在指定维度 dim 上的最大值。当 dim 设置为1(即第二维,索引从0开始)时,该函数会返回每一行的最大值以及对应的最大值的索引。
_, predicted:忽略第一个返回值,只保留第二个返回值。这些索引通常用于分类任务中,表示模型对每个类别的预测概率最高的那个类别的索引。
2 多标签分类部分评估指标:
1)平均准确率torchvision
当所有标记均预测正确时,准确率为1。评估过于严格,导致指标偏低。
:表示类别标签,-1或1
2)汉明损失(Hamming loss)
衡量预测标记与样本实际标记之间不一致程度的指标。它关注的是那些具有标记的样本未能被正确识别的情况。汉明损失 = (预测为正的实际为负的样本数 + 预测为负的实际为正的样本数) / 总样本数。汉明损失越小,说明模型预测的准确性越高。
N :是样本的数量。
:标签的数量。
: 第 i 个样本的第 j 个标签的真实值。
: 第 i 个样本的第 j 个标签的预测值。
xor:异或操作,不同为1,相同为0。
3)覆盖率(Coverage)
N :样本的数量,这里为1
: 标签ln的预测概率,按照所有预测概率从大到小排序的位置,如果样本不包含标签ln ,那么, 会被更新为0。
4)错误率(OneError)
N :样本的数量,这里为1
index funtion,即统计满足括号里的条件的次数。
5)排序损失(RankingLoss)
:样本包含的标签集
:样本 不包含的标签集
6)平均精确率(AveragePrecision)
3 多标签图像分类器
多标签图像分类涉及将图像分配到多个标签或类别中,适用于处理复杂的场景和多主题图像。
思路:
设计卷积神经网络,首先从训练集中取出样本,输入网络,经过逐级变换,传送到输出层,计算输出层和样本标签之间的差,反向传播误差,采用梯度下降法更新权值,最小化损失,反复迭代,在网络收敛,并达到预期精度结束训练。
过程:
核心代码:
运行结果: