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实现简单点对点(p2p)聊天
Sep 13 Python
Python 实现某个功能每隔一段时间被执行一次的功能方法
Oct 14 Python
对Python 3.2 迭代器的next函数实例讲解
Oct 18 Python
python+openCV利用摄像头实现人员活动检测
Jun 22 Python
Python转换时间的图文方法
Jul 01 Python
python ftplib模块使用代码实例
Dec 31 Python
python 命名规范知识点汇总
Feb 14 Python
tensorflow 分类损失函数使用小记
Feb 18 Python
Python startswith()和endswith() 方法原理解析
Apr 28 Python
Python魔术方法专题
Jun 19 Python
聊聊pytorch测试的时候为何要加上model.eval()
May 23 Python
Python中rapidjson参数校验实现
Jul 25 Python
Python机器学习算法之决策树算法的实现与优缺点
Python爬虫基础之爬虫的分类知识总结
pytorch中的numel函数用法说明
May 13 #Python
pytorch损失反向传播后梯度为none的问题
如何使用Python实现一个简易的ORM模型
May 12 #Python
用python删除文件夹中的重复图片(图片去重)
May 12 #Python
Pyhton模块和包相关知识总结
You might like
php实现的CSS更新类实例
2014/09/22 PHP
为何说PHP引用是个坑,要慎用
2018/04/02 PHP
关于Anemometer图形化显示MySQL慢日志的工具搭建及使用的详细介绍
2020/07/13 PHP
用javascript实现改变TEXTAREA滚动条和按钮的颜色,以及怎样让滚动条变得扁平
2007/04/20 Javascript
用javascript为页面添加天气显示实现思路及代码
2013/12/02 Javascript
JS函数的定义与调用方法推荐
2016/05/12 Javascript
20分钟打造属于你的Bootstrap站点
2016/07/27 Javascript
js实现滑动到页面底部自动加载更多功能
2017/02/15 Javascript
javascript图片预览和上传(兼容IE)
2017/03/15 Javascript
详解Vue 普通对象数据更新与 file 对象数据更新
2017/04/26 Javascript
详解vue-router2.0动态路由获取参数
2017/06/14 Javascript
js的函数的按值传递参数(实例讲解)
2017/11/16 Javascript
vue的常用组件操作方法应用分析
2018/04/13 Javascript
原生JS实现动态加载js文件并在加载成功后执行回调函数的方法
2020/12/30 Javascript
JSONP原理及应用实例详解
2018/09/13 Javascript
vue-cli 首屏加载优化问题
2018/11/06 Javascript
JSON是什么?有哪些优点?JSON和XML的区别?
2019/04/29 Javascript
微信小程序复选框实现多选一功能过程解析
2020/02/14 Javascript
vue created钩子函数与mounted钩子函数的用法区别
2020/11/05 Javascript
Python实现类继承实例
2014/07/04 Python
Python的string模块中的Template类字符串模板用法
2016/06/27 Python
Python的标准模块包json详解
2017/03/13 Python
Python多线程threading和multiprocessing模块实例解析
2018/01/29 Python
Python多线程扫描端口代码示例
2018/02/09 Python
如何基于Python pygame实现动画跑马灯
2020/11/18 Python
HTML5的download属性详细介绍和使用实例
2014/04/23 HTML / CSS
应用艺术专业个人的自我评价
2014/01/03 职场文书
先进个人获奖感言
2014/01/24 职场文书
学生会干部自荐信
2014/02/04 职场文书
环境科学专业教师求职信
2014/07/12 职场文书
党的群众路线查摆剖析材料
2014/10/10 职场文书
2014年妇产科工作总结
2014/12/08 职场文书
大学生国家助学金感谢信
2015/01/23 职场文书
离婚起诉状范本
2015/05/19 职场文书
船舶调度指挥系统——助力智慧海事
2022/02/18 无线电
Oracle中日期的使用方法实例
2022/07/07 Oracle