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日

相关文章

  • paper 158:CNN(卷积神经网络):Dropout Layer

    Dropout作用 在hinton的论文Improving neural networks by preventing coadaptation提出的,主要作用就是为了防止模型过拟合。当模型参数较多,训练数据较少时候,根据线性代数相关知识可以知道,当前模型可以非常完美的拟合我们的曲线。但该模型对测试数据集可能就没有很好的表现了,也就是说训练出的模型泛化能力很…

    卷积神经网络 2023年4月7日
    00
  • 卷积神经网络在tenserflow的实现

    卷积神经网络的理论基础看这篇:http://blog.csdn.net/stdcoutzyx/article/details/41596663/ 卷积神经网络的tenserflow教程看这里:http://www.tensorfly.cn/tfdoc/tutorials/deep_cnn.html 卷积神经网络(convolutional neural ne…

    2023年4月8日
    00
  • 利用卷积神经网络(VGG19)实现火灾分类(附tensorflow代码及训练集)

    源码地址 https://github.com/stephen-v/tensorflow_vgg_classify 1. VGG介绍 1.1. VGG模型结构 1.2. VGG19架构 2. 用Tensorflow搭建VGG19网络 3. 训练网络 参考文献 1.1. VGG模型结构 VGG网络是牛津大学Visual Geometry Group团队研发搭建…

    2023年4月8日
    00
  • 【44】1*1卷积讲解

    网络中的网络以及 1×1 卷积(Network in Network and 1×1 convolutions) 在架构内容设计方面,其中一个比较有帮助的想法是使用1×1卷积。 也许你会好奇,1×1的卷积能做什么呢?不就是乘以数字么?听上去挺好笑的,结果并非如此,我们来具体看看。     过滤器为1×1,这里是数字2,输入一张6×6×1的图片,然后对它做卷积…

    2023年4月5日
    00
  • Pytorch实现WGAN用于动漫头像生成

    下面是详细讲解“Pytorch实现WGAN用于动漫头像生成”的完整攻略。 概述 本攻略将介绍如何使用Pytorch实现WGAN算法,用于生成动漫头像。WGAN全称为Wasserstein GAN,是针对传统GAN中存在的固有问题,如模式崩溃(mode collapse)等进行改进而提出的一种生成对抗网络算法。 本教程将分为以下两个部分: 数据准备:包括数据集…

    卷积神经网络 2023年5月15日
    00
  • python人工智能使用RepVgg实现图像分类示例详解

    下面我将详细讲解“python人工智能使用RepVgg实现图像分类示例详解”的完整攻略,并包括两条示例说明。 RepVGG模型简介 RepVGG是一种基于卷积神经网络(CNN)的深度学习模型,它由Microsoft亚洲研究院的研究人员提出。该模型的主要特点是结构简单,可用于移动端设备和嵌入式设备,同时准确性也很高。RepVGG的结构基于VGG网络,但是使用了…

    卷积神经网络 2023年5月15日
    00
  • 卷积神经网络到底如何提取特征的

    记录一些网友写的博客或者帖子,供学习用,感谢! 用文氏图来理解卷积神经网络如何决定提取哪些特征:https://blog.csdn.net/kane7csdn/article/details/84890592 为什么卷积能够提取图像的特征?看完此文应该能够给你一个答案:https://blog.csdn.net/charleswangzi/article/d…

    卷积神经网络 2023年4月8日
    00
  • 卷积层的优点

    值得再度好多遍:https://www.cnblogs.com/wj-1314/p/9593364.html 摘抄自‘ 战争热诚’ 的博文   权值共享:    下图左:如果我们有1000×1000像素的图像,有1百万个隐层神经元,那么他们全连接的话(每个隐层神经元都连接图像的每一个像素点),就有1000x1000x1000000=10^12个连接,也就是1…

    2023年4月8日
    00
合作推广
合作推广
分享本页
返回顶部