当前位置: 首页 > news >正文

网站重定向建设厅科技中心网站

网站重定向,建设厅科技中心网站,哈尔滨建设部网站,在线图片制作器#x1f4aa; 专业从事且热爱图像处理#xff0c;图像处理专栏更新如下#x1f447;#xff1a; #x1f4dd;《图像去噪》 #x1f4dd;《超分辨率重建》 #x1f4dd;《语义分割》 #x1f4dd;《风格迁移》 #x1f4dd;《目标检测》 #x1f4dd;《暗光增强》 专业从事且热爱图像处理图像处理专栏更新如下 《图像去噪》 《超分辨率重建》 《语义分割》 《风格迁移》 《目标检测》 《暗光增强》 《模型优化》 《模型实战部署》 总结不易多多支持呀感谢您的点赞收藏⭐评论✍️您的三连是我持续更新的动力 目录 一、学习率大小问题1.1 学习率太大问题1.2 学习率太小问题 二、设置合适的学习率2.1 学习率预热和逐步衰减2.2 使用学习率调度器2.2.1 StepLR2.2.2 MultiStepLR2.2.3 ExponentialLR2.2.4 CosineAnnealingLR2.2.5 ReduceLROnPlateau2.2.6 CyclicLR2.2.7 OneCycleLR2.2.8 CosineAnnealingWarmRestarts2.2.9 LambdaLR2.2.10 PolynomialLR2.2.11 代码 2.3 使用自适应学习率优化器2.4 学习率查找器2.5 经验和试验2.6 逐层调节学习率 三、梯度裁剪四、总结 一、学习率大小问题 1.1 学习率太大问题 在深度学习训练过程中如果设置的学习率过大会导致以下几个问题 训练过程不稳定 过大的学习率会导致权重更新幅度过大使得损失函数的值在每次迭代中剧烈波动。模型的参数可能不断在损失函数的不同区域之间跳跃导致训练过程不稳定甚至可能出现发散的情况。 无法收敛 由于每次更新的步伐太大模型可能永远无法到达或接近全局最优点或局部最优点。损失函数的值不会稳定在一个较低的范围内模型的性能无法提高训练也无法收敛。 梯度爆炸 在使用较大学习率时可能会导致梯度爆炸的问题。梯度值会变得非常大导致参数更新变得极其巨大。这不仅使得训练变得极其困难还可能使参数达到极端值进一步加剧训练的不稳定性。 性能不佳 即使模型勉强收敛最终得到的模型性能也往往不佳。这是因为参数在损失函数表面上跳跃过大无法精细调整到最优解附近导致模型的泛化能力较差表现不理想。 1.2 学习率太小问题 学习率衰减得太早可能会导致以下几种情况 训练过程变得缓慢 当学习率衰减得太早模型参数更新的步伐变小导致每次迭代的权重调整幅度减小。这可能会使得模型在全局最优解附近的搜索速度变得非常缓慢导致训练时间大大增加。 模型可能会停留在局部最优 如果学习率衰减得太早模型的参数更新步伐变小可能会使得模型更容易陷入局部最优而无法跳出这些局部最优去寻找全局最优解。这是因为较小的学习率降低了模型在损失函数表面进行大幅度搜索的能力。 未能充分利用初始高学习率阶段 在训练初期较高的学习率有助于模型快速收敛找到一个较优的解。如果学习率过早衰减模型未能充分利用初始高学习率阶段的快速收敛特性可能导致模型训练效率降低甚至不能达到理想的初始收敛效果。 模型训练不充分 在训练的早期阶段模型的参数还在快速调整过程中。如果此时学习率过早衰减模型可能还没有充分训练到一个较好的状态导致最终的模型性能不理想。早期的参数更新需要较大的步伐来适应复杂的损失表面结构而过早衰减的学习率会限制这种能力。 二、设置合适的学习率 选择和调整合适的学习率是深度学习训练中至关重要的一部分。 2.1 学习率预热和逐步衰减 在训练开始时使用较低的学习率然后逐步增加到目标学习率预热阶段接着在训练过程中逐步衰减学习率。 具体实现代码见下 import torch import torch.nn as nn import torch.optim as optim# 假设我们有一个简单的神经网络 model nn.Sequential(nn.Linear(10, 50),nn.ReLU(),nn.Linear(50, 1) )optimizer optim.SGD(model.parameters(), lr0.1) criterion nn.MSELoss()# 使用 StepLR 和学习率预热 scheduler optim.lr_scheduler.StepLR(optimizer, step_size10, gamma0.1)for epoch in range(100):optimizer.zero_grad()outputs model(torch.randn(32, 10))loss criterion(outputs, torch.randn(32, 1))loss.backward()optimizer.step()scheduler.step() # 更新学习率print(fEpoch {epoch1}, Loss: {loss.item()}, LR: {scheduler.get_last_lr()[0]}) 2.2 使用学习率调度器 PyTorch 提供了多种学习率调度器可以在训练过程中根据不同策略调整学习率。Pytorch提供的常用学习率调度器见下这些调度器的具体使用代码见本小结最后。 2.2.1 StepLR 按照固定步长衰减学习率。 import torch.optim as optim# StepLR: 每隔 step_size 个 epoch学习率乘以 gamma scheduler optim.lr_scheduler.StepLR(optimizer, step_size10, gamma0.1) 2.2.2 MultiStepLR 在预定义的 epoch 列表中进行学习率衰减。 # MultiStepLR: 在 milestones 列表中指定的 epoch学习率乘以 gamma scheduler optim.lr_scheduler.MultiStepLR(optimizer, milestones[30, 80], gamma0.1) 2.2.3 ExponentialLR 以指数衰减的方式调整学习率。 # ExponentialLR: 每个 epoch学习率乘以 gamma scheduler optim.lr_scheduler.ExponentialLR(optimizer, gamma0.9) 2.2.4 CosineAnnealingLR 使用余弦退火方法调整学习率。 # CosineAnnealingLR: 在 T_max 个 epoch 内从初始学习率衰减到 eta_min scheduler optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max50, eta_min0) 2.2.5 ReduceLROnPlateau 当监控的指标停止改善时降低学习率。也叫监控验证损失。 # ReduceLROnPlateau: 当指标如验证损失不再改善时降低学习率 scheduler optim.lr_scheduler.ReduceLROnPlateau(optimizer, modemin, factor0.1, patience10, verboseTrue) 2.2.6 CyclicLR 在指定的范围内循环调整学习率。 # CyclicLR: 在 base_lr 和 max_lr 之间循环学习率 scheduler optim.lr_scheduler.CyclicLR(optimizer, base_lr0.001, max_lr0.01, step_size_up2000, modetriangular) 2.2.7 OneCycleLR 在一个周期内调整学习率适合于一种特定的学习率调整策略。 # OneCycleLR: 在一个周期内从初始学习率调整到 max_lr 再回到初始学习率 scheduler optim.lr_scheduler.OneCycleLR(optimizer, max_lr0.01, steps_per_epochlen(dataloader), epochs10) 2.2.8 CosineAnnealingWarmRestarts 使用余弦退火方法并进行周期性重启。也叫热重启策略。 # CosineAnnealingWarmRestarts: 使用余弦退火并周期性重启 scheduler optim.lr_scheduler.CosineAnnealingWarmRestarts(optimizer, T_010, T_mult2) 2.2.9 LambdaLR 使用自定义的函数调整学习率。 # LambdaLR: 使用自定义函数调整学习率 lambda1 lambda epoch: 0.65 ** epoch scheduler optim.lr_scheduler.LambdaLR(optimizer, lr_lambdalambda1) 2.2.10 PolynomialLR PolynomialLR调度器在 PyTorch 1.12 版本中引入可以将学习率按多项式递减。 # PolynomialLR: 按多项式递减学习率 scheduler optim.lr_scheduler.PolynomialLR(optimizer, total_iters50, power2.0) 2.2.11 代码 以下是一个使用这些调度器的示例 import torch import torch.nn as nn import torch.optim as optim# 定义一个简单的模型 model nn.Sequential(nn.Linear(10, 50),nn.ReLU(),nn.Linear(50, 1) )# 使用 SGD 优化器 optimizer optim.SGD(model.parameters(), lr0.1) criterion nn.MSELoss()# 选择一个学习率调度器 scheduler optim.lr_scheduler.StepLR(optimizer, step_size10, gamma0.1)for epoch in range(100):optimizer.zero_grad()outputs model(torch.randn(32, 10))loss criterion(outputs, torch.randn(32, 1))loss.backward()optimizer.step()scheduler.step() # 更新学习率print(fEpoch {epoch1}, Loss: {loss.item()}, LR: {scheduler.get_last_lr()[0]}) 输出见下 2.3 使用自适应学习率优化器 自适应学习率优化器如 Adam、RMSprop、Adagrad能够根据梯度自动调整学习率避免手动调整的麻烦。 具体实现代码见下 import torch import torch.nn as nn import torch.optim as optimmodel nn.Sequential(nn.Linear(10, 50),nn.ReLU(),nn.Linear(50, 1) )# 使用 Adam 优化器 optimizer optim.Adam(model.parameters(), lr0.001) criterion nn.MSELoss()for epoch in range(100):optimizer.zero_grad()outputs model(torch.randn(32, 10))loss criterion(outputs, torch.randn(32, 1))loss.backward()optimizer.step()print(fEpoch {epoch1}, Loss: {loss.item()}, LR: {optimizer.param_groups[0][lr]}) 2.4 学习率查找器 使用学习率查找器如 fastai 提供的 LRFinder可以通过线性增长学习率来找到一个合适的初始学习率。 from fastai.vision.all import *# 假设我们有一个数据集和模型 dls ImageDataLoaders.from_folder(path, valid_pct0.2, item_tfmsResize(224)) learn cnn_learner(dls, resnet34, metricserror_rate)# 使用学习率查找器 learn.lr_find() 2.5 经验和试验 根据经验和实验选择合适的学习率通常可以从一个较大的值如 0.1开始观察损失和准确率的变化。如果模型发散损失剧增减小学习率如果收敛很慢增加学习率。 2.6 逐层调节学习率 在一些复杂的网络结构中可以对不同层使用不同的学习率。例如对较低层使用较低的学习率对较高层使用较高的学习率。 实例代码见下 import torch import torch.nn as nn import torch.optim as optimclass MyModel(nn.Module):def __init__(self):super(MyModel, self).__init__()self.conv1 nn.Conv2d(1, 32, 3, 1)self.conv2 nn.Conv2d(32, 64, 3, 1)self.fc1 nn.Linear(9216, 128)self.fc2 nn.Linear(128, 10)def forward(self, x):x self.conv1(x)x self.conv2(x)x torch.flatten(x, 1)x self.fc1(x)x self.fc2(x)return xmodel MyModel()optimizer optim.SGD([{params: model.conv1.parameters(), lr: 0.01},{params: model.conv2.parameters(), lr: 0.01},{params: model.fc1.parameters(), lr: 0.1},{params: model.fc2.parameters(), lr: 0.1} ], lr0.1)criterion nn.CrossEntropyLoss()for epoch in range(100):optimizer.zero_grad()outputs model(torch.randn(32, 1, 28, 28))loss criterion(outputs, torch.randint(0, 10, (32,)))loss.backward()optimizer.step()print(fEpoch {epoch1}, Loss: {loss.item()}) 三、梯度裁剪 梯度裁剪可以防止梯度爆炸。通过在每次反向传播后对梯度进行裁剪确保其不会超过设定的阈值。 实例代码 for epoch in range(100):optimizer.zero_grad()outputs model(torch.randn(32, 10))loss criterion(outputs, torch.randn(32, 1))loss.backward()# 梯度裁剪torch.nn.utils.clip_grad_norm_(model.parameters(), max_norm1.0)optimizer.step()print(fEpoch {epoch1}, Loss: {loss.item()}) 四、总结 以上就是深度学习模型训练中学习率参数设置大小问题及设置合适值的分析过程总结了一部分欢迎留言补充 感谢您阅读到最后总结不易多多支持呀 点赞收藏⭐评论✍️您的三连是我持续更新的动力 关注公众号「视觉研坊」获取干货教程、实战案例、技术解答、行业资讯
http://www.pierceye.com/news/133883/

相关文章:

  • 申请网站建设经费wordpress做商城网站
  • google下载app西安分类信息seo公司
  • 淘宝是什么语言做的网站手机网站开发+手机模拟器
  • 视频网站开发框架小说类网站功能建设
  • 网站规划与设计案例网站建设方案设计
  • 漯河网站建设费用成都网站建设重庆最加科技
  • 莱芜 网站wordpress 关闭警告
  • 深圳做棋牌网站建设哪家技术好建设一个网站的规划
  • 网站开发流程比较合理网站已经申请了域名 接下来怎么
  • 校园电商平台网站建设网站网址模板
  • 沈阳有资质做网站的公司温州做网站定制
  • wordpress codex网站seo和sem是什么意思
  • 建网站平台哪家好装修设计软件app排行
  • 网站开发文档撰写企业管理培训课程图片
  • 网站开发公司资质wordpress文章管理模板
  • 建筑网站知识大全江苏有哪些网站建设的公司
  • 江汉网站建设用js做网站登录
  • wordpress做购物网站河南省建设工程造价协会网站
  • wex5可以做网站吗爱射影院网站建设中
  • 网站建设多选题百度文库做好中心网站建设工作总结
  • 网站开发都用phpwordpress文章内图片幻灯片
  • 岳阳网站建设企业绿色大气漂亮dedecms茶叶企业网站
  • 网站建设使用虚拟主机的优点与缺点做百科网站
  • 网站被墙是谁做的电影网站模板
  • 合肥建设网官方网站网页设计网站制作公司
  • 外贸网站建设评价网站的营销方案
  • 邯郸专业做wap网站中国设计网址导航
  • 邯郸移动网站建设价格官方网站车联网是谁做
  • 哪个网站可以做高像素动图个人网站排版设计
  • 多少网站域名采用中文做一个电子商务网站在哪里做