爱站网 关键词挖掘工具站长工具,wordpress全局密码,网站开发获取用户微信号登录,穷人没本钱怎么创业本文记录了我在学习深度学习的过程中遇到过的不懂的知识点#xff0c;为了方便翻阅#xff0c;故将其发表于此#xff0c;随时更新#xff0c;供大家参考。 深度学习常见知识点
1. 测试精度和训练精度
在深度学习中#xff0c;测试精度和训练精度是两个重要的指标#… 本文记录了我在学习深度学习的过程中遇到过的不懂的知识点为了方便翻阅故将其发表于此随时更新供大家参考。 深度学习常见知识点
1. 测试精度和训练精度
在深度学习中测试精度和训练精度是两个重要的指标它们分别代表了模型在测试集上的分类正确率和训练集上的分类正确率。测试集是用来评估模型泛化能力的数据集它不参与模型的训练过程。训练集是用来训练模型参数的数据集它直接影响模型的学习效果。
测试精度和训练精度之间的大小关系可以反映出模型是否存在过拟合或欠拟合的问题。过拟合是指模型在训练集上表现很好但在测试集上表现很差说明模型过于复杂学习了训练集的噪声或特异性导致泛化能力下降。欠拟合是指模型在训练集和测试集上都表现不好说明模型过于简单没有学习到数据的内在规律导致预测能力不足。
一般来说我们希望测试精度和训练精度都尽可能高且相差不大。
如果测试精度远低于训练精度说明存在过拟合可以通过增加数据量、使用正则化、dropout等方法来缓解。如果测试精度和训练精度都很低说明存在欠拟合可以通过增加特征、使用更复杂的模型、减小正则化系数等方法来改善。
如果测试精度高于训练精度这种情况比较少见可能有以下几种原因
测试集的数据分布与训练集不一致导致测试集更容易被模型分类正确。训练集的数据做了一些增强或变换增加了难度而测试集没有做相同的处理。训练过程中使用了dropout等技术降低了训练精度但在测试时关闭了dropout提高了测试精度。训练和测试的评价指标不一样比如训练时用的是交叉熵损失函数而测试时用的是准确率。 2. 超参数
超参数是一些用来控制模型结构、功能、效率等的调节旋钮它们不能直接从数据中学习而需要人为预先设定或优化。超参数的不同选择会影响模型的性能和效果。一些常见的超参数有
学习率learning rate决定了每次梯度下降的步长影响了模型的收敛速度和稳定性。迭代次数epochs决定了模型训练的总轮数影响了模型的拟合程度和泛化能力。层数num of hidden layers决定了模型的深度影响了模型的复杂度和表达能力。每层神经元的个数num of hidden layer units决定了模型的宽度影响了模型的复杂度和表达能力。激活函数activation function决定了模型的非线性程度影响了模型的逼近能力和梯度传播情况。批大小batch size决定了每次梯度下降使用的样本数量影响了模型的收敛速度和稳定性。优化器optimizer决定了梯度下降的算法影响了模型的收敛速度和稳定性。正则化regularization决定了模型对参数的惩罚程度影响了模型的拟合程度和泛化能力。dropout决定了模型在训练过程中随机丢弃一些神经元的概率影响了模型的拟合程度和泛化能力。
3. 训练数据集、验证数据集和测试数据集
在深度学习中训练数据集、验证数据集和测试数据集是三种不同的数据集它们各自有不同的作用和区别。
**训练数据集training dataset**是用来训练模型的数据它可以帮助模型学习到数据的特征和规律从而实现预测或分类的目的。**验证数据集validation dataset**是用来评估模型的性能和调整模型的超参数的数据它可以帮助模型避免过拟合或欠拟合的问题从而提高模型的泛化能力。(相对于测试数据集验证数据集更常用。)**测试数据集test dataset**是用来测试模型在未知数据上的表现的数据它可以反映模型在真实场景中的准确度和可靠性。
三种数据集之间的区别主要有以下几点
三种数据集应该是互相独立且分布相似的不能有重复或相似的数据否则会影响模型的评估和测试。三种数据集所占的比例一般取决于数据量的大小和超参数的数量一般来说训练集占比最大验证集和测试集占比较小。对于小规模样本集几万量级常用的分配比例是 60% 训练集、20% 验证集、20% 测试集。对于大规模样本集百万级以上只要验证集和测试集的数量足够即可例如有 100w 条数据那么留 1w 验证集1w 测试集即可。三种数据集在模型训练和评估过程中使用的频率不同训练集会被多次使用验证集会被少量使用测试集只会被一次使用。一旦使用了测试集就不能再修改模型或超参数。
4. K-则交叉验证
在深度学习中K-则交叉验证是一种评估模型性能和选择最优超参数的方法。它的基本思想是将原始数据集分成K个子集每次选择一个子集作为验证集其余的K-1个子集作为训练集进行K次训练和验证然后取K次验证结果的平均值作为模型的最终评估指标。这样可以充分利用数据集避免数据划分的随机性对模型评估的影响提高模型的泛化能力。
具体来说假设我们有一个数据集D包含m个样本我们想要训练一个深度学习模型M并且选择合适的超参数H例如学习率、批大小、正则化系数等。我们可以按照以下步骤进行K-则交叉验证
第一步将数据集D随机分成K个大小相等的子集D_1, D_2, …, D_K。第二步对于每个子集D_ii1,2,…,K将其作为验证集将其他的K-1个子集合并作为训练集用训练集训练模型M并用验证集测试模型M的性能指标E_i例如准确率、损失值等。第三步计算K次验证结果的平均值E_mean (E_1 E_2 … E_K) / K作为模型M在超参数H下的最终评估指标。第四步尝试不同的超参数H并重复上述步骤找到使得E_mean最大或最小的超参数H*作为最优超参数。第五步使用最优超参数H*和全部数据集D重新训练模型M并保存训练好的模型。
5. 模型容量
在深度学习中模型容量是指模型的拟合能力或复杂度的度量它反映了模型可以表示的函数族的大小和多样性。
一般来说模型容量越大模型可以拟合的函数越复杂模型的表达能力越强。但是模型容量也会影响模型的泛化能力即在未见过的数据上的表现。
如果模型容量过小模型可能会欠拟合即在训练集上表现不佳如果模型容量过大模型可能会过拟合即在训练集上表现很好但在测试集上表现很差。
因此在深度学习中选择合适的模型容量是一个重要的问题需要在拟合能力和泛化能力之间找到一个平衡点。有一些方法可以用来控制或调节模型容量例如
改变模型的结构或参数数量。比如在神经网络中增加或减少层数、神经元个数、连接方式等都会影响模型容量。添加正则化项或dropout等技术。这些技术可以对模型参数施加一些约束或惩罚使得模型更倾向于选择简单或稀疏的解从而降低模型容量。使用交叉验证或早停等策略。这些策略可以通过划分数据集或监控验证误差等方式来评估不同容量的模型的性能并选择最优的容量。 6. 过拟合和欠拟合
在深度学习中过拟合和欠拟合是两种常见的模型训练问题它们都会影响模型的泛化能力即在新数据上的表现。
**过拟合overfitting**是指模型在训练数据集上表现很好但在测试数据集或未见过的数据上表现很差说明模型学习了训练数据中的噪声或无关信息而没有捕捉到数据背后的真实规律。过拟合通常发生在模型复杂度过高、训练数据量过少或训练时间过长的情况下。
**欠拟合underfitting**是指模型在训练数据集上表现不佳也无法在测试数据集或未见过的数据上表现好说明模型没有学习到足够的信号或有用信息而只是做了一些简单的拟合。欠拟合通常发生在模型复杂度过低、训练数据量过大或训练时间过短的情况下。
为了解决过拟合和欠拟合的问题我们需要在模型复杂度和数据量之间找到一个平衡点使得模型既能够充分学习数据中的信号又能够避免学习数据中的噪声。一些常用的方法有
使用验证集或交叉验证来评估模型性能和选择最优的超参数。使用正则化或权重衰减来惩罚模型参数的大小防止模型过于复杂。使用dropout或batch normalization等技术来随机干扰模型的训练过程增加模型的鲁棒性。使用数据增强或生成对抗网络等技术来扩充或生成更多的训练数据减少数据不足的风险。使用早停法或学习率衰减等策略来控制模型的训练时间防止模型过度拟合。 注一点点的过拟合并不是坏事。
7. 激活函数
深度学习中激活函数是一种添加到人工神经网络中的函数旨在帮助网络学习数据中的复杂模式。**激活函数可以增加神经网络的非线性使得神经网络可以逼近任何非线性函数从而提高网络的表达能力和泛化能力。**激活函数还可以影响网络的训练效率和稳定性例如避免梯度消失或爆炸、缓解过拟合等问题。
深度学习中常用的激活函数有很多种例如Sigmoid、Tanh、ReLU、Leaky ReLU、ELU等。不同的激活函数有各自的优缺点和适用场景需要根据具体的问题和数据来选择合适的激活函数。
8. Dropout
在深度学习中Dropout是一种防止过拟合的技术它的原理是在训练过程中**随机地将一些神经元的输出置为零从而减少神经元之间的依赖性增强网络的泛化能力。**Dropout可以看作是一种模型集成的方法它相当于同时训练了多个不同的子网络并在测试时对它们取平均。Dropout可以有效地提高模型的性能和稳定性特别是在深层神经网络中。
Dropout只是在训练中把神经元进行丢弃并训练在预测时网络中的神经元并没有被丢弃。
Dropout前后输入的期望值是相同的。
9. 召回率 Recall
被正确识别为正样本的比例。
召回率是在深度学习中评估模型性能的一个指标它表示模型能够正确识别正类样本的比例。例如如果我们的模型是用来识别猫的图片那么召回率就是在所有真正是猫的图片中有多少被模型预测为猫的图片。召回率越高说明模型越能覆盖正类样本但也可能导致更多的误报。召回率的计算公式是 其中真正类是指模型正确预测为正类的样本数假负类是指模型错误预测为负类的样本数总的来说就是检测的所有样本中为正确的预测的百分率。
10. TP、TN、FP、FN
TPTrue positives:正样本被正确识别为正样本。 TNTrue negatives:负样本被正确识别为负样本。 FPFalse positives:假的正样本即负样本被错误识别为正样本。 FNFalse negatives:假的负样本即正样本被错误识别为负样本。
11. Precision
Precision就是在识别出来的正样本中True positives所占的比率。 PrecisionTP/(TPFP)
12. F1
F1 score为精确率与召回率的调和均值是用来衡量二分类模型精确度的一种指标。 F12*(Precision*Recall) / (PrecisionRecall)
F1是一种用来评估分类模型性能的指标它是精确率precision和召回率recall的调和平均数。
精确率表示预测为正类的样本中真正属于正类的比例召回率表示真正属于正类的样本中被预测为正类的比例。
F1的取值范围是0到1越接近1表示模型的性能越好越接近0表示模型的性能越差。
F1可以用来衡量二分类或多分类问题的效果也可以用来考虑类别不平衡的情况。
在深度学习中F1可以作为一个优化目标或一个评价指标帮助我们选择更合适的模型
13. 侧监督
侧监督side supervision是一种在深度学习中使用额外的监督信息来辅助训练模型的方法。侧监督的目的是利用一些与主任务相关但不完全相同的辅助任务来提高模型的泛化能力和解释性。侧监督的一种常见形式是在每个隐藏层添加一个分类器这样就可以为每个隐藏层提供直接的反馈促进特征的学习。
14. 消融分析
在深度学习中消融分析ablation analysis是一种用来评估模型性能的方法它通过移除或替换模型中的某些部分来观察这些部分对模型结果的影响。消融分析可以帮助我们理解模型的工作原理找出模型中最重要或最不重要的部分以及优化模型的结构和参数。消融分析有狭义和广义之分狭义的消融分析是指去除模型中的某个模块或层广义的消融分析是指改变模型中的任何一个因素比如超参数、输入特征、训练数据等。消融分析通常会设计一个表格列出不同的实验设置和对应的评价指标以便比较和分析。
15. 统一通道
统一通道uniform channel是一种在深度学习中使用相同的通道数来构建卷积神经网络的方法。统一通道的优点是可以减少模型的参数量降低计算复杂度提高模型的效率和泛化能力。统一通道的缺点是可能会损失一些特征的多样性和表达能力导致模型的性能下降。统一通道的应用场景是一些对计算资源和时间有限制的任务比如图像分类、目标检测、语音识别等
16. 批量归一化层
批量归一化层Batch NormalizationBN是一种深度学习中常用的数据归一化方法它可以加快模型的训练速度提高模型的泛化能力减少对初始化和正则化的依赖缓解梯度消失或爆炸的问题。
批量归一化层的作用是对每个小批量mini-batch的数据进行归一化处理使得每层的输入数据都服从均值为0方差为1的正态分布。这样可以减少数据之间的差异性降低数据分布的变化对网络训练的影响也就是缓解了内部协变量偏移Internal Covariate Shift的问题。
批量归一化层通常位于卷积层或全连接层与激活函数之间它需要学习两个参数一个是缩放因子gamma用于调整数据的数值范围另一个是平移因子beta 用于调整数据的偏移量。这两个参数可以保留数据原有的分布特征增强网络的表达能力。
批量归一化层在训练和推理时使用的均值和方差是不同的。在训练时使用当前小批量的均值和方差进行归一化在推理时使用训练时所有小批量的均值和方差的期望值进行归一化。这样可以保证推理时数据的稳定性。
17. 残差网络ResNet 加入了一个残差块。
当然可以将残差块放在不同的位置。 一共有两种不同的ResNet块
高宽减半的ResNet块步幅为2)后面接多个高宽不变的ResNet块
总结
·残差块使得很深的网络更加容易训练·甚至可以训练一千层的网络
·残差网络对随后的深层神经网络设计产生了深远影响无论是卷积类网络还是全连接类网络。18. 参数数量Param
在深度学习中参数数量是指模型中需要训练的参数的个数也就是模型的复杂度和大小的一种衡量指标。参数数量的多少会影响模型的性能、内存占用、训练速度和泛化能力等方面。参数数量的计算方法取决于模型的结构和层类型一般来说有以下几种常见的情况 对于全连接层FC**参数数量等于输入神经元的个数乘以输出神经元的个数再加上输出神经元的个数偏置项。**例如如果一个全连接层的输入是78400维的向量输出是4096维的向量那么该层的参数数量为(784001)*4096321126400。 对于卷积层Conv**参数数量等于输入通道数乘以卷积核的宽度、高度和输出通道数再加上输出通道数偏置项。**例如如果一个卷积层的输入是3通道的图像卷积核的大小是11×11输出通道数是96那么该层的参数数量为(3*11*111)*9634944。 对于池化层Pool参数数量为零因为池化层不涉及可训练的参数只是对输入进行下采样或者最大值、平均值等操作。 对于批量归一化层BN参数数量等于输出通道数的两倍因为该层需要学习每个通道的缩放因子和平移因子。 如果要计算整个模型的参数数量只需要将各个层的参数数量相加即可。有些深度学习框架如PyTorch可以自动计算模型的参数数量。如果要将参数数量换算成模型大小MB还需要考虑每个参数所占用的字节。一般来说深度学习中使用32位浮点数来存储参数那么每个参数占用4个字节。例如如果一个模型有6000万个参数那么它占用的内存大小为6000万*4/1024/1024228.88MB。
19. 计算量FLOPs
**Flops是一种用来衡量深度学习模型的计算复杂度和速度的指标它表示模型在前向传播时进行的浮点运算次数。**浮点运算包括加法、减法、乘法和除法等操作。**Flops的计算方法取决于模型的结构和层类型不同的层有不同的计算公式。**一般来说卷积层和全连接层是最耗费计算资源的层它们的Flops可以根据输入输出通道数、卷积核大小、特征图大小等因素来计算。
Flops可以用来评价模型的性能、内存占用、训练速度和泛化能力等方面。**一般来说Flops越高模型越复杂需要的计算资源越多但也可能表示更高的表达能力和精度。Flops越低模型越简单需要的计算资源越少但也可能表示更低的表达能力和精度。**Flops的选择需要根据具体的任务和数据集来确定一般需要通过实验来调整。
20. 卷积核 和 滤波器
在深度学习中卷积核和滤波器是两个相关但不完全相同的概念。
卷积核是指一个二维的权重矩阵它用于对输入数据进行逐元素的乘法和加法运算从而提取特征。
滤波器是指一个三维的结构它由多个卷积核堆叠而成每个卷积核对应输入数据的一个通道。滤波器可以看作是一个三维的卷积核它可以对输入数据的高度、宽度和深度进行卷积运算从而生成一个输出通道。
例如如果输入数据是一个RGB图像那么它有三个通道分别表示红色、绿色和蓝色。如果我们想要对这个图像进行卷积运算我们需要一个滤波器它由三个卷积核组成每个卷积核的大小是3×3分别对应输入图像的三个通道。这样我们就可以将这个滤波器看作是一个3×3×3的三维卷积核它可以在输入图像上滑动并在每个位置执行乘法和加法运算得到一个输出值。这个输出值就是输出通道中的一个元素。如果我们有多个滤波器那么我们就可以得到多个输出通道从而形成输出层。
21. 池化层
在深度学习框架中**池化层的步幅和池化窗口的大小一般是相同的。**当然也可以自己指定。
在深度学习中池化层是一种用于对输入数据进行降采样的操作它可以减少数据量和计算复杂度同时保留重要的特征信息。池化层通常位于卷积层之后可以提高模型的平移和旋转不变性防止过拟合。
池化层的常见类型有最大值池化、均值池化、随机池化、中值池化和分数阶最大值池化等它们有不同的计算方式和优缺点。
最大值池化是最常用的一种池化方式它选择每个区域中的最大值作为输出可以学习到图像的边缘和纹理结构。
均值池化是计算每个区域中的平均值作为输出可以减小估计均值的偏移提高模型的鲁棒性。
随机池化是根据每个区域中元素的概率随机选择一个值作为输出可以增加模型的多样性和泛化能力。
中值池化是选择每个区域中的中位数作为输出可以抗噪和保留边缘信息。
分数阶最大值池化是一种灵活的池化方式它可以根据给定的比例因子生成不规则的区域并进行最大值池化。
22. ResNet34
ResNet34是一种深度残差神经网络它是ResNet的一种变体由34层卷积层和快捷连接组成。
它和ResNet的联系是它都使用了残差模块即在每个卷积层后面添加一个快捷连接将输入和输出相加从而缓解了梯度消失和退化问题提高了模型的训练效率和泛化能力。
ResNet34的主要特点是
它使用了两层或三层的卷积层作为基本的残差模块每个卷积层后面都有一个批量归一化层和一个ReLU激活函数。它在每个残差模块之间使用了步长为2的卷积层或最大池化层来降低特征图的大小并增加输出通道数。它在每个残差模块的快捷连接上使用了1×1的卷积层来匹配输入和输出的通道数和大小。它在最后使用了一个平均池化层和一个全连接层来得到最终的分类结果。
23. 1x1的卷积层 和 全连接层
**当输入数据的尺寸是1×1时1x1的卷积层和全连接层的数学原理是一样的都是对输入向量和权重矩阵进行乘法和加法运算得到输出向量。**这时卷积核的个数就是全连接层的神经元的个数。**当输入数据的尺寸大于1×1时1x1的卷积层和全连接层的输出尺寸就不一样了1x1的卷积层会保持输入数据的高度和宽度只改变通道数而全连接层会将输入数据拉成一维向量输出尺寸为1×1。**这时全连接层可以等价于一个卷积核大小和输入数据相同个数为输出维度的卷积层。**1x1的卷积层和全连接层最大的区别就是输入尺寸是否可变全连接层的输入尺寸是固定的卷积层的输入尺寸是任意的。**这也决定了两者在模型中的作用不同全连接层通常用于最后的分类或回归任务而1x1的卷积层通常用于中间层进行特征变换或降维等操作。
24. 全连接层
在深度学习中全连接层是一种常用的神经网络层类型它可以将输入特征与每个神经元之间的连接权重进行矩阵乘法和偏置加法操作从而得到输出结果。**全连接层通常位于网络的最后一层用于输出预测结果如分类、回归等任务。**全连接层的参数数量非常大因此容易出现过拟合的情况。为了避免过拟合可以使用一些正则化方法如Dropout、L1/L2正则化等。
**全连接层(fully connected layersFC)在整个卷积神经网络中起到“分类器的作用。**如果说卷积层、池化层和激活函数层等操作是将原始数据映射到隐层特征空间的话全连接层则起到将学到的“分布式特征表示′映射到样本标记空间的作用。
简单来说它把特征值整合到一起,输出为一个值。这样做有一个什么好处:就是大大减少特征位置对分类带来的影响。
注:样本标记空间也叫样本输出空间 25. 逐点卷积
逐点卷积pointwise convolution是一种使用1x1的卷积核对输入特征图进行卷积操作的方法主要作用是对特征图进行升维或降维以增加或减少通道数。逐点卷积可以与深度卷积depthwise convolution结合形成深度可分离卷积depthwise separable convolution这种卷积方式可以减少参数量和计算量提高网络的效率。
26. Binary Focal Loss
在深度学习中binary focal loss是一种用于解决分类问题中的类别不平衡的损失函数。它是基于交叉熵损失的一种改进通过增加一个调节因子使得模型对于难以分类的样本给予更大的权重而对于容易分类的样本给予更小的权重。这样可以减少模型对于多数类别的过拟合提高对于少数类别的识别能力。
27. 动量 momentum
在深度学习中**动量momentum是一种用于加速梯度下降算法的技术它可以克服高曲率、小梯度或噪声梯度等问题提高优化的效率和稳定性。**动量的思想是在更新参数时不仅考虑当前的梯度还考虑之前的梯度的累积效果类似于物理中的动量守恒使得参数在一个方向上持续移动避免在其他方向上的震荡。动量的数学表达式为 28. 投影头
在深度学习中投影头projection head是一种用于提取特征或表征的网络结构它通常是一个或多个全连接层将输入的高维特征映射到一个低维的向量空间以便于进行后续的任务如对比学习、聚类、分类等。投影头的目的是将输入的特征转换为一个更有意义或更有区分度的表征以提高模型的性能。投影头的设计和参数取决于具体的应用场景和目标没有统一的标准。
29. Parties
在深度学习中**parties一般是指参与分布式训练的不同节点或实体它们之间需要通过通信来协调和同步模型的参数或梯度。**parties的数量、位置、连接方式等都会影响通信效率和模型性能。一般来说parties越多通信开销越大训练速度越慢但是可能会提高模型的泛化能力和鲁棒性。parties之间的连接方式可以是全连接、环形、星形、树形等不同的拓扑结构有不同的优缺点。parties的位置也会影响通信延迟和带宽例如跨地域或跨机构的分布式训练会面临更大的挑战。
30. 异质性
在深度学习中异质性heterogeneity是指不同的数据或模型之间存在的差异或多样性。异质性可以有不同的来源和表现比如
数据异质性指数据之间不满足独立同分布IID的性质即数据的分布可能随着时间、空间、来源等因素而发生变化或者数据之间存在某种相关性或依赖关系。数据异质性在现实世界中很常见比如用户的行为数据、传感器的采集数据、社交网络的结构数据等。数据异质性给机器学习的建模和训练带来了一些挑战比如如何处理数据的异质性、如何减少数据的偏差、如何提高模型的泛化能力等。模型异质性指模型之间存在的结构或参数上的差异。模型异质性可以是有意为之也可以是无法避免的。有意为之的模型异质性是为了提高模型的表达能力或适应不同的任务或场景比如混合模型、多任务学习、迁移学习等。无法避免的模型异质性是由于模型训练过程中的随机因素或分布式设置导致的比如初始化、优化算法、超参数、通信延迟等。模型异质性也会影响机器学习的效果和效率比如如何度量和评估模型的异质性、如何利用或减少模型的异质性、如何保证模型的一致性和稳定性等。
31. 模型评估
准确率Accuracy模型分类器到底分对了多少
sum(y y_hat) / y.size
精确率Precision返回的图片中正确的有多少
sum((y_hat 1) (y 1)) / sum(y_hat 1)
召回率Recall正确的图片里共有多少被返回了
sum((y_hat 1) (y 1)) / sum(y 1)
F1值(2*Precision*Recall) / (Precision Recall)
Fβ值(1β^2) * [(Precision*Recall) / (β^2 * Precision Recall)] 其中Recall的重要性是Precision的β倍
在实际的实验中并不能一味的要求召回率和精确率其中的一者高因为这两者是一个此消彼长的关系。
因此又有了F1值精确率Precision和召回率Recall的调和平均值。
另外F1值是Fβ值的一个特殊情况。
特殊地对于二分类来说以上四个指标的计算公式如下 32. Non-IID data非独立同分布数据
Non-IID data非独立同分布数据是指数据之间不满足独立同分布的性质即数据的分布可能随着时间、空间、来源等因素而发生变化或者数据之间存在某种相关性或依赖关系。Non-IID data在现实世界中很常见比如用户的行为数据、传感器的采集数据、社交网络的结构数据等。Non-IID data给机器学习的建模和训练带来了一些挑战比如如何处理数据的异质性、如何减少数据的偏差、如何提高模型的泛化能力等。为了解决这些问题一些新的机器学习框架和方法被提出比如联邦学习、迁移学习、元学习等。
33. dataidxs
dataidxs 是一个深度学习中常用的变量名表示数据集中的索引。不同的深度学习框架或算法可能有不同的定义和用法但一般来说dataidxs 是一个一维或二维的数组存储了数据集中每个样本或每个批次的索引。例如在 PyTorch 中dataidxs 可以是一个 DataLoader 对象的属性用于随机打乱数据集并按照指定的批次大小分割数据集。在 TensorFlow 中dataidxs 可以是一个 tf.data.Dataset 对象的方法用于返回数据集中每个元素的索引。dataidxs 的作用是方便我们对数据集进行切分、采样、分组等操作从而提高深度学习的效率和性能。
34. 权重衰减
权重衰减是一种常用的正则化技术它通过对模型的权重参数进行惩罚来实现正则化。权重衰减的作用是防止模型过拟合即在训练集上表现很好但在测试集或新数据上表现很差的情况。权重衰减如何抑制过拟合呢简单来说就是通过在损失函数中加入一个与权重平方成正比的项使得模型在优化损失的同时也要尽量减小权重的大小从而避免权重过大导致的过拟合。具体来说假设原来的损失函数为 L(θ)其中 θ 表示模型的所有权重参数那么加入权重衰减后新的损失函数为 L’(θ) L(θ) λ/2 * ∑θ_i^2其中 λ 是一个正的超参数用来控制权重衰减的强度∑θ_i^2 是所有权重参数的平方和。可以看出当 λ 较大时模型会更倾向于选择较小的权重参数从而降低模型的复杂度和拟合能力当 λ 较小时模型会更倾向于选择较大的权重参数从而提高模型的复杂度和拟合能力。因此我们需要根据数据集的大小和特征来合理地选择 λ 的值以达到最佳的泛化效果。
35. net.state_dict()
在PyTorch中一个模型 (torch.nn.Module)的可学习参数也就是权重和偏置值是包含在模型参数 (model.parameters ())中的一个状态字典就是一个简单的 Python 的字典其键值对是每个网络层和其对应的参数张量。
state_dict状态字典可以用来保存和加载模型方便我们在不同的设备或环境中使用模型。
例如我们可以使用以下代码来保存和加载模型的状态字典 保存模型的状态字典
torch.save(model.state_dict(), “model.pth”)加载模型的状态字典
# 创建一个相同结构的模型
model Net()
model.load_state_dict(torch.load(“model.pth”))关于net.state_dict()中的kv
k是键表示层的参数名例如’conv1.weight’或’fc.bias’v是值表示层的参数张量
36. with torch.no_grad()
with torch.no_grad()是一个用于神经网络推理阶段的上下文管理器它的作用是在计算张量时不需要计算梯度从而节省内存和提高效率。with torch.no_grad()的使用场景有以下几种
当我们只想使用训练好的模型进行预测或评估时我们可以使用with torch.no_grad()来避免对模型参数进行梯度更新这样可以保证模型的参数不会被改变也可以加快计算速度。当我们想要对带有梯度的张量进行原地运算in-place operation时我们可以使用with torch.no_grad()来阻断梯度的传播这样可以避免出现运行时错误RuntimeError: a leaf Variable that requires grad has been used in an in-place operation.。当我们想要创建一个不带梯度的张量时我们可以使用with torch.no_grad()来简化代码这样可以避免使用requires_gradFalse参数来创建张量。
37. ODS
ODS是一种深度学习的评估指标它表示最优数据集比例Optimal Dataset Scale。ODS的含义是在边缘检测任务中为所有图像设置同样的阈值使得整个数据集上的F-score最大。F-score是一种综合了精确率和召回率的指标它反映了边缘检测的效果。ODS可以用来比较不同的边缘检测算法或模型在同一个数据集上的性能。
38. OIS
OIS是一种深度学习的评估指标它表示最优图像比例Optimal Image Scale。OIS的含义是在边缘检测任务中为每一张图像设置不同的阈值使得该图像上的F-score最大。F-score是一种综合了精确率和召回率的指标它反映了边缘检测的效果。OIS可以用来比较不同的边缘检测算法或模型在单个图像上的性能。