如何打印PyTorch单个层的可训练参数总数?
解决PyTorch单个层可训练参数总数的统计问题
你之前用conv_layer.parameters()得到的是生成器对象,它只是用来遍历模型参数的迭代器,无法直接给出参数总数。要统计可训练参数总数,需要遍历每个参数并计算其元素数量之和,具体方法如下:
方法1:直接统计可训练参数总数
使用numel()方法获取每个参数张量的元素个数,再求和:
import torch.nn as nn conv_layer = nn.Conv2d(in_channels=3, out_channels=16, kernel_size=3) # 统计所有可训练参数的总数 total_trainable_params = sum(p.numel() for p in conv_layer.parameters() if p.requires_grad) print(total_trainable_params) # 输出:448
p.numel():返回单个参数张量的元素数量if p.requires_grad:仅统计可训练参数(默认卷积层的weight和bias都是可训练的,此条件可确保排除被冻结的参数)
方法2:查看每个参数的细节(可选)
如果想了解每个参数的名称、形状和数量,可以用named_parameters()遍历:
for name, param in conv_layer.named_parameters(): print(f"参数名: {name}, 形状: {param.shape}, 元素数: {param.numel()}")
输出结果:
参数名: weight, 形状: torch.Size([16, 3, 3, 3]), 元素数: 432 参数名: bias, 形状: torch.Size([16]), 元素数: 16
手动验证的话,卷积层参数公式为:(输入通道数×卷积核高×卷积核宽 + 偏置)×输出通道数,即(3×3×3 +1)×16 = 448,和代码计算结果一致。
内容的提问来源于stack exchange,提问作者cdahms
相关产品推荐
相关产品推荐

