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

首先, numel() 是 PyTorch 中一个用于获取张量中元素数量的方法,它可以统计模型的参数数量。

代码示例一:

import torch
import torch.nn as nn

class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        self.conv1 = nn.Conv2d(3, 6, kernel_size=5)
        self.pool = nn.MaxPool2d(kernel_size=2, stride=2)
        self.conv2 = nn.Conv2d(6, 16, kernel_size=5)
        self.fc1 = nn.Linear(16 * 5 * 5, 120)
        self.fc2 = nn.Linear(120, 84)
        self.fc3 = nn.Linear(84, 10)

    def forward(self, x):
        x = self.pool(torch.relu(self.conv1(x)))
        x = self.pool(torch.relu(self.conv2(x)))
        x = x.view(-1, 16 * 5 * 5)
        x = torch.relu(self.fc1(x))
        x = torch.relu(self.fc2(x))
        x = self.fc3(x)
        return x

net = Net()
model_parameters = filter(lambda p: p.requires_grad, net.parameters())
params = sum([np.numel() for np in model_parameters])
print(params)

在上述代码中,我们定义了一个基本的神经网络,包含了两个卷积层和三个全连接层。然后我们使用了 filter() 方法来过滤出需要计算参数量的参数,即 requires_grad 为 True 的参数。最后,我们使用了列表推导式的方法将所有参数的大小相加,得到了神经网络的参数量。

代码示例二:

import torch
import torch.nn as nn

class VGG16(nn.Module):
    def __init__(self, num_classes=1000):
        super(VGG16, self).__init__()
        self.features = nn.Sequential(
            nn.Conv2d(3, 64, kernel_size=3, stride=1, padding=1),
            nn.ReLU(inplace=True),
            nn.Conv2d(64, 64, kernel_size=3, stride=1, padding=1),
            nn.ReLU(inplace=True),
            nn.MaxPool2d(kernel_size=2, stride=2),
            nn.Conv2d(64, 128, kernel_size=3, stride=1, padding=1),
            nn.ReLU(inplace=True),
            nn.Conv2d(128, 128, kernel_size=3, stride=1, padding=1),
            nn.ReLU(inplace=True),
            nn.MaxPool2d(kernel_size=2, stride=2),
            nn.Conv2d(128, 256, kernel_size=3, stride=1, padding=1),
            nn.ReLU(inplace=True),
            nn.Conv2d(256, 256, kernel_size=3, stride=1, padding=1),
            nn.ReLU(inplace=True),
            nn.Conv2d(256, 256, kernel_size=3, stride=1, padding=1),
            nn.ReLU(inplace=True),
            nn.MaxPool2d(kernel_size=2, stride=2),
            nn.Conv2d(256, 512, kernel_size=3, stride=1, padding=1),
            nn.ReLU(inplace=True),
            nn.Conv2d(512, 512, kernel_size=3, stride=1, padding=1),
            nn.ReLU(inplace=True),
            nn.Conv2d(512, 512, kernel_size=3, stride=1, padding=1),
            nn.ReLU(inplace=True),
            nn.MaxPool2d(kernel_size=2, stride=2),
            nn.Conv2d(512, 512, kernel_size=3, stride=1, padding=1),
            nn.ReLU(inplace=True),
            nn.Conv2d(512, 512, kernel_size=3, stride=1, padding=1),
            nn.ReLU(inplace=True),
            nn.Conv2d(512, 512, kernel_size=3, stride=1, padding=1),
            nn.ReLU(inplace=True),
            nn.MaxPool2d(kernel_size=2, stride=2),
        )

        self.avgpool = nn.AdaptiveAvgPool2d((7, 7))
        self.classifier = nn.Sequential(
            nn.Linear(512 * 7 * 7, 4096),
            nn.ReLU(inplace=True),
            nn.Dropout(),
            nn.Linear(4096, 4096),
            nn.ReLU(inplace=True),
            nn.Dropout(),
            nn.Linear(4096, num_classes),
        )

    def forward(self, x):
        x = self.features(x)
        x = self.avgpool(x)
        x = x.view(x.size(0), -1)
        x = self.classifier(x)
        return x

vgg16 = VGG16()
model_parameters = filter(lambda p: p.requires_grad, vgg16.parameters())
params = sum([np.numel() for np in model_parameters])
print(params)

在上述代码中,我们定义了一个 VGG16 的深度神经网络,包含了 13 个卷积层和 3 个全连接层。我们依然使用了 filter() 方法来过滤出需要计算参数量的参数,即 requires_grad 为 True 的参数,并使用了列表推导式的方法将所有参数的大小相加,得到了深度神经网络的参数量。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Pytorch 统计模型参数量的操作 param.numel() - Python技术站

(0)
上一篇 2023年5月15日
下一篇 2023年5月15日

相关文章

  • 卷积神经网络的理解

    CNN中减少参数的2两个规则: 1、局部感知。生物学中,视觉皮层的神经元是局部感知信息的,只响应某些特定区域的刺激;图像的空间联系中,局部的像素联系较为紧密,距离较远的像素相关性较弱。   这个对应于算法中卷积核的大小,mnist手写识别在28*28的像素中取patch为5*5。 上图中:左边是全连接,右边是局部连接。 2、权值共享。每个神经元对应的参数(权…

    卷积神经网络 2023年4月7日
    00
  • 解决TensorFlow训练模型及保存数量限制的问题

    当训练大型神经网络时,我们通常需要保存多个检查点(checkpoints)以便于在训练过程中恢复。但是,TensorFlow在保存模型时有数量限制,这可能会导致无法保存更多的checkpoint。 下面是解决TensorFlow训练模型及保存数量限制的问题的完整攻略: 1. 创建保存模型的目录 首先,你需要创建一个目录来保存模型检查点(checkpoints…

    卷积神经网络 2023年5月15日
    00
  • 高斯核 卷积

    https://blog.csdn.net/dcrmg/article/details/52304446 原文:https://blog.csdn.net/weixin_39124778/article/details/78411314   计算   1)一维卷积: y(t)=g(k)*x(k)=$g(k)x(t-k) 先把函数x(k)相对于原点反折,然后向…

    2023年4月8日
    00
  • [pytorch][stepbystep]在pytorch上实现卷积神经网路(CNN)的裁剪(purning)

    简介 puring神经网络是一个古老的idea,具体可以追溯到1990年(与Yann LeCun的最佳脑损伤[1]工作)。这个想法是,在网络中的许多参数中,有些是冗余的,对输出没有太大贡献。 如果您可以根据它们贡献的数量对网络中的神经元进行排名,那么您可以从网络中删除低级神经元,从而产生更小更快的网络。 获得更快/更小的网络对于在移动设备上运行这些深度学习网…

    卷积神经网络 2023年4月7日
    00
  • 基于Keras中Conv1D和Conv2D的区别说明

    以下是关于“基于 Keras 中 Conv1D 和 Conv2D 的区别说明”的完整攻略,其中包含两个示例说明。 1. Conv1D Conv1D 是一种一维卷积神经网络,用于处理一维的输入数据,例如时间序列数据。Conv1D 的输入数据通常是一个形状为 (batch_size, steps, input_dim) 的张量,其中 batch_size 表示批…

    卷积神经网络 2023年5月16日
    00
  • 什么是卷积?

    以离散信号为例,连续信号同理。  已知 x[0] = a, x[1] = b, x[2]=c   已知 y[0] = i, y[1] = j, y[2]=k     下面通过演示求 x[n] * y[n]的过程,揭示卷积的物理意义。  第一步,x[n]乘以 y[0]并平移到位置 0:  第二步,x[n]乘以 y[1]并平移到位置 1:  第三步,x[n]乘以…

    2023年4月8日
    00
  • 相关算子和卷积

    1.相关算子(Correlation Operator) 定义:, 即 ,其中h称为相关核(Kernel). 步骤: 1)滑动核,使其中心位于输入图像g的(i,j)像素上 2)利用上式求和,得到输出图像的(i,j)像素值 3)充分上面操纵,直到求出输出图像的所有像素值     例: A = [17 24 1 8 15 23 5 7 14 16 4 6 13 …

    2023年4月8日
    00
  • 使用MXNet远程编写卷积神经网络用于多标签分类

    最近试试深度学习能做点什么事情。MXNet是一个与Tensorflow类似的开源深度学习框架,在GPU显存利用率上效率高,比起Tensorflow显著节约显存,并且天生支持分布式深度学习,单机多卡、多机多卡支持丰富,拥有着良好的技术架构。目前是亚马逊AWS的官方深度学习框架。由于其团队以MXNet产品本身为先,所以文档资料较少。现在还稍微多了一点。   1.…

    卷积神经网络 2023年4月7日
    00
合作推广
合作推广
分享本页
返回顶部