如何在Python中查看PyTorch模型的每层参数量_利用torchsummary库实现

陌涛君_7114

陌涛君_7114

2026-05-26

575人浏览

原创

常见原因是传入了未实例化的模型类或state_dict(),而非已实例化并调用.to(device)的nn.module对象;input_size需为不含batch维度的tuple,如图像填(3,224,224),多输入或动态结构模型建议改用torchinfo。

如何在python中查看pytorch模型的每层参数量_利用torchsummary库实现

torchsummary.summary() 为什么报错说 model is not a Module

常见原因是传入了模型的 state_dict() 或者未实例化的类,而非实际的 nn.Module 对象。比如写成 summary(MyModel, ...)(没加括号)或 summary(model.state_dict(), ...),都会触发 TypeError: model must be a torch.nn.Module。

正确做法是确保传入已实例化、且已调用 .to(device) 的模型对象:

import torch
import torch.nn as nn
from torchsummary import summary
<p>class SimpleNet(nn.Module):
def <strong>init</strong>(self):
super().<strong>init</strong>()
self.conv = nn.Conv2d(3, 16, 3)
self.fc = nn.Linear(16 <em> 30 </em> 30, 10)</p><pre class="brush:python;toolbar:false;">def forward(self, x):
    x = self.conv(x)
    x = x.view(x.size(0), -1)
    return self.fc(x)

model = SimpleNet().to('cuda') # 必须实例化 + 指定设备 summary(model, input_size=(3, 32, 32)) # input_size 是 tuple,不是 batch 维度

input_size 参数到底怎么填,为什么总报错

input_size 是指单个样本的 shape,不含 batch 维度 —— 这是最常踩的坑。例如图像输入是 (B, 3, 224, 224),这里要填 (3, 224, 224);如果是文本 embedding 输入 (B, T, D),就填 (T, D)(注意顺序,torchsummary 默认按 (C, H, W) 或 (L, D) 解析)。

  • 必须是 tuple,不能是 list 或 torch.Size
  • 如果模型有多个输入(如多模态),torchsummary 原生不支持,得换 torchinfo
  • CPU 模型可直接用 input_size;GPU 模型必须先 .to('cuda'),否则会因设备不匹配报错

为什么 total params 显示为 0 或远小于预期

通常是因为模型里用了动态结构,比如条件分支中某些层在前向时未被调用(如 if training: 下的 dropout 层未生效)、或使用了未注册的参数(比如手动创建的 nn.Parameter 但没加到 self 下)。

另一个典型情况:模型含 torch.jit.script 或 DataParallel 包装。前者会让 torchsummary 无法遍历子模块;后者则可能把参数分散到 module.conv 而非 conv,导致统计遗漏。

python-parallelization
python-parallelization

将顺序 Python 代码转换为并行/并发实现,用于在需要并行化 Python 代码、提升性能时使用。

下载
  • 检查是否误用了 nn.DataParallel:改用 torch.nn.parallel.DistributedDataParallel 或直接删掉包装再 summary
  • 确认所有可学习参数都通过 self.xxx = nn.Linear(...) 方式定义,而非 self.weight = nn.Parameter(...) 后忘记 self.register_parameter
  • 临时加一句 print(list(model.named_parameters())) 对比参数名和 summary 输出,快速定位缺失层

替代方案:torchinfo 更可靠吗

是的。torchinfo(原 torchsummaryX)修复了多数 torchsummary 的限制:支持多输入、显示每层内存占用、兼容 JIT 和部分封装模型,API 也更一致。

安装与基本用法:

pip install torchinfo
from torchinfo import summary
<p>summary(model, input_size=(1, 3, 224, 224))  # 这里可以带 batch 维度了!</p>

它还会标出「Non-trainable parameters」,对冻结 backbone 的场景更实用。不过要注意:若模型 forward 中有 torch.cuda.amp.autocast 或自定义 CUDA kernel,仍可能无法准确推断 shape —— 这种时候就得手动 print param.numel() 累加。

真正难搞的是那些依赖运行时 shape 的模型(比如带 dynamic shape 的 ONNX 导出逻辑),这时候 torchsummary 和 torchinfo 都会失效,只能靠插入 hook 或调试 forward 流程来逐层 inspect。

Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

python pytorch

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

2023.07.20

1771

4

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

2023.07.25

4604

7

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.31

1749

3

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

2023.08.03

27277

23

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.04

3287

5

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.04

3307

5

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

1203

5

python合并两个列表
python合并两个列表

Python是一种强大的编程语言,具有许多方便的功能和工具。在Python中,有多种方法可以合并两个列表。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.10

596

4

python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

2563

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Uvicorn官方安装与入门手册
Uvicorn官方安装与入门手册

共0课时 | 0人学习

Python uv官方项目管理指南
Python uv官方项目管理指南

共0课时 | 0人学习

Python uv官方安装与入门文档
Python uv官方安装与入门文档

共0课时 | 0人学习