Pytorch 统计模型参数量的操作 param.numel()


Posted in Python onMay 13, 2021

param.numel()

返回param中元素的数量

Pytorch 统计模型参数量的操作 param.numel()

统计模型参数量

num_params = sum(param.numel() for param in net.parameters())
print(num_params)

补充:Pytorch 查看模型参数

Pytorch 查看模型参数

查看利用Pytorch搭建模型的参数,直接看程序

import torch
# 引入torch.nn并指定别名
import torch.nn as nn
import torch.nn.functional as F

class Net(nn.Module):
    def __init__(self):
        # nn.Module子类的函数必须在构造函数中执行父类的构造函数
        super(Net, self).__init__()
        
        # 卷积层 '1'表示输入图片为单通道, '6'表示输出通道数,'3'表示卷积核为3*3
        self.conv1 = nn.Conv2d(1, 6, 3) 
        #线性层,输入1350个特征,输出10个特征
        self.fc1   = nn.Linear(1350, 10)  #这里的1350是如何计算的呢?这就要看后面的forward函数
    #正向传播 
    def forward(self, x): 
        print(x.size()) # 结果:[1, 1, 32, 32]
        # 卷积 -> 激活 -> 池化 
        x = self.conv1(x) #根据卷积的尺寸计算公式,计算结果是30,具体计算公式后面第二张第四节 卷积神经网络 有详细介绍。
        x = F.relu(x)
        print(x.size()) # 结果:[1, 6, 30, 30]
        x = F.max_pool2d(x, (2, 2)) #我们使用池化层,计算结果是15
        x = F.relu(x)
        print(x.size()) # 结果:[1, 6, 15, 15]
        # reshape,‘-1'表示自适应
        #这里做的就是压扁的操作 就是把后面的[1, 6, 15, 15]压扁,变为 [1, 1350]
        x = x.view(x.size()[0], -1) 
        print(x.size()) # 这里就是fc1层的的输入1350 
        x = self.fc1(x)        
        return x

net = Net()
for parameters in net.parameters():
    print(parameters)

输出为:

Parameter containing:
tensor([[[[-0.0104, -0.0555, 0.1417],
[-0.3281, -0.0367, 0.0208],
[-0.0894, -0.0511, -0.1253]]],


[[[-0.1724, 0.2141, -0.0895],
[ 0.0116, 0.1661, -0.1853],
[-0.1190, 0.1292, -0.2451]]],


[[[ 0.1827, 0.0117, 0.2880],
[ 0.2412, -0.1699, 0.0620],
[ 0.2853, -0.2794, -0.3050]]],


[[[ 0.1930, 0.2687, -0.0728],
[-0.2812, 0.0301, -0.1130],
[-0.2251, -0.3170, 0.0148]]],


[[[-0.2770, 0.2928, -0.0875],
[ 0.0489, -0.2463, -0.1605],
[ 0.1659, -0.1523, 0.1819]]],


[[[ 0.1068, 0.2441, 0.3160],
[ 0.2945, 0.0897, 0.2978],
[ 0.0419, -0.0739, -0.2609]]]])
Parameter containing:
tensor([ 0.0782, 0.2679, -0.2516, -0.2716, -0.0084, 0.1401])
Parameter containing:
tensor([[ 1.8612e-02, 6.5482e-03, 1.6488e-02, ..., -1.3283e-02,
1.8715e-02, 5.4037e-03],
[ 1.8569e-03, 1.8022e-02, -2.3465e-02, ..., 1.6527e-03,
2.0443e-02, -2.2009e-02],
[ 9.9104e-03, 6.6134e-03, -2.7171e-02, ..., -5.7119e-03,
2.4532e-02, 2.2284e-02],
...,
[ 6.9182e-03, 1.7279e-02, -1.7783e-03, ..., 1.9354e-02,
2.1105e-03, 8.6245e-03],
[ 1.6877e-02, -1.2414e-02, 2.2409e-02, ..., -2.0604e-02,
1.3253e-02, -3.6008e-03],
[-2.1598e-02, 2.5892e-02, 1.9372e-02, ..., 1.4159e-02,
7.0983e-03, -2.3713e-02]])
Parameter containing:
tensor(1.00000e-02 *
[ 1.4703, 1.0289, 2.5069, -2.2603, -1.5218, -1.7019, 1.2569,
0.4617, -2.3082, -0.6282])

for name,parameters in net.named_parameters():
    print(name,':',parameters.size())

输出:

conv1.weight : torch.Size([6, 1, 3, 3])
conv1.bias : torch.Size([6])
fc1.weight : torch.Size([10, 1350])
fc1.bias : torch.Size([10])

以上为个人经验,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python利用elaphe制作二维条形码实现代码
May 25 Python
python抓取网页中的图片示例
Feb 28 Python
Python访问纯真IP数据库脚本分享
Jun 29 Python
Python抓取电影天堂电影信息的代码
Apr 07 Python
10个Python小技巧你值得拥有
Sep 29 Python
python binascii 进制转换实例
Jun 12 Python
Python人工智能之路 之PyAudio 实现录音 自动化交互实现问答
Aug 13 Python
PyQT5 emit 和 connect的用法详解
Dec 13 Python
解决IDEA 的 plugins 搜不到任何的插件问题
May 04 Python
Python脚本实现监听服务器的思路代码详解
May 28 Python
Python基于pyjnius库实现访问java类
Jul 31 Python
详解Python 函数参数的拆解
Sep 02 Python
Python机器学习算法之决策树算法的实现与优缺点
Python爬虫基础之爬虫的分类知识总结
pytorch中的numel函数用法说明
May 13 #Python
pytorch损失反向传播后梯度为none的问题
如何使用Python实现一个简易的ORM模型
May 12 #Python
用python删除文件夹中的重复图片(图片去重)
May 12 #Python
Pyhton模块和包相关知识总结
You might like
linux环境apache多端口配置虚拟主机的方法深入介绍
2013/06/09 PHP
php验证码的制作思路和实现方法
2015/11/12 PHP
给大家分享几个常用的PHP函数
2017/01/15 PHP
php+javascript实现的动态显示服务器运行程序进度条功能示例
2017/08/07 PHP
记录Yii2框架开发微信公众号遇到的问题及解决方法
2018/07/20 PHP
utf-8编码引起js输出中文乱码的解决办法
2010/06/23 Javascript
javascript Array对象基础知识小结
2010/11/16 Javascript
浅析js中substring和substr的方法
2015/11/09 Javascript
快速掌握Node.js事件驱动模型
2016/03/21 Javascript
javascript 单例模式详解及简单实例
2017/02/14 Javascript
源码分析Vue.js的监听实现教程
2017/04/23 Javascript
基于BootStrap实现简洁注册界面
2017/07/20 Javascript
基于vue和react的spa进行按需加载的实现方法
2018/09/29 Javascript
微信小程序自定义toast弹窗效果的实现代码
2018/11/15 Javascript
Vue开发之封装上传文件组件与用法示例
2019/04/25 Javascript
解决微信小程序scroll-view组件无横向滚动的问题
2020/02/04 Javascript
通过实例解析vuejs如何实现调试代码
2020/07/16 Javascript
[01:27]2014DOTA2展望TI 剑指西雅图IG战队专访
2014/06/30 DOTA
python遍历类中所有成员的方法
2015/03/18 Python
Python中for循环控制语句用法实例
2015/06/02 Python
Python的组合模式与责任链模式编程示例
2016/02/02 Python
python虚拟环境virtualenv的安装与使用
2017/09/21 Python
Python代码实现KNN算法
2017/12/20 Python
如何在python中使用selenium的示例
2017/12/26 Python
详谈Python 窗体(tkinter)表格数据(Treeview)
2018/10/11 Python
python实现从文件中读取数据并绘制成 x y 轴图形的方法
2018/10/14 Python
Python删除n行后的其他行方法
2019/01/28 Python
Python3批量生成带logo的二维码方法
2019/06/24 Python
Python爬虫 urllib2的使用方法详解
2019/09/23 Python
使用python处理题库表格并转化为word形式的实现
2020/04/14 Python
video结合canvas实现视频在线截图功能
2018/06/25 HTML / CSS
专业毕业生个性的自我评价
2013/10/03 职场文书
物业管理员岗位职责范文
2013/11/25 职场文书
体育教育个人自荐信范文
2013/12/01 职场文书
大班幼儿评语大全
2014/04/30 职场文书
2015年班长个人工作总结
2015/04/03 职场文书