2025.7.11学习日记【摸🐟第2天】

1.Hydra参考手册

Hydra其余部分知识点被放入了Hydra的参考手册中:https://hydra.cc/docs/advanced/terminology/#config-files ,参考手册中包含术语,Hydra命令行标记,覆盖语法,实例化对象,撰写API,配置搜索路径,应用程序打包,装饰main()函数,联动Notebook,联动单元测试。以下将简单介绍部分内容

1.1 术语

  • 输入配置
    输入配置构成了应用的主配置,通常是以YAML的格式存在于文件系统(yaml)和Python模块中(class)

1.2 main()装饰器

先写一点前言,装饰器是Python的特点之一,他的基本原理是嵌套函数,嵌套函数的编写模板如下:

def decorator(func:Callable)->Callable:
    # 类似定义新的变量一样,我们用关键字def定义一个新的函数
    def wrapper(*args,**kwargs)->None:
        print('Execute...')
        func()
        print('End...')
    # 类似于返回变量一样,我们返回这个定义的函数
    return wrapper

【注1】:装饰器是一个高阶函数,接受一个函数作为参数,并返回一个新的函数(被称为包装函数),包装函数用于增强原函数的功能.
从功能上讲,decorator是为了让函数返回函数,而在Python中函数其实被视为变量,如果想让decorator返回一个函数,就要在内部像定义变量一样定义一个函数,定义完毕后,返回这个新函数即可
【注2】:@simple_decorator被称为Python语法糖。等价于say_hello=decorator(func)
【注3】:*args被称为位置参数,简单来讲支持解析可变参数元组/列表,**kwagrs被称为关键字参数,支持解析可变参数字典.


现在是正式的hydra.main()的介绍。一般在正式运行自己的app时,先使用装饰器@hydra.main(version.base=None,config_path='.',config_name='config')
指定好输入的配置文件,经过hydra.main()和mydecorator装饰器返回增强过的my_app函数

1.3 Compose API

在官方介绍中谈到,Compose API支持在代码中的任意位置编写,以实现装饰器@hydra.main()的效果.但官方建议到
image
提供了三种手段,加上compose用以实现与@hydra.main()类似的效果.但除initialize()外,其余在新版本都被弃置了
initialize在源码中以类的形式存在,原型为
image
compose的原型为
image
组合使用的方法如下,initialize中指定version_base,config_path;compose中指定config_name
image
【注】with用于上下文管理,它确保资源(如文件、锁、数据库连接等)在使用后被正确释放或清理。主要是为了防止程序出现异常时,资源能够被释放with open('file_name','r') as file:也是这个道理
image

1.4 实例化对象

这是本章节最为重要的内容,关系到学习内容的配置.先来看看官方的说法,翻译过来就是让对象实例去决定行为
image
Hydra中创建实例或者调用函数的方法如下:
image
在instantiate API中如下:
image
在config参数中必须包含_target_,其余参数可以包含;agrs为位置参数;kwargs为关键字参数,用于覆盖(overrides)配置文件中的参数
如果要使用实例或者函数,Hydra输入配置(DictConf)必须要包含一个_target键,用于指明类或者方法
下面是简单的使用
image

posted @ 2025-07-12 23:59  BingUw  阅读(40)  评论(0)    收藏  举报