Pytorch代码:打印模型每层的参数数量和总参数量

这个代码片段定义了一个函数 print_model_parameters,它的作用是打印每层的参数数量以及模型的总参数量。下面是对这个函数的详细解释,重点解释 named_parameters,requires_grad 和 numel 参数的含义:

python 复制代码
# 打印每层的参数数量和总参数量
def print_model_parameters(model):
    total_params = 0
    for name, param in model.named_parameters():
        if param.requires_grad:
            print(f"{name}: {param.numel()} parameters")
            total_params += param.numel()
            print(f"For now parameters: {total_params}")
    print(f"Total parameters: {total_params}")

具体步骤和解释

  1. 定义和初始化:

    python 复制代码
    def print_model_parameters(model):
        total_params = 0

    这个函数接收一个模型对象 model,并初始化一个变量 total_params 用于累积总参数量。

  2. 遍历模型参数:

    python 复制代码
    for name, param in model.named_parameters():

    这里使用了 model.named_parameters() 方法,该方法返回一个生成器,生成模型中所有参数的名称和参数张量。它返回的是 (name, parameter) 形式的元组。

    • named_parameters:这是一个PyTorch模型的方法,它返回模型中所有参数的名称和参数本身。参数的名称是字符串类型,而参数是一个 torch.Tensor 对象。
  3. 判断参数是否需要梯度更新:

    python 复制代码
    if param.requires_grad:

    每个参数张量都有一个 requires_grad 属性,这个属性是一个布尔值。如果 requires_grad 为 True,表示这个参数在训练过程中需要计算梯度并进行更新。

    • requires_grad:这是一个布尔值属性,表示该参数是否需要在训练过程中计算梯度。如果是 True,则该参数会在反向传播时计算并存储梯度。
  4. 打印参数数量并累加:

    python 复制代码
    print(f"{name}: {param.numel()} parameters")
    total_params += param.numel()
    print(f"For now parameters: {total_params}")

    对于需要梯度的参数,打印其名称和参数数量,并将该参数的数量累加到 total_params 中。

    • numel:这是一个方法,返回张量中所有元素的数量。例如,一个形状为 (3, 4) 的张量调用 numel() 方法会返回 12,因为这个张量有12个元素。
  5. 打印总参数量:

    python 复制代码
    print(f"Total parameters: {total_params}")

    最后,打印模型的总参数数量。

总结

这个函数通过 model.named_parameters() 遍历模型的所有参数,检查每个参数的 requires_grad 属性,只有在 requires_grad 为 True 时才计算并打印参数数量,同时累加总参数量。 numel() 方法用于获取每个参数张量的元素数量,从而帮助统计参数数量。最后打印总参数量,提供了对模型规模的一个直观了解。

相关推荐
for_ever_love__15 小时前
PyTorch 张量与 autograd——自动求导怎么工作
pytorch·python·深度学习·自动求导
Είναι η κοπέλα1 天前
显存计算与模型选择:你的显卡能跑多大的模型
人工智能·pytorch·python·开源·conda
海天一色y2 天前
模型部署的「通用语」:ONNX 转换
pytorch·onnx
Thomas.Sir3 天前
第26课:工业零部件外观缺陷检测系统:从学术Demo到产线工程的重构实战
pytorch·ai
Zguigo3 天前
【CUDA6】CUDA Stream 是什么,为什么 CUDA 是异步执行,如何正确测量 GPU 时间以及多个任务如何重叠执行
人工智能·pytorch·深度学习
论文复现现场4 天前
RTX 3090 24GB 适合科研吗?单卡论文复现、PyTorch 显存检查与 OOM 排错
人工智能·pytorch·python·深度学习·cuda·rtx3090
论文复现现场4 天前
AutoDL、算家云与公有云 GPU 怎么选?环境复现、计费与断点恢复对比
pytorch·深度学习·云计算·gpu
盘古开天16665 天前
PPO算法代码实战(三):PyTorch从零实现PPO求解CartPole
人工智能·pytorch·算法
Είναι η κοπέλα5 天前
PyTorch 安装与验证
人工智能·pytorch·python
盼小辉丶5 天前
PyTorch强化学习实战(27)——进化策略在强化学习中的应用
人工智能·pytorch·深度学习·强化学习