pytorch中的numel函数用法说明


Posted in Python onMay 13, 2021

获取tensor中一共包含多少个元素

import torch
x = torch.randn(3,3)
print("number elements of x is ",x.numel())
y = torch.randn(3,10,5)
print("number elements of y is ",y.numel())

输出:

number elements of x is 9

number elements of y is 150

27和150分别位x和y中各有多少个元素或变量

补充:pytorch获取张量元素个数numel()的用法

numel就是"number of elements"的简写。

numel()可以直接返回int类型的元素个数

import torch 
a = torch.randn(1, 2, 3, 4)
b = a.numel()
print(type(b)) # int
print(b) # 24

通过numel()函数,我们可以迅速查看一个张量到底又多少元素。

补充:pytorch 卷积结构和numel()函数

看代码吧~

from torch import nn 
class CNN(nn.Module):
    def __init__(self, num_channels=1, d=56, s=12, m=4):
        super(CNN, self).__init__()
        self.first_part = nn.Sequential(
            nn.Conv2d(num_channels, d, kernel_size=3, padding=5//2),
            nn.Conv2d(num_channels, d, kernel_size=(1,3), padding=5//2),
            nn.Conv2d(num_channels, d, kernel_size=(3,1), padding=5//2),
            nn.PReLU(d)
        )
 
    def forward(self, x):
        x = self.first_part(x)
        return x
 
model = CNN()
for m in model.first_part:
    if isinstance(m, nn.Conv2d):
        # print('m:',m.weight.data)
        print('m:',m.weight.data[0])
        print('m:',m.weight.data[0][0])
        print('m:',m.weight.data.numel()) #numel() 计算矩阵中元素的个数
 
结果:
m: tensor([[[-0.2822,  0.0128, -0.0244],
         [-0.2329,  0.1037,  0.2262],
         [ 0.2845, -0.3094,  0.1443]]]) #卷积核大小为3x3
m: tensor([[-0.2822,  0.0128, -0.0244],
        [-0.2329,  0.1037,  0.2262],
        [ 0.2845, -0.3094,  0.1443]]) #卷积核大小为3x3
m: 504   # = 56 x (3 x 3)  输出通道数为56,卷积核大小为3x3
m: tensor([-0.0335,  0.2945,  0.2512,  0.2770,  0.2071,  0.1133, -0.1883,  0.2738,
         0.0805,  0.1339, -0.3000, -0.1911, -0.1760,  0.2855, -0.0234, -0.0843,
         0.1815,  0.2357,  0.2758,  0.2689, -0.2477, -0.2528, -0.1447, -0.0903,
         0.1870,  0.0945, -0.2786, -0.0419,  0.1577, -0.3100, -0.1335, -0.3162,
        -0.1570,  0.3080,  0.0951,  0.1953,  0.1814, -0.1936,  0.1466, -0.2911,
        -0.1286,  0.3024,  0.1143, -0.0726, -0.2694, -0.3230,  0.2031, -0.2963,
         0.2965,  0.2525, -0.2674,  0.0564, -0.3277,  0.2185, -0.0476,  0.0558]) bias偏置的值
m: tensor([[[ 0.5747, -0.3421,  0.2847]]]) 卷积核大小为1x3
m: tensor([[ 0.5747, -0.3421,  0.2847]]) 卷积核大小为1x3
m: 168 # = 56 x (1 x 3) 输出通道数为56,卷积核大小为1x3
m: tensor([ 0.5328, -0.5711, -0.1945,  0.2844,  0.2012, -0.0084,  0.4834, -0.2020,
        -0.0941,  0.4683, -0.2386,  0.2781, -0.1812, -0.2990, -0.4652,  0.1228,
        -0.0627,  0.3112, -0.2700,  0.0825,  0.4345, -0.0373, -0.3220, -0.5038,
        -0.3166, -0.3823,  0.3947, -0.3232,  0.1028,  0.2378,  0.4589,  0.1675,
        -0.3112, -0.0905, -0.0705,  0.2763,  0.5433,  0.2768, -0.3804,  0.4855,
        -0.4880, -0.4555,  0.4143,  0.5474,  0.3305, -0.0381,  0.2483,  0.5133,
        -0.3978,  0.0407,  0.2351,  0.1910, -0.5385,  0.1340,  0.1811, -0.3008]) bias偏置的值
m: tensor([[[0.0184],
         [0.0981],
         [0.1894]]]) 卷积核大小为3x1
m: tensor([[0.0184],
        [0.0981],
        [0.1894]]) 卷积核大小为3x1
m: 168 # = 56 x (3 x 1) 输出通道数为56,卷积核大小为3x1
m: tensor([-0.2951, -0.4475,  0.1301,  0.4747, -0.0512,  0.2190,  0.3533, -0.1158,
         0.2237, -0.1407, -0.4756,  0.1637, -0.4555, -0.2157,  0.0577, -0.3366,
        -0.3252,  0.2807,  0.1660,  0.2949, -0.2886, -0.5216,  0.1665,  0.2193,
         0.2038, -0.1357,  0.2626,  0.2036,  0.3255,  0.2756,  0.1283, -0.4909,
         0.5737, -0.4322, -0.4930, -0.0846,  0.2158,  0.5565,  0.3751, -0.3775,
        -0.5096, -0.4520,  0.2246, -0.5367,  0.5531,  0.3372, -0.5593, -0.2780,
        -0.5453, -0.2863,  0.5712, -0.2882,  0.4788,  0.3222, -0.4846,  0.2170]) bias偏置的值
  
'''初始化后'''
class CNN(nn.Module):
    def __init__(self, num_channels=1, d=56, s=12, m=4):
        super(CNN, self).__init__()
        self.first_part = nn.Sequential(
            nn.Conv2d(num_channels, d, kernel_size=3, padding=5//2),
            nn.Conv2d(num_channels, d, kernel_size=(1,3), padding=5//2),
            nn.Conv2d(num_channels, d, kernel_size=(3,1), padding=5//2),
            nn.PReLU(d)
        )
        self._initialize_weights()
    def _initialize_weights(self):
        for m in self.first_part:
            if isinstance(m, nn.Conv2d):
                nn.init.normal_(m.weight.data, mean=0.0, std=math.sqrt(2/(m.out_channels*m.weight.data[0][0].numel())))
                nn.init.zeros_(m.bias.data)
 
    def forward(self, x):
        x = self.first_part(x)
        return x
 
model = CNN()
for m in model.first_part:
    if isinstance(m, nn.Conv2d):
        # print('m:',m.weight.data)
        print('m:',m.weight.data[0])
        print('m:',m.weight.data[0][0])
        print('m:',m.weight.data.numel()) #numel() 计算矩阵中元素的个数
 
结果:
m: tensor([[[-0.0284, -0.0585,  0.0271],
         [ 0.0125,  0.0554,  0.0511],
         [-0.0106,  0.0574, -0.0053]]])
m: tensor([[-0.0284, -0.0585,  0.0271],
        [ 0.0125,  0.0554,  0.0511],
        [-0.0106,  0.0574, -0.0053]])
m: 504
m: tensor([0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
        0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
        0., 0., 0., 0., 0., 0., 0., 0.])
m: tensor([[[ 0.0059,  0.0465, -0.0725]]])
m: tensor([[ 0.0059,  0.0465, -0.0725]])
m: 168
m: tensor([0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
        0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
        0., 0., 0., 0., 0., 0., 0., 0.])
m: tensor([[[ 0.0599],
         [-0.1330],
         [ 0.2456]]])
m: tensor([[ 0.0599],
        [-0.1330],
        [ 0.2456]])
m: 168
m: tensor([0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
        0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
        0., 0., 0., 0., 0., 0., 0., 0.])

以上为个人经验,希望能给大家一个参考,也希望大家多多支持三水点靠木。如有错误或未考虑完全的地方,望不吝赐教。

Python 相关文章推荐
python实现ftp客户端示例分享
Feb 17 Python
用python代码做configure文件
Jul 20 Python
python base64 decode incorrect padding错误解决方法
Jan 08 Python
TensorFlow用expand_dim()来增加维度的方法
Jul 26 Python
Django数据库连接丢失问题的解决方法
Dec 29 Python
python使用Paramiko模块实现远程文件拷贝
Apr 30 Python
python pycharm的安装及其使用
Oct 11 Python
解决django接口无法通过ip进行访问的问题
Mar 27 Python
如何在sublime编辑器中安装python
May 20 Python
基于python实现判断字符串是否数字算法
Jul 10 Python
Django Auth用户认证组件实现代码
Oct 13 Python
python_tkinter弹出对话框创建
Mar 20 Python
pytorch损失反向传播后梯度为none的问题
如何使用Python实现一个简易的ORM模型
May 12 #Python
用python删除文件夹中的重复图片(图片去重)
May 12 #Python
Pyhton模块和包相关知识总结
python 下划线的多种应用场景总结
May 12 #Python
超级详细实用的pycharm常用快捷键
pycharm 如何查看某一函数源码的快捷键
You might like
MongoDB在PHP中的常用操作小结
2014/02/20 PHP
php+mysqli事务控制实现银行转账实例
2015/01/29 PHP
PHP中数据类型转换的三种方式
2015/04/02 PHP
YII Framework教程之异常处理详解
2016/03/14 PHP
Zend Framework实现留言本分页功能(附demo源码下载)
2016/03/22 PHP
php实现base64图片上传方式实例代码
2017/02/22 PHP
php数据结构之顺序链表与链式线性表示例
2018/01/22 PHP
PHP钩子实现方法解析
2019/05/21 PHP
InnerHtml和InnerText的区别分析
2009/03/13 Javascript
jquery获取input表单值的代码
2010/04/19 Javascript
基于jquery的动态创建表格的插件
2011/04/05 Javascript
关于eval 与new Function 到底该选哪个?
2013/04/17 Javascript
中文路径导致unitpngfix.js不正常的解决方法
2013/06/26 Javascript
jQuery学习笔记之toArray()
2014/06/09 Javascript
判断window.onload是否多次使用的方法
2014/09/21 Javascript
把Node.js程序加入服务实现随机启动
2015/06/25 Javascript
JS数组合并push与concat区别分析
2015/12/17 Javascript
JS组件Form表单验证神器BootstrapValidator
2016/01/26 Javascript
Jquery组件easyUi实现手风琴(折叠面板)示例
2016/08/23 Javascript
使用JS批量选中功能实现更改数据库中的status状态值(批量展示)
2016/11/22 Javascript
原生JS简单实现ajax的方法示例
2016/11/29 Javascript
Bootstrap响应式表格详解
2017/05/23 Javascript
JS实现快速比较两个字符串中包含有相同数字的方法
2017/09/11 Javascript
全站最详细的Vuex教程
2018/04/13 Javascript
对Vue2 自定义全局指令Vue.directive和指令的生命周期介绍
2018/08/30 Javascript
vue中使用protobuf的过程记录
2018/10/26 Javascript
Python实现将16进制字符串转化为ascii字符的方法分析
2017/07/21 Python
Python扩展内置类型详解
2018/03/26 Python
python+pandas生成指定日期和重采样的方法
2018/04/11 Python
手写一个python迭代器过程详解
2019/08/27 Python
使用Python实现NBA球员数据查询小程序功能
2020/11/09 Python
StubHub新西兰:购买和出售你的门票
2019/04/22 全球购物
波兰珠宝品牌:YES
2019/08/09 全球购物
意大利领先的奢侈品在线时装零售商:MCLABELS
2020/10/13 全球购物
Golang 对es的操作实例
2022/04/20 Golang
hive数据仓库新增字段方法
2022/06/25 数据库