24.8.26学习心得

2024-08-27 07:36
文章标签 26 学习心得 24.8

本文主要是介绍24.8.26学习心得,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

验证数据集(Validation Set)和测试数据集(Test Set)在机器学习和深度学习中都是非常重要的概念。它们各自有不同的用途和目的。下面详细解释两者之间的区别:

1. 验证数据集(Validation Set)

目的

  • 超参数调整:验证数据集主要用于调整模型的超参数,如学习率、正则化系数、网络层数等。
  • 模型选择:用于选择最佳模型。例如,在交叉验证中,通过在验证数据集上的表现来选择性能最好的模型。
  • 防止过拟合:帮助评估模型在未见过的数据上的表现,从而避免过拟合。

使用时机

  • 在训练过程中,通常会在每个epoch结束时使用验证数据集来评估模型的表现
  • 如果模型在验证数据集上的表现比在训练数据集上的表现差很多,说明模型可能存在过拟合。

示例: 假设你在训练一个神经网络,你需要调整学习率、批量大小等超参数。你可以使用验证数据集来评估不同超参数组合的效果,并选择最优的组合。

2. 测试数据集(Test Set)

目的

  • 最终模型评估:测试数据集用于评估最终选定模型的性能。一旦模型训练完成并通过验证数据集进行了调整,就可以使用测试数据集来评估模型在未知数据上的表现。
  • 真实世界表现:测试数据集提供了模型在真实世界数据上的表现估计。

使用时机

  • 在模型训练和超参数调整完成后,使用测试数据集进行最终的性能评估。
  • 通常只在模型训练和验证阶段结束后才会使用测试数据集。

示例: 假设你已经通过验证数据集选择了最佳模型,现在你需要知道这个模型在完全未见过的新数据上的表现。这时,你会使用测试数据集来评估模型的最终性能。

区别总结

  • 验证数据集

    • 用于调整模型的超参数。
    • 用于选择最佳模型。
    • 在训练过程中频繁使用。
    • 帮助防止过拟合。
  • 测试数据集

    • 用于最终模型评估。
    • 用于估计模型在真实世界数据上的表现。
    • 在模型训练和验证阶段结束后使用。
    • 只有一次机会使用,以避免数据泄露。

数据划分

通常,数据集会被划分为三个部分:

  1. 训练数据集(Training Set):用于训练模型。
  2. 验证数据集(Validation Set):用于调整超参数和选择模型。
  3. 测试数据集(Test Set):用于评估最终模型的性能。

K折交叉验证(K-Fold Cross Validation)是一种统计学中用来评估机器学习模型性能的技术。这种方法有助于更好地理解模型在未知数据上的泛化能力,并能减少模型过拟合的风险。下面是关于K折交叉验证的基本概念、步骤以及优缺点的详细讲解。

K折交叉验证的概念

K折交叉验证是一种将可用数据分成K个子集或“折叠”的方法。然后,进行K次迭代,在每次迭代中,其中一个折叠被保留作为验证数据集(测试集),而剩下的K-1个折叠被用作训练数据集。每个折叠都会被用作验证集一次,这样每个观察值都会恰好被用作验证一次。最终,交叉验证的分数是这K次结果的平均值。

K折交叉验证的步骤

  1. 数据准备:首先,将整个数据集随机打乱,然后将其均匀地分成K个子集或“折叠”。
  2. 模型训练与验证
    • 对于i = 1, ..., K:
      • 使用第i个折叠作为验证数据集。
      • 使用剩余的K-1个折叠的数据作为训练数据集。
      • 在训练数据集上训练模型。
      • 在验证数据集上评估模型性能。
  3. 性能度量:收集所有K次迭代中的性能度量(如准确率、精确度、召回率等),并对这些度量求平均,以得到模型的总体性能估计。

优点

  1. 减少方差:通过多次训练和验证,可以得到更稳定的性能估计。
  2. 充分利用数据:因为每个样本都被用作验证一次,所以这种方法能够充分利用有限的数据资源。
  3. 减少过拟合风险:通过在不同的数据分割上训练和验证模型,可以减少过拟合的风险。

缺点

  1. 计算成本较高:相较于单次的训练/验证拆分,K折交叉验证需要K次训练过程,因此计算开销更大。
  2. 可能仍然存在偏差:如果K值选择不当或者数据本身具有某些结构特征,则可能会导致性能估计的偏差。

在深度学习中,“权重衰减”(Weight Decay)是一种正则化技术,它被用来防止模型过拟合。权重衰减实际上是L2正则化的一种形式,通过在损失函数中加入一个额外的惩罚项来控制模型复杂度,从而使模型参数不会变得过大。

基本概念

权重衰减的主要目的是为了增加模型的泛化能力,使其不仅能在训练数据上表现良好,也能在未见过的数据上保持较好的性能。权重衰减通过对模型参数(权重)的大小施加惩罚,迫使它们趋向于较小的值,从而简化模型,减少过度拟合的风险。

实现原理

在没有正则化的标准监督学习任务中,我们的目标是最小化一个损失函数 LL,该损失函数衡量了模型预测与实际标签之间的差异。例如,在回归任务中,我们可能会使用均方误差(MSE)作为损失函数。

作用机制

权重衰减的工作方式是这样的:在每一次梯度下降更新过程中,除了考虑训练数据带来的梯度更新外,还会有一个额外的方向指向权重的原点(即所有权重都为零的状态),这个方向的强度由正则化系数 λλ 和权重本身的大小决定。

这意味着,在每次迭代中,权重都会朝向更小的值更新,因为较大的权重会带来更大的正则化惩罚。这样一来,权重就不会无限制地增长,从而帮助模型保持简单,并且在一定程度上避免了过拟合。

应用场景

权重衰减在深度学习中的应用场景非常广泛,几乎所有的深度学习模型都可以从中受益。特别是在数据量相对较少或者模型结构较为复杂的情况下,权重衰减能够有效地帮助模型学习到更加通用的特征表示,提高模型的稳定性和泛化能力。

总结

权重衰减通过在损失函数中引入一个依赖于权重大小的惩罚项,强制模型参数保持在合理范围内,从而帮助模型在训练过程中避免过拟合。这种技术特别适用于需要从有限数据中学习出强大表征能力的场景。通过调整正则化系数 λλ,我们可以控制正则化的效果,找到合适的模型复杂度与泛化能力之间的平衡点。

optimizer = optim.SGD(model.parameters(), lr=0.01, weight_decay=0.01)
  • 使用随机梯度下降优化器,并设置学习率和权重衰减

一个之前一直不太懂的点:

class LinearModel(nn.Module):def __init__(self):super(LinearModel, self).__init__()self.linear = nn.Linear(1, 1)  # 输入维度为1,输出维度为1def forward(self, x):return self.linear(x)
------------------------------------------------------------------
class SingleLayerNet(nn.Module):def __init__(self):super(SingleLayerNet, self).__init__()self.fc1 = nn.Linear(1, 1)  # 单个全连接层,输入维度为1,输出维度为1def forward(self, x):x = torch.relu(self.fc1(x))return x

 第一个:这是一个简单的线性模型,它只有一个线性层 nn.Linear(1, 1),没有激活函数。这意味着模型直接从输入映射到输出,没有非线性的变换。输入和输出都是单维的,因此非常适合线性关系的数据拟合任务。

第二个:这个模型也包含一个线性层 nn.Linear(1, 1),但是它在前向传播过程中应用了 ReLU 激活函数。ReLU 是一个非线性函数,定义为 max⁡(0,x),这使得模型能够捕捉非线性的关系。尽管这个模型也只有一个隐藏层,但由于引入了非线性激活,它比纯粹的线性模型有更多的表达能力。

总结一下,主要区别在于:

  • LinearModel 不使用任何激活函数,所以它是一个线性模型。
  • SingleLayerNet 使用了 ReLU 激活函数,使得模型具有非线性特性,可以拟合更复杂的函数。

在实际应用中,如果数据的关系确实是线性的,那么 LinearModel 可能就足够了。但如果数据存在非线性关系,或者需要模型具备更强的表达能力,那么 SingleLayerNet 会更适合。需要注意的是,在 SingleLayerNet 中,ReLU 应用于输出之前,但因为这里输出层也是唯一的隐藏层并且只有一维,这样的设计在实践中可能不是最佳选择,通常我们会为隐藏层设计更多的神经元,以便更好地捕捉数据中的复杂模式。

这篇关于24.8.26学习心得的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1111034

相关文章

Java EE学习心得

–Java EE学习心得     1.    称为编程专家的秘诀是: 思考-----编程--------思考------编程…….. 编程不能一步到位,不能一上来就编,必须先思考如何写,怎样写?然后再编程,完事后,再思考  我编的程序还有那些不好的地方和要改进的地方,可以增加写什么功能等等;然后再去编程; 2. 先搭建整体框架再抠细节,在编程中不管是什么要先做出来,再去问怎么做!即是:先K

每日一题~cf 970 div3 (A思维,B小模拟,C二分,D排列数建图成环,E 26个字母暴力+前缀和,F 逆元,G 数论gcd )

A 题意: 有 a 个1 ,b 个2.问是否能将这些数划分为两个数值相等的集合。 输出 YES 或者 NO —————— 问题等价于 将数组 分成两个数值相同的数组。所以sum 应该是偶数。也就是说 1 的个数是偶数。在i1的个数是偶数的情况下,将 2 分成两份,如果2 的个数是偶数,OK。如果是奇数那么需要1来补齐,如果1 的个数大于等于2那么可以补齐。(1 的个数是偶数,需要2个1来补齐,剩下

26 页高清大数据开发代码速查表,提升效率必备!【可下载】

各大互联网公司高价抢夺数据人才,为谋求长期发展、获得高薪,很多人转行到了大数据领域。这条路人才虽缺,但要成为优秀大数据工程师并不轻松:别的不说,光学习新技术,巩固旧知识,就需要耗费大量时间精力,实属不易。 为帮助大家提高学习效率,方便日后查找和使用,这里整理了一份大数据开发代码速查表资料,内容包括 Spark、Hadoop 及 Hive 等大数据开发主要知识点。 由于篇幅原因,下面只展示了速查表

26 页高清分布式集群代码速查表,提升效率必备!【可下载】

各大互联网公司高价抢夺海量数据处理、分布式系统开发人才,为谋求长期发展、获得高薪,很多人转行到了大数据、分布式、集群运维领域。这条路人才虽缺,但并不轻松:别的不说,光学习新技术,巩固旧知识,就需要耗费大量时间精力,实属不易。 为帮助大家提高学习和工作效率,方便日后查找和使用其中涉及的知识点,这里整理了一份分布式/集群开发、运维的代码速查表资料,内容包括 Spark、Hadoop 及 Hive 等

(176)时序收敛--->(26)时序收敛二六

1 目录 (a)FPGA简介 (b)Verilog简介 (c)时钟简介 (d)时序收敛二六 (e)结束 1 FPGA简介 (a)FPGA(Field Programmable Gate Array)是在PAL (可编程阵列逻辑)、GAL(通用阵列逻辑)等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了

『功能项目』DOTween动态文字【26】

打开上一篇25协程生成怪物模型的项目, 本章要做的事情是用DOTween插件做一个动态文字效果 首先在资源商店中免费下载一个DOTween插件 新建脚本:DowteenFlicker.cs 编写脚本: using DG.Tweening;using UnityEngine;using UnityEngine.UI;public class DowteenFli

振动分析-26-频域分析之深入理解功率谱和功率谱密度的计算过程

1 什么是PSD(功率谱密度) 功率谱密度(Power Spectral Density),以及其与Autopower(自功率谱)的区别。 1.1 PSD的定义 PSD——Power Spectral Density是表征信号的功率能量与频率的关系的物理量。 PSD经常用来研究随机振动信号。 PSD通常根据频率分辨率做归一化。 对于振动数据,PSD的单位通常是g^2/Hz。这个单位看起来不

基于Python的机器学习系列(26):PyTorch中的梯度计算

在本篇中,我们将探讨PyTorch的autograd功能,它为张量操作提供自动微分。我们将学习如何使用torch.autograd工具计算梯度并进行反向传播。 自动微分(Autograd)         PyTorch的autograd包自动计算张量的梯度。当一个张量的.requires_grad属性被设置为True时,PyTorch会追踪该张量的所有操作。在计算完成后,您可

2015年1月26日 格力PK小米

黑格尔的名言:世界上最悲剧的冲突,双方不存在对与错,只是两个都有充分理由的片面 郎教授说: 小米的雷军和格力的董明珠打赌10年后谁的销售额大,输了陪10亿 2013年小米销售额为格力的1/4,而2014年小米则是格力的1/2 2014年智能手机占有率小米14% 小米占全世界份额5.3% 雷军的三板斧 1.硬件组装都是最好的,高通的硬件,HP的屏