Python中Namespace()函数详解

Written by

in

文章目录
  • 因为它让代码更易读、更像对象。例如: 字典写法(不好读): config[“lr”] config[“batch_size”] Namespace 写法(好读且常见于深度学习项目): config.lr config.batch_size 就像访问一个类的属性一样,看起来更清晰、更结构化。
  • 你可以把 Namespace 理解为: 一个可以动态添加字段的对象,它内部用字典存储数据,但对外提供点访问语法。 用“类”的感觉操作,但其实非常轻量。例如: from argparse import Namespace config = Namespace() config.lr = 0.01 config.test = “测试” print(f”测试{config.lr}”) print(f”文字{config.test}”) #测试0.01 #文字测试 内部机制其实就是: config.__dict__ == {“lr”: 0.01, “batch_size”: 64}
  • config = Namespace( datadir=”./data/rawdata/ted2020″, savedir=”./checkpoints/rnn”, source_lang=”en”, target_lang=”zh”, num_workers=2, max_tokens=8192, lr_factor=2, lr_warmup=4000, ) #访问方式: print(config.savedir) #./checkpoints/rnn 4. Namespace 和字典的关系 它们是可以互相替换的! 字典 → Namespace: cfg_dict = {“lr”: 0.001, “epoch”: 30} ​ config = Namespace(**cfg_dict) # 转为namespace对象 print(config.lr) # 0.001 print(config.epoch) # 30 #Namespace → 字典: config.__dict__
  • 用法 1:加载 YAML 配置 import yaml from argparse import Namespace cfg = yaml.safe_load(open(“config.yaml”)) #这里返回的是一个字典,如果不转的话,可能需要之前写的用 . 访问的方法要改一下。 config = Namespace(**cfg) 这让 config.yaml 中的内容变成: config.lr config.max_epoch 用法 2:命令行参数(argparse) argparse 默认返回的就是 Namespace: import argparse # 1. 创建解析器 parser = argparse.ArgumentParser(description=”训练模型示例”) # 2. 添加你希望接受的参数 parser.add_argument(“–lr”, type=float, default=0.01) # 学习率 parser.add_argument(“–batch_size”, type=int, default=64) # batch大小 config = parser.parse_args() #解析命令行参数 print(config.lr) 用法 3:训练脚本的“超参数容器”就像 config = Namespace( lr=0.001, max_epoch=30, batch_size=64, ) Namespace 就像一个“字典 + 对象”结合体。它比字典更好读,比类更轻量,因此非常适合存放程序配置和超参数。 到此这篇关于Python中Namespace()函数的文章就介绍到这了,更多相关Python Namespace()函数内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客! 您可能感兴趣的文章: Python命名空间namespace及作用域原理解析 python命名空间(namespace)简单介绍
  • 目录
    • 1. 为什么使用 Namespace?
    • 2. Namespace 的本质是什么?
    • 3. Namespace 示例
    • 5. Namespace 在深度学习中的三个主要用途

    在 Python 中,Namespace()argparse 模块提供的一个类,用于创建“命名空间对象”。它是一种 轻量级的容器对象,可以用来存储任意数量的属性。

    它的行为类似于 字典(dict),但有一个关键区别:

    Namespace 允许你通过“点操作符”访问数据,而字典必须用中括号。

    因为它让代码更易读、更像对象。例如:

    字典写法(不好读):

    config["lr"]
    config["batch_size"]

    Namespace 写法(好读且常见于深度学习项目):

    config.lr
    config.batch_size

    就像访问一个类的属性一样,看起来更清晰、更结构化。

    你可以把 Namespace 理解为:

    一个可以动态添加字段的对象,它内部用字典存储数据,但对外提供点访问语法。

    用“类”的感觉操作,但其实非常轻量。例如:

    from argparse import Namespace
    config = Namespace()
    config.lr = 0.01
    config.test = "测试"
    print(f"测试{config.lr}")
    print(f"文字{config.test}")
    #测试0.01
    #文字测试

    内部机制其实就是:

    config.__dict__ == {"lr": 0.01, "batch_size": 64}

    config = Namespace(
        datadir="./data/rawdata/ted2020",
        savedir="./checkpoints/rnn",
        source_lang="en",
        target_lang="zh",
        num_workers=2,
        max_tokens=8192,
        lr_factor=2,
        lr_warmup=4000,
    )
    #访问方式:
    print(config.savedir)
    #./checkpoints/rnn

    4. Namespace 和字典的关系

    它们是可以互相替换的!

    字典 → Namespace:

    cfg_dict = {"lr": 0.001, "epoch": 30}
    ​
    config = Namespace(**cfg_dict) # 转为namespace对象
    print(config.lr)   # 0.001
    print(config.epoch) # 30
    #Namespace → 字典:
    config.__dict__

    用法 1:加载 YAML 配置

    import yaml
    from argparse import Namespace
    cfg = yaml.safe_load(open("config.yaml"))  #这里返回的是一个字典,如果不转的话,可能需要之前写的用 . 访问的方法要改一下。
    config = Namespace(**cfg)

    这让 config.yaml 中的内容变成:

    config.lr
    config.max_epoch

    用法 2:命令行参数(argparse)

    argparse 默认返回的就是 Namespace:

    import argparse
    # 1. 创建解析器
    parser = argparse.ArgumentParser(description="训练模型示例")
    # 2. 添加你希望接受的参数
    parser.add_argument("--lr", type=float, default=0.01)        # 学习率
    parser.add_argument("--batch_size", type=int, default=64)    # batch大小
    config = parser.parse_args()  #解析命令行参数
    print(config.lr)

    用法 3:训练脚本的“超参数容器”就像

    config = Namespace(
        lr=0.001,
        max_epoch=30,
        batch_size=64,
    )

    Namespace 就像一个“字典 + 对象”结合体。它比字典更好读,比类更轻量,因此非常适合存放程序配置和超参数。

    到此这篇关于Python中Namespace()函数的文章就介绍到这了,更多相关Python Namespace()函数内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客!

    您可能感兴趣的文章:

    • Python命名空间namespace及作用域原理解析
    • python命名空间(namespace)简单介绍

    站内搜索