当前位置: 首页 > 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.zqtcl.cn/news/996273/

相关文章:

  • 沂水建设局网站郑州企业微网站建设
  • 免费企业网站空间wordpress目录主题
  • 做网站的销售话术苏州网站设计哪家公司好
  • 足球梦网站建设的基本思路网站介绍词
  • 森马网站建设情况网站推广中应注意哪些事项
  • 简单网站vs2008不能新建网站
  • 牌具做网站可以吗海外广告投放公司
  • 响应式单页网站模板宁波企业自助建站
  • 网站广告收费标准装饰设计公司起名
  • 网站开发人员构成中国兰州网官网
  • 网站设计的提案旅游网站建设风格
  • 成都网站建设的公司做高大上分析的网站
  • 专业企业网站建设公司成都的网站
  • 广东省建设教育协会官方网站首页怎么设置wordpress头像
  • 图书网站建设论文页游中心
  • 建网站的流程及注意事项任务网站建设
  • 河北邯郸做网站的公司哪家好辽源市住房和城乡建设局网站
  • 网站系统建设技术服务费安康市网站建设
  • 网络运行管理系统seo关键词优化方法
  • 西安学校网站建设价格徐州网页关键词优化
  • 上海哪个网站能应聘做家教的营销网站中最重要的部分是
  • 一个设计网站多少钱WordPress的简约博客主题
  • 普通的宣传网站用什么做济南市工程建设技术监督局网站
  • 合肥网站建设公司还有不dw如何制作表格网页
  • 讯美智能网站建设自己域名做网站
  • 自己做网站优化韩国外贸平台
  • 齐河建设局网站长沙市住房和建设局官方网站
  • 萧山区住房和城乡建设局网站wordpress网站合并
  • 做背景网站网站建设与维护制作网页
  • 网站建设公司知名营销型企业网站项目策划表