Open-FWI代码解析(4)

2024-02-25 00:52
文章标签 代码 解析 open fwi

本文主要是介绍Open-FWI代码解析(4),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. scheduler文件

        1.1 WarmupMultiStepLR类

        这部分代码主要是设置优化器学习率的参数, 如刚开始学习率较低(热身阶段), 中途恢复正常, 之后每过多少epoch降低到中途恢复正常学习率的多少倍

class WarmupMultiStepLR(torch.optim.lr_scheduler._LRScheduler):def __init__(self,optimizer,milestones,gamma=0.1,warmup_factor=1.0 / 3,warmup_iters=5,warmup_method="linear",last_epoch=-1,):''':param optimizer: 优化器:param milestones: 在第几个epoch降低学习率:param gamma: 降低gamma倍学习率:param warmup_factor:预热因子,即预热期间学习率相对于初始学习率的比例,默认为 1/3。:param warmup_iters:warmup 期间的 epoch 数量。:param warmup_method:warmup 策略。可以是 "constant" 或 "linear"。"constant" 表示在前几个 epoch 中保持学习率不变,"linear" 表示逐渐增加学习率。:param last_epoch:在初始化时,last_epoch 的初始值为 -1,表示还没有进行任何训练。随着每个 epoch 的结束,last_epoch 的值会逐渐增加,以便调度器可以根据当前的 epoch 来调整学习率。'''# 用于检查是否为升序排列if not milestones == sorted(milestones):raise ValueError("Milestones should be a list of" " increasing integers. Got {}",milestones,)# 这段代码用于检查 warmup_method 是否为 "constant" 或 "linear" 中的一个if warmup_method not in ("constant", "linear"):raise ValueError("Only 'constant' or 'linear' warmup_method accepted""got {}".format(warmup_method))self.milestones = milestonesself.gamma = gammaself.warmup_factor = warmup_factorself.warmup_iters = warmup_itersself.warmup_method = warmup_method# super().__init__(optimizer, last_epoch)也行super(WarmupMultiStepLR, self).__init__(optimizer, last_epoch)def get_lr(self):warmup_factor = 1if self.last_epoch < self.warmup_iters:if self.warmup_method == "constant":warmup_factor = self.warmup_factorelif self.warmup_method == "linear":alpha = float(self.last_epoch) / self.warmup_iterswarmup_factor = self.warmup_factor * (1 - alpha) + alphareturn [base_lr *warmup_factor *self.gamma ** bisect_right(self.milestones, self.last_epoch)for base_lr in self.base_lrs]if __name__ == '__main__':print('---------------------')# optimizer:需要进行学习率调整的优化器。# milestones:一个升序排列的列表,表示需要调整学习率的 epoch。# gamma:每次调整时,学习率将乘以 gamma。# warmup_factor:warmup 期间,学习率将逐渐从初始值增加到原始学习率的一部分。该参数指定增加到原始学习率的比例。# warmup_iters:warmup 期间的 epoch 数量。# warmup_method:warmup 策略。可以是 "constant" 或 "linear"。"constant" 表示在前几个 epoch 中保持学习率不变,"linear" 表示逐渐增加学习率。# 以下是调用上述代码的一个示例# import torch# import torch.optim as optim# from bisect import bisect_right# import scheduler# model = YourModel()设置模型# optimizer = optim.SGD(model.parameters(), lr=0.1)# 定义学习率调整策略# milestones = [30, 60, 90]  # 在第30、60、90个epoch调整学习率# scheduler = scheduler.WarmupMultiStepLR(optimizer, milestones,#                                         gamma=0.1, warmup_factor=0.3, warmup_iters=5,#                                         warmup_method="linear")# 训练循环# for epoch in range(100):#     # 在每个epoch开始前更新学习率#     scheduler.step()# #     # 训练模型#     train(train_loader)# #     # 验证模型#     validate(val_loader)

这篇关于Open-FWI代码解析(4)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


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

相关文章

Spring Boot 3.x 中 WebClient 示例详解析

《SpringBoot3.x中WebClient示例详解析》SpringBoot3.x中WebClient是响应式HTTP客户端,替代RestTemplate,支持异步非阻塞请求,涵盖GET... 目录Spring Boot 3.x 中 WebClient 全面详解及示例1. WebClient 简介2.

在MySQL中实现冷热数据分离的方法及使用场景底层原理解析

《在MySQL中实现冷热数据分离的方法及使用场景底层原理解析》MySQL冷热数据分离通过分表/分区策略、数据归档和索引优化,将频繁访问的热数据与冷数据分开存储,提升查询效率并降低存储成本,适用于高并发... 目录实现冷热数据分离1. 分表策略2. 使用分区表3. 数据归档与迁移在mysql中实现冷热数据分

C#解析JSON数据全攻略指南

《C#解析JSON数据全攻略指南》这篇文章主要为大家详细介绍了使用C#解析JSON数据全攻略指南,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、为什么jsON是C#开发必修课?二、四步搞定网络JSON数据1. 获取数据 - HttpClient最佳实践2. 动态解析 - 快速

Spring Boot3.0新特性全面解析与应用实战

《SpringBoot3.0新特性全面解析与应用实战》SpringBoot3.0作为Spring生态系统的一个重要里程碑,带来了众多令人兴奋的新特性和改进,本文将深入解析SpringBoot3.0的... 目录核心变化概览Java版本要求提升迁移至Jakarta EE重要新特性详解1. Native Ima

Python实现MQTT通信的示例代码

《Python实现MQTT通信的示例代码》本文主要介绍了Python实现MQTT通信的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1. 安装paho-mqtt库‌2. 搭建MQTT代理服务器(Broker)‌‌3. pytho

spring中的@MapperScan注解属性解析

《spring中的@MapperScan注解属性解析》@MapperScan是Spring集成MyBatis时自动扫描Mapper接口的注解,简化配置并支持多数据源,通过属性控制扫描路径和过滤条件,利... 目录一、核心功能与作用二、注解属性解析三、底层实现原理四、使用场景与最佳实践五、注意事项与常见问题六

MySQL进行数据库审计的详细步骤和示例代码

《MySQL进行数据库审计的详细步骤和示例代码》数据库审计通过触发器、内置功能及第三方工具记录和监控数据库活动,确保安全、完整与合规,Java代码实现自动化日志记录,整合分析系统提升监控效率,本文给大... 目录一、数据库审计的基本概念二、使用触发器进行数据库审计1. 创建审计表2. 创建触发器三、Java

nginx -t、nginx -s stop 和 nginx -s reload 命令的详细解析(结合应用场景)

《nginx-t、nginx-sstop和nginx-sreload命令的详细解析(结合应用场景)》本文解析Nginx的-t、-sstop、-sreload命令,分别用于配置语法检... 以下是关于 nginx -t、nginx -s stop 和 nginx -s reload 命令的详细解析,结合实际应

MyBatis中$与#的区别解析

《MyBatis中$与#的区别解析》文章浏览阅读314次,点赞4次,收藏6次。MyBatis使用#{}作为参数占位符时,会创建预处理语句(PreparedStatement),并将参数值作为预处理语句... 目录一、介绍二、sql注入风险实例一、介绍#(井号):MyBATis使用#{}作为参数占位符时,会

PostgreSQL的扩展dict_int应用案例解析

《PostgreSQL的扩展dict_int应用案例解析》dict_int扩展为PostgreSQL提供了专业的整数文本处理能力,特别适合需要精确处理数字内容的搜索场景,本文给大家介绍PostgreS... 目录PostgreSQL的扩展dict_int一、扩展概述二、核心功能三、安装与启用四、字典配置方法