【深度学习】日常笔记8

news2024/11/18 5:28:24

过拟合是指模型在训练集上表现良好,但在验证集和测试集上表现不佳的现象。这是因为模型在训练过程中过度学习了训练数据中的噪声和细节,而忽略了更一般的特征和规律,导致模型泛化能力不足。

具体来说,当模型在训练集上进行训练时,它会尝试通过学习训练数据中的特征来预测新的数据点。然而,如果模型过于复杂或过于依赖于训练数据中的噪声和细节,它可能会过度拟合这些特征,从而导致在验证集和测试集上的表现不佳。

例如,假设我们有一个简单的线性回归模型,它试图通过学习训练数据中的一些特征来预测新数据点的值。如果我们在训练集中添加了一些噪声或异常值,那么模型可能会过度拟合这些噪声和异常值,从而导致在验证集和测试集上的表现不佳。

因此,为了避免过拟合,我们需要采取一些措施来提高模型的泛化能力,例如增加正则化项、使用dropout等技术、减少模型的复杂度等

torch.optim.SGD(params, lr=lr).step()中的step()方法不需要参数,它是用来执行优化器的一步更新操作的。

在使用梯度下降算法进行优化时,通常需要执行以下几个步骤:

1. 计算损失函数关于模型参数的梯度。

2. 使用优化器更新模型参数,以减小损失函数的值。

step()方法就是负责执行第2步的操作。它根据计算得到的梯度信息和设置的学习率(lr)对模型的参数params进行更新。具体而言,它会根据优化器的算法(如随机梯度下降)来更新参数,使其朝着较小的损失方向移动。

可以在迭代训练过程中多次调用step()方法来进行多次参数更新。一般情况下,在每个训练批次或每个训练样本上都会调用一次step()方法。

需要注意的是,step()方法必须在反向传播(即计算梯度)之后调用,以确保最新的梯度信息被正确地应用于参数更新。

p140练习

5. 描述为什么涉及多个超参数更具挑战性。

答:

涉及多个超参数的模型训练更具挑战性,原因如下:

  1. 复杂性增加:当模型具有多个超参数时,需要调整的参数数量会大大增加。这意味着需要更多的数据来确定每个超参数的最佳值,从而增加了模型训练的复杂性。

  2. 难以解释:多个超参数可能导致模型的行为变得难以解释。在这种情况下,很难确定哪个超参数对模型性能的影响最大。这可能会导致模型在实际应用中的不确定性和不稳定性。

  3. 过拟合和欠拟合:由于存在多个超参数,模型可能更容易出现过拟合或欠拟合的问题。例如,如果某个超参数设置得过高,模型可能会过度拟合训练数据,导致在新数据上的泛化能力较差;相反,如果某个超参数设置得过低,模型可能会欠拟合训练数据,导致性能不佳。

  4. 计算资源需求:调整多个超参数通常需要更多的计算资源。例如,在深度学习中,需要为每个超参数单独训练一个子模型,并使用交叉验证等技术来选择最佳超参数组合。这会导致计算成本显著增加。

  5. 时间需求:为了找到最佳的超参数组合,可能需要进行多次迭代和实验。这可能需要大量的时间和精力,特别是在处理大量超参数的情况下。

总之,涉及多个超参数的模型训练更具挑战性,因为它涉及到更多的复杂性、难以解释的行为、过拟合和欠拟合的风险、计算资源需求以及时间需求。为了解决这些问题,研究人员和工程师需要采用更有效的方法来调整超参数,如网格搜索、随机搜索、贝叶斯优化等。

6. 如果想要构建多个超参数的搜索⽅法,请想出⼀个聪明的策略。

答:

要构建一个聪明的策略来搜索多个超参数,可以考虑以下步骤:

  1. 确定目标:首先需要明确模型的目标和性能指标。这将有助于确定需要调整的超参数类型和数量。

  2. 选择搜索空间:根据目标和性能指标,选择合适的超参数空间。例如,对于神经网络模型,可以选择学习率、批量大小、隐藏层大小等作为超参数。

  3. 网格搜索:使用网格搜索方法来搜索超参数空间。网格搜索是一种穷举搜索方法,它会遍历所有可能的超参数组合,并计算每个组合的性能指标。这种方法可以找到最优的超参数组合,但计算成本较高。

  4. 随机搜索:与网格搜索相比,随机搜索是一种更高效的搜索方法。它从超参数空间中随机选择一些超参数组合,并计算它们的性能指标。然后,根据性能指标选择最佳的超参数组合。这种方法比网格搜索更快,但可能无法找到全局最优解。

  5. 贝叶斯优化:贝叶斯优化是一种基于概率模型的优化方法。它通过利用先验知识和后验信息来更新超参数的估计值,以最小化预测误差。这种方法可以在较短的时间内找到较好的超参数组合,并且可以处理高维空间中的复杂问题。

  6. 交叉验证:在搜索过程中,可以使用交叉验证来评估不同超参数组合的性能。交叉验证可以将数据集分成训练集和测试集,并使用训练集来训练模型,然后使用测试集来评估模型的性能。这可以帮助我们更好地了解不同超参数组合对模型性能的影响。

总之,要构建一个聪明的策略来搜索多个超参数,需要选择合适的超参数空间、使用网格搜索、随机搜索或贝叶斯优化等方法来搜索最优的超参数组合,并使用交叉验证来评估不同超参数组合的性能。


nn.Sequential是PyTorch中的一个类,用于将多个神经网络层按顺序连接起来。它可以方便地构建深度神经网络模型。

nn.Linear是PyTorch中的一个类,用于定义线性层线性层是一种全连接层,可以将输入的向量映射到输出的向量。

交叉熵损失的公式中的y^通常指的是softmax函数给出的预测概率。

练习p141

1. 尝试添加不同数量的隐藏层(也可以修改学习率),怎么样设置效果最好?

代码:

  1. import torch  
  2. from torch import nn  
  3. from d2l import torch as d2l  
  4.   
  5. net = nn.Sequential(nn.Flatten(),  
  6.     nn.Linear(784, 256),  
  7.     nn.ReLU(),  
  8.     nn.Linear(256, 10))  
  9.   
  10. def init_weights(m):  
  11.     if type(m) == nn.Linear:  
  12.         nn.init.normal_(m.weight, std=0.01)  
  13.   
  14. net.apply(init_weights);  
  15. batch_size, lr, num_epochs = 256, 0.1, 10  
  16. loss = nn.CrossEntropyLoss(reduction='none')  
  17. trainer = torch.optim.SGD(net.parameters(), lr=lr)  
  18. train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size)  
  19. d2l.train_ch3(net, train_iter, test_iter, loss, num_epochs, trainer)  

答:要确定最佳的隐藏层数量和学习率,可以使用交叉验证(cross-validation)方法。

K折交叉验证是一种常用的模型评估方法,它将数据集分成K个子集,每次使用其中的K-1个子集作为训练集,剩下的一个子集作为测试集。然后重复这个过程K次,最后计算这K次实验的平均结果,以得到模型的最终评估结果。

以下是使用PyTorch中的K折交叉验证来评估不同隐藏层数量和学习率的效果,在代码中,KFold(n_splits=5)表示将数据集分成5份进行交叉验证。其中,n_splits参数指定了要将数据集分成多少份。在这个例子中,我们将数据集分成5份进行交叉验证,因此使用了KFold(n_splits=5)来创建一个K折交叉验证对象。

要确定最佳的隐藏层数量和学习率,可以使用交叉验证(cross-validation)方法。以下是使用PyTorch中的K折交叉验证来评估不同隐藏层数量和学习率的效果:

  1. import torch  
  2. from torch import nn  
  3. from d2l import torch as d2l  
  4. from sklearn.model_selection import KFold  
  5.   
  6. net = nn.Sequential(nn.Flatten(),  
  7.                     nn.Linear(784, 256),  
  8.                     nn.ReLU(),  
  9.                     nn.Linear(256, 10))  
  10.   
  11. def init_weights(m):  
  12.     if type(m) == nn.Linear:  
  13.         nn.init.normal_(m.weight, std=0.01)  
  14.   
  15. net.apply(init_weights)  
  16. batch_size, num_epochs = 256, 10  
  17. loss = nn.CrossEntropyLoss(reduction='none')  
  18. trainer = torch.optim.SGD(net.parameters(), lr=0.1)  
  19. train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size)  
  20. kf = KFold(n_splits=5) 将数据集分成5份进行交叉验证  
  21. best_acc = 0 初始化最佳准确率为0  
  22. for train_index, val_index in kf.split(train_iter): 对训练集和验证集进行划分  
  23.     X_train, X_val = [x[train_index] for x in train_iter], [x[val_index] for x in train_iter] 分别获取训练集和验证集的数据  
  24.     y_train, y_val = [y[train_index] for y in test_iter], [y[val_index] for y in test_iter] 分别获取训练集和验证集的标签  
  25.     X_train, y_train = torch.tensor(X_train), torch.tensor(y_train) 将数据转换为PyTorch张量格式  
  26.     X_val, y_val = torch.tensor(X_val), torch.tensor(y_val) 将数据转换为PyTorch张量格式  
  27.       
  28.     net.train() 在验证集上进行训练时需要将模型设置为训练模式  
  29.     trainer.zero_grad() 将梯度清零  
  30.     y_pred = net(X_val) 在验证集上进行预测  
  31.     loss = loss(y_pred, y_val).mean() 计算损失函数值  
  32.     loss.backward() 反向传播计算梯度  
  33.     trainer.step() 更新模型参数  
  34.     val_acc = (y_pred.argmax(dim=1) == y_val).float().mean() 在验证集上计算准确率  
  35.       
  36.     if val_acc > best_acc: 如果当前验证集上的准确率比之前的最佳准确率高,则更新最佳准确率和模型参数  
  37.         best_acc = val_acc  
  38.         best_net = net.state_dict() 保存当前模型参数到字典中  
  39.         d2l.save('best_net.pt', best_net) 将模型参数保存到文件中以备后续使用  

3. 尝试不同的⽅案来初始化权重,什么⽅法效果最好?

答:在神经网络中,权重初始化是一个非常重要的步骤,因为它会影响到模型的训练效果和泛化能力。以下是一些常用的权重初始化方法:

  1. 随机初始化(Random Initialization):将权重随机初始化为一个均匀分布或正态分布的随机数。这种方法简单易行,但可能会导致梯度消失或梯度爆炸的问题。

  2. Xavier/Glorot 初始化(Xavier/Glorot Initialization):根据输入和输出神经元的数量来确定权重的初始值。具体来说,对于输入层,将权重初始化为 其中 $n$ 是输入神经元的数量;对于隐藏层,将权重初始化为 $其中 n 是隐藏层神经元的数量。这种方法可以有效地缓解梯度消失和梯度爆炸问题,并且适用于各种类型的神经网络。

  3. He 初始化(He Initialization):根据输入和输出神经元的数量来确定权重的初始值。具体来说,对于输入层,将权重初始化为 其中 n 是输入神经元的数量;对于隐藏层,将权重初始化为 ,其中 n 是隐藏层神经元的数量。这种方法可以有效地缓解梯度消失和梯度爆炸问题,并且适用于各种类型的神经网络。

综合来看,Xavier/Glorot 初始化和 He 初始化是比较常用的权重初始化方法,它们可以有效地缓解梯度消失和梯度爆炸问题,并且适用于各种类型的神经网络。因此,建议使用这两种方法来进行权重初始化。


如何发现可以泛化的模式是机器学习的根本问题。并不是简单地让模型记住训练用的数据,而是要发现训练集中潜在总体的某种规律。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/707023.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

some files could not be transferre Xcode14.3打包问题

方法1: Command空格 搜索 该项目的 source“ ( r e a d l i n k " (readlink " (readlink"{source}”)" 替换为source“ ( r e a d l i n k − f " (readlink -f " (readlink−f"{source}”)" 即可。 方法2:切换Xcode 版本&#xff0…

C++面向对象丨4. 文件操作

操作系统:Windows IDE:Visual Studio 2019 文章目录 1 文本文件1.1 写文件1.2 写文件实例1.3 读文件1.4 读文件实例 2 二进制文件2.1 写文件2.2 写文件实例2.2 读文件2.4 读文件实例 程序运行时产生的数据都属于临时数据,程序一旦运行结束都会…

计算机图形硬件(二) 5 - 1 视频显示设备

现在,计算机图形学的功能与应用已经得到了广泛承认,大量的图形硬件和软件系统已经应用到了几乎所有的领域。通用计算机甚至许多手持计算器也已经普遍具备二维及三维应用的图形功能。在个人计算机上也可以配用多种交互输人设备及图形软件包。对于高性能应…

校园网网络命令拓扑命令+详解集合

各位读者好,我发现,最近的收藏量比较多,为了大家方便,添加了一些各部分图和细节。 目录 配置总流程 1、总体拓扑图网段 2、命令 (1)内网配置 1)二层交换机配置VLAN命令: 2&#x…

RabbitMQ学习笔记7(小滴课堂)SpringBoot2.X+SpringAMQP整合Rabbit

我们使用在线创建项目的方式: 这样就能快速的创建我们的项目了。 然后我们要去绑定我们的队列和交换机: 然后我们去写我们的测试类去测试一下: 我们去运行一下: 我们的依赖包不要引入错了。 我们可以看到我们的交换机和我们的队…

计算机基本组成和冯诺依曼机

计算机基本组成和冯诺依曼机 计算机的基本组成 计算机硬件组成 软件与硬件的逻辑等价性 冯诺依曼计算机硬件结构 冯诺依曼计算机工作原理 程序存储控制原理 计算机采用二进制的优势 高电平与低电平电压波动受影响的可能性会降低,抗干扰能力强 什么是冯诺依曼计算机…

基于无监督学习-关联规则的风险评估模型:更精准的预测!

一、引言 乳腺癌被认为是全球最常见的女性恶性肿瘤之一,对患者和公共健康造成了巨大的负担。准确评估乳腺癌风险是预防、诊断和治疗该疾病的关键。然而,乳腺癌风险估计面临着一些挑战,如数据的限制性、模型的复杂性和准确性等。因此&#xff…

JApiDocs|SpringBoot集成JApiDocs用以生成API文档

框架简介 JApiDocs和Swagger都是用于生成API文档的工具,它们各自有一些优点。下面是JApiDocs相较于Swagger的几个优点: 简单易用:JApiDocs相对来说更加简单易用,配置和使用都比较简单明了。它使用Java注解来描述API信息&#xff0…

手机兼职浪潮:揭秘在家赚钱的新机遇

科思创业汇 大家好,这里是科思创业汇,一个轻资产创业孵化平台。赚钱的方式有很多种,我希望在科思创业汇能够给你带来最快乐的那一种! 如今,随着智能手机的普及和互联网的发展,手机兼职已经成为一种新的浪…

新加坡 PBM 是可编程数字货币的重要创新

一周以前我们在卢旺达开会的时候,新加坡 MAS 在现场发布了 Purpose Bound Money (PBM) 的技术白皮书。行业媒体发了几条新闻,然后就放过去了。实际上 PBM 代表着货币当局对于数字货币编程问题迄今为止最深度的思考,其白…

MySQL:聚合函数(全面详解)

聚合函数 前言一、聚合函数介绍1、AVG和SUM函数2、 MIN和MAX函数3、COUNT函数 二、GROUP BY1、基本使用2、使用多个列分组3、 GROUP BY中使用WITH ROLLUP 三、HAVING1、基本使用2、WHERE和HAVING的对比 四、 SELECT的执行过程1、查询的结构2、SELECT执行顺序3、SQL 的执行原理 …

论好名字的重要性: Linux内核page到folio的变迁

一、引子 Once upon a time,Netscape的大拿 Phil Karlton曾经说过:“There are only two hard things in Computer Science: cache invalidation and naming things”,成为程序界流传甚广的名言,可见取名是计算机科学中最难的两件…

使用SSH远程直连Docker容器

文章目录 1. 下载docker镜像2. 安装ssh服务3. 本地局域网测试4. 安装cpolar5. 配置公网访问地址6. SSH公网远程连接测试7.固定连接公网地址8. SSH固定地址连接测试 转载自cpolar极点云文章:SSH远程直连Docker容器 在某些特殊需求下,我们想ssh直接远程连接docker 容器…

网约车进入饱和期,如祺出行继续蓄力还能泛起多大涟漪?

如祺出行的商业版图又有了新扩张。 6月28日,如祺出行正式开通厦门运营,这是继2022年6月进入长沙后,如祺出行在粤港澳大湾区之外聚焦运营的第二座城市。 而在此前,如祺出行宣布完成8.42亿元B轮融资。据了解,本轮融资为…

react-native-SerialPort 串口插件使用及配置

一、git地址和环境版本 (1)Git地址:https://github.com/Marcello168/react-native-SerialPort (2)node版本:14 (3)react-native版本:0.72 二、环境配置 (…

CentOS 安装及基本配置

文章目录 1、root 免密码输入自动登录2、设置 Terminal 计算机终端背景颜色3、关闭关闭锁屏4、You need to be root to perform this command. 1、root 免密码输入自动登录 注:设置免密登录需要使用超级用户权限,即 root 权限 (1&#xff0…

数字IC后端学习笔记:等效性检查和ECO

1.形式验证工具 对于某些电路的移植,一般不需要对新电路进行仿真验证,而可以直接通过EDA工具来分析该电路的功能是否与原电路一致,此种验证方法可以大量减少验证时间,提高电路的效率。 等效性检查(Equivalence Check&a…

Nuxt重构的填坑之路

我的个人网站是用vuecli写的,SEO不忍直视。于是用Nuxt重构了代码,过程中踩了无数坑,记录如下 一:body样式不生效 正常的body样式设置不能生效,需要在nuxt.config.js中配置 1、设置bodyAttrs的class属性,…

毕业论文设计题目大全(源码+论文)_kaic

1 四足步行机器人设计-机械部分 2 吸扫一体机器人外壳注塑模具设计 3 吸扫一体机器人控制系统设计设计 4 吸扫一体机器人机械结构设计 5 汽车雨刷器机械结构及控制系统软硬件电路设计 6 家庭智能防盗报警系统的设计 7 小区电气智能控制系统的设计 8 果蔬智能售卖…

第66篇:顶级APT后门Sunburst通信流量全过程复盘分析

Part1 前言 大家好,我是ABC_123。前面几周分享了Solarwinds供应链攻击事件的详细攻击流程及Sunburst后门的设计思路,但是多数朋友还是对Sunburst后门的通信过程还是没看明白。本期ABC_123就从流量的角度,把Sunburst后门的通信过程完整地复盘…