【torch】parameters与named_parameters的区别

news2024/10/7 14:22:05

【torch】parameters与named_parameters的区别

前言

为了详细的查看网络的结构参数等,因此本文研究一下 parameters()named_parameters 的区别。

此示例属于从 nn.Module 中继承的成员函数。函数位于:[python环境路径]/lib/python3.8/site-packages/torch/nn/modules/module.py 文件中。

在这里插入图片描述

不要把时间浪费在无法控制的事情上。生命中最幸福的时刻之一是当你有勇气放下你无法改变的事情。

简要解释说明

从名称上看,named_parametersparameters 多了个 named ,已经能够显示出本质区别来了。

从返回的对象类型来看,parameters 返回的参数类型,named_parameters 返回的是元组,长度为2。其中第一维度为名称, 第二维度为参数类型。

parameters()named_parameters() 都是 PyTorch 中用于获取模型参数的函数,但它们有一些区别:

  • parameters() 返回一个生成器,用于迭代模型中的所有参数,每个参数都是一个 torch.nn.Parameter 类型对象;
  • named_parameters() 也返回一个生成器,用于迭代模型中的所有参数,但是每个参数都是一个元组,包含参数名称和 torch.nn.Parameter 类型对象。

完整代码示例

为了方便阐述,现提供完整的代码示例以增加读者对本质差异的深刻理解。该示例代码已在本地环境下进行了测试验证,如有任何问题,请在评论区留言并提供错误说明,以供改进。

import torch.nn as nn
import torch.nn.init as init

import torch.nn.functional as F
from torch.nn.modules.batchnorm import _BatchNorm


class BaseClassifier(nn.Module):

    def fresh_params(self, bn_wd):
        if bn_wd:
            return self.parameters()
        else:
            return self.named_parameters()
        
        
class MyClassifier(BaseClassifier):

    def __init__(self):
        super(MyClassifier, self).__init__()
        self.conv1 = nn.Conv2d(3, 16, 3)
        self.bn1 = nn.BatchNorm2d(16)
        self.fc1 = nn.Linear(4, 2)

    def forward(self, x):
        x = self.conv1(x)
        x = self.bn1(x)
        x = x.view(x.size(0), -1)
        x = self.fc1(x)
        return x


model = MyClassifier()

# 返回模型的所有参数
params = model.fresh_params(True)

# 返回模型的所有命名 和 参数
named_params = model.fresh_params(False)

print(f"params: {params}, named_params: {named_params}")

for n in params:
    print(f"type(n): {type(n)}, n.shape: {n.shape}")
    
for n in named_params:
    print(f"type(n): {type(n)}, len(n): {len(n)}, n[0]: {n[0]}, n[1].shape: {n[1].shape}")

输出:

params: <generator object Module.parameters at 0x7f4f93399e40>, named_params: <generator object Module.named_parameters at 0x7f4f93399eb0>
type(n): <class 'torch.nn.parameter.Parameter'>, n.shape: torch.Size([16, 3, 3, 3])
type(n): <class 'torch.nn.parameter.Parameter'>, n.shape: torch.Size([16])
type(n): <class 'torch.nn.parameter.Parameter'>, n.shape: torch.Size([16])
type(n): <class 'torch.nn.parameter.Parameter'>, n.shape: torch.Size([16])
type(n): <class 'torch.nn.parameter.Parameter'>, n.shape: torch.Size([2, 4])
type(n): <class 'torch.nn.parameter.Parameter'>, n.shape: torch.Size([2])
type(n): <class 'tuple'>, len(n): 2, n[0]: conv1.weight, n[1].shape: torch.Size([16, 3, 3, 3])
type(n): <class 'tuple'>, len(n): 2, n[0]: conv1.bias, n[1].shape: torch.Size([16])
type(n): <class 'tuple'>, len(n): 2, n[0]: bn1.weight, n[1].shape: torch.Size([16])
type(n): <class 'tuple'>, len(n): 2, n[0]: bn1.bias, n[1].shape: torch.Size([16])
type(n): <class 'tuple'>, len(n): 2, n[0]: fc1.weight, n[1].shape: torch.Size([2, 4])
type(n): <class 'tuple'>, len(n): 2, n[0]: fc1.bias, n[1].shape: torch.Size([2])

截图:
在这里插入图片描述
可以看到,named_parameters() 函数返回的不仅是参数本身,还包含了参数的名称。若需要获取参数的名称,建议使用 named_parameters() 函数。否则,可以使用 parameters() 函数。

参考文献

示例中的代码部分参考论文:
[1] JIA J, HUANG H, CHEN X, 等. Rethinking of Pedestrian Attribute Recognition: A Reliable Evaluation under Zero-Shot Pedestrian Identity Setting[M/OL]. arXiv, 2021[2023-06-30]. http://arxiv.org/abs/2107.03576. DOI:10.48550/arXiv.2107.03576.
代码位于:
@misc{BibEntry2023Oct,
title = {{Rethinking{ _ \_ _}of{ _ \_ _}PAR}},
year = {2023},
month = oct,
urldate = {2023-10-05},
language = {english},
note = {[Online; accessed 5. Oct. 2023]},
url = {https://github.com/valencebond/Rethinking_of_PAR}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1062169.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

角谱计算时的fftshift及其原理

做一个fft运算&#xff0c;第一个事先用fftshift对待变换的E0进行操作&#xff0c;第二个没有用fftshift&#xff0c;第三个没有用fftshift但是进行了相位手动修正&#xff1a; %%用fft进行角谱传输计算 %对比fft运算与傅里叶变换&#xff08;黎曼和&#xff09;的区别以及修正…

Nature Machine Intelligence | “化学元素知识+功能提示”双驱动,探索分子预测新方法

论文题目&#xff1a;Knowledge graph-enhanced molecular contrastive learning with functional prompt 论文链接&#xff1a;https://doi.org/10.1038/s42256-023-00654-0 项目地址&#xff1a;GitHub - HICAI-ZJU/KANO: Code and data for the Nature Machine Intelligence…

光纤掺杂浓度之间的转换计算方法

掺杂浓度表示形式 掺杂浓度是光纤光学中无源或有源掺杂光纤中最重要的参数之一。在文献中可以找到许多不同的方法来表示基于原子或摩尔的掺杂浓度。 化学元素基于原子或离子的定义是非常明确的。例如原子百分比&#xff08;atomic percentage&#xff0c;at.%&#xff09;、原…

爬虫为什么需要 HTTP 代理 IP?

前言 爬虫在互联网数据采集、分析和挖掘中扮演着至关重要的角色&#xff0c;但是对于目标网站而言&#xff0c;频繁的爬虫请求可能会对其服务器产生不小的负担&#xff0c;严重的情况甚至会导致网站崩溃或者访问受限。为了避免这种情况的发生&#xff0c;同时也为了保护客户端…

如何安全驾驭物联网视频革命

相机即将连接到您附近的连接设备。来自旧手机的廉价图像传感器正在涌入市场&#xff0c;并将视频带入物联网 (IoT)。 吸尘器、喂鸟器、联网汽车甚至智能烤箱现在都配备了摄像头&#xff0c;可以识别菜肴并建议剩余的烹饪时间。这是联网设备功能的重大转变&#xff0c;目前全球…

EasyXnote5关于批量绘图

专栏&#xff1a;EasyX图形化编程 文章目录 问题引入 绘制画面批量绘图解释批量绘图使用 问题引入 之前的讲解中&#xff0c;我们可以发现创建的窗体在进行动画的显示时会出现闪烁现象&#xff0c;本节课将会一步一步探讨如何解决&#xff0c;可以使以后学习中的动画效果更加流…

二项分布以及实现

文章目录 前言所谓二项分布就是只会产生两种结果的概率 1.概念 前言 所谓二项分布就是只会产生两种结果的概率 1.概念 下面是一个二项分布的的theano实现 import numpy as np import theano import theano.tensor as T from theano.tensor.nnet import conv from theano.ten…

【数据结构--八大排序】之快速排序

&#x1f490; &#x1f338; &#x1f337; &#x1f340; &#x1f339; &#x1f33b; &#x1f33a; &#x1f341; &#x1f343; &#x1f342; &#x1f33f; &#x1f344;&#x1f35d; &#x1f35b; &#x1f364; &#x1f4c3;个人主页 &#xff1a;阿然成长日记 …

MySQL——使用mysqldump备份与恢复数据

目录 1.mysqldump简介 2.mysqldump备份数据 2.1 备份所有数据库 2.2 备份一个/多个数据库 2.3 备份指定库中的指定表 3.mysqldump恢复数据 3.1 恢复数据库 3.2 恢复数据表 1.mysqldump简介 mysqldump命令可以将数据库中指定或所有的库、表导出为SQL脚本。表的结构和表中…

图像压缩:Transformer-based Image Compression with Variable Image Quality Objectives

论文作者&#xff1a;Chia-Hao Kao,Yi-Hsin Chen,Cheng Chien,Wei-Chen Chiu,Wen-Hsiao Peng 作者单位&#xff1a;National Yang Ming Chiao Tung University 论文链接&#xff1a;http://arxiv.org/abs/2309.12717v1 内容简介&#xff1a; 1&#xff09;方向&#xff1a;…

代码随想录 Day11 二叉树 LeetCode T144,145,94 前中后序遍历 (递归解法)

题解及更详细解答来自于:代码随想录 (programmercarl.com) 前言: 递归三要素 确定递归函数的参数和返回值&#xff1a; 确定哪些参数是递归的过程中需要处理的&#xff0c;那么就在递归函数里加上这个参数&#xff0c; 并且还要明确每次递归的返回值是什么进而确定递归函数的返…

深度学习实战基础案例——卷积神经网络(CNN)基于MobileNetV3的肺炎识别|第3例

文章目录 前言一、数据集介绍二、前期工作三、数据集读取四、构建CA注意力模块五、构建模型六、开始训练 前言 Google公司继MobileNetV2之后&#xff0c;在2019年发表了它的改进版本MobileNetV3。而MobileNetV3共有两个版本&#xff0c;分别是MobileNetV3-Large和MobileNetV2-…

不容易解的题10.5

31.下一个排列 31. 下一个排列 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/next-permutation/?envTypelist&envIdZCa7r67M会做就不算难题&#xff0c;如果没做过不知道思路&#xff0c;这道题将会变得很难。 这道题相当于模拟cpp的next_permu…

Windows系统上使用CLion远程开发Linux程序

CLion远程开发Linux程序 情景说明Ubuntu配置CLion配置同步 情景说明 在Windows系统上使用CLion开发Linux程序&#xff0c;安装CLion集成化开发环境时会自动安装cmake、mingw&#xff0c;代码提示功能也比较友好。 但是在socket开发时&#xff0c;包含sys/socket.h头文件时&am…

浅谈CDN内容分发与全局负载均衡

CDN简介 CDN的全称是Content Delivery Network&#xff0c;即内容分发网络。CDN是构建在现有网络基础之上的智能虚拟网络&#xff0c;依靠部署在各地的边缘服务器&#xff0c;通过中心平台的负载均衡、内容分发、调度等功能模块&#xff0c;使用户就近获取所需内容&#xff0c…

软件设计师_数据结构与算法_学习笔记

文章目录 6.1 数组与矩阵6.1.1 数组6.1.2 稀疏矩阵 6.2 线性表6.2.1 数据结构的定义6.2.2 顺序表与链表6.2.2.1 定义6.2.2.2 链表的操作 6.2.3 顺序存储和链式存储的对比6.2.4 队列、循环队列、栈6.2.4.2 循环队列队空与队满条件6.2.4.3 出入后不可能出现的序列练习 6.2.5 串 6…

C语言学习系列->联合体and枚举

文章目录 前言联合体概述联合体的特点联合体大小的计算优点练习 枚举概述优点使用 前言 在上一篇文章中&#xff0c;小编将结构体的学习笔记整理出来了。现在&#xff0c;小编将枚举和联合体笔记分享给大家。枚举和联合体与结构体一样&#xff0c;都是自定义类型&#xff0c;在…

竞赛 机器视觉的试卷批改系统 - opencv python 视觉识别

文章目录 0 简介1 项目背景2 项目目的3 系统设计3.1 目标对象3.2 系统架构3.3 软件设计方案 4 图像预处理4.1 灰度二值化4.2 形态学处理4.3 算式提取4.4 倾斜校正4.5 字符分割 5 字符识别5.1 支持向量机原理5.2 基于SVM的字符识别5.3 SVM算法实现 6 算法测试7 系统实现8 最后 0…

MySQL之逻辑备份与恢复

逻辑备份简介&#xff1a; 备份的是建表、建库、插入等操作所执行SQL语句&#xff0c;适用于中小型数据库&#xff0c;效率相对较低。 本质&#xff1a;导出的是SQL语句文件 优点&#xff1a;不论是什么存储引擎&#xff0c;都可以用mysqldump备成SQL语句 缺点&#xff1a;速度…

输入一个大写字母,程序根据输入字符在字母表的顺序位置n,输出一个高度为n的金字塔图形

python字母金字塔根据输入的字母输出一个字母金字塔输入一个大写字母&#xff0c;程序根据输入字符在字母表的顺序位置n,输出一个高度为n的金字塔图形&#xff0c;比如输入E时&#xff0c;此时 字母金字塔 # A # ABA # ABCBA # ABCDCBA # ABCDEDCBA 看到…