模型创建与nn.Module

news/2024/7/21 3:53:08 标签: 图像处理, 计算机视觉, 人工智能

一、网络模型创建步骤

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、nn.Module

在这里插入图片描述

下面描述了在 PyTorch 中常见的一些属性和功能,用于存储和管理神经网络模型的参数、模块、缓冲属性和钩子函数。

  • parameters:用于存储和管理 nn.Parameter 类的属性。nn.Parameter 是一种特殊的张量,它被自动注册为模型的参数,可以进行梯度计算和优化。parameters 属性是一个可迭代对象,可以通过遍历它来访问模型的所有参数。
  • modules:用于存储和管理 nn.Module 类的属性。nn.Module 是神经网络模型的基类,可以包含其他模块、参数和计算图。modules 属性是一个可迭代对象,可以通过遍历它来访问模型中的所有模块。
  • buffers:用于存储和管理缓冲属性,例如 Batch Normalization 层中的 running_meanrunning_var。缓冲属性不会被视为模型的参数,但在模型的计算过程中会被使用和更新。
  • *_hooks:用于存储和管理钩子函数。钩子函数是一种在模型的前向或后向传播过程中被调用的函数,可以用于获取中间特征、梯度等信息,或者在计算过程中进行一些额外的操作。*_hooks 属性可以注册和管理多个钩子函数,以便在需要的时候进行调用。

这段代码展示了在 PyTorch 中 nn.Module 类的构造函数中常见的属性初始化操作。这些属性用于存储和管理模型的参数、缓冲属性、钩子函数和模块。

  • self._parameters:用于存储模型的参数。它是一个有序字典(OrderedDict),用于保存参数的名称和对应的张量值。
  • self._buffers:用于存储模型的缓冲属性。它也是一个有序字典,用于保存缓冲属性的名称和对应的张量值。
  • self._backward_hooks:用于存储模型的后向传播钩子函数。它是一个有序字典,用于保存钩子函数的名称和对应的函数。
  • self._forward_hooks:用于存储模型的前向传播钩子函数。同样是一个有序字典,用于保存钩子函数的名称和对应的函数。
  • self._forward_pre_hooks:用于存储模型的前向传播前钩子函数。同样是一个有序字典,用于保存钩子函数的名称和对应的函数。
  • self._state_dict_hooks:用于存储模型的状态字典钩子函数。同样是一个有序字典,用于保存钩子函数的名称和对应的函数。
  • self._load_state_dict_pre_hooks:用于存储模型的加载状态字典前钩子函数。同样是一个有序字典,用于保存钩子函数的名称和对应的函数。
  • self._modules:用于存储模型的子模块。同样是一个有序字典,用于保存子模块的名称和对应的模块实例。

通过使用这些属性,nn.Module 类可以方便地管理模型的参数、缓冲属性、钩子函数和子模块,并提供了一些方法(如 state_dict()load_state_dict())来进行模型的状态保存和加载。

nn.Module总结

nn.Module 是 PyTorch 中用于构建神经网络模型的基类,具有以下特点:

  1. 一个 nn.Module 可以包含多个子模块:nn.Module 具有层次结构,可以嵌套包含其他 nn.Module 实例作为其子模块。这样可以方便地构建复杂的神经网络结构。
  2. 一个 nn.Module 相当于一个运算:每个 nn.Module 类都必须实现 forward() 函数,该函数定义了模型的前向传播过程。在调用模型对象时,会自动调用 forward() 函数来执行模型的前向计算。
  3. 每个 nn.Module 都有 8 个字典管理它的属性:这些字典分别是 _parameters_buffers_backward_hooks_forward_hooks_forward_pre_hooks_state_dict_hooks_load_state_dict_pre_hooks_modules。这些字典用于存储和管理模型的参数、缓冲属性、钩子函数和子模块。

通过继承 nn.Module 类,我们可以定义自己的神经网络模型,并利用其提供的属性和方法来方便地管理模型的组件和状态。同时,nn.Module 类还提供了一些常用的方法,如 state_dict()load_state_dict(),用于模型的状态保存和加载。


http://www.niftyadmin.cn/n/5311856.html

相关文章

13 个有趣的 Python 高级脚本

每天我们都会面临许多需要高级编码的编程挑战。你不能用简单的 Python 基本语法来解决这些问题。在本文中,我将分享 13 个高级 Python 脚本,它们可以成为你项目中的便捷工具。如果你目前还用不到这些脚本,你可以先添加收藏,以备留…

lv14 IO模型:阻塞和非阻塞 7

1 五种IO模型------读写外设数据的方式 阻塞: 不能操作就睡觉 非阻塞:不能操作就返回错误(通过轮询即才能实现阻塞的情况 ) 多路复用:委托中介监控 信号驱动:让内核如果能操作时发信号,在信号处理函数中操作 异步IO&a…

Qt读取文件对比:每次获取自定义的长度和使用系统的API,耗时对比

0. 前言 在编程过程中,经常遇到文件读写操作,太频繁了。每次也都写的不一样。 突发奇想,想测试下几种不同的读取文件的效率。 测试以下三种方式读取文件效率: 自定义读取文件耗时使用QFile类API读取文件耗时使用QTextStream类AP…

JavaScript:Date 对象-时间日期

Date 对象-时间日期: - JS中所有的关于时间信息都需要通过Date对象来表示 // 创建一个Date对象 // 如果直接使用new Date()创建时间对象,它会默认创建一个表示代码执行时刻的对象var d new Date();// 如果希望创建一个指定的时间的Date的对象,需要传递…

C++内存分配策略

目录 基础概念 内存布局 分配方式 实现 1.new和delete 2.利用空间配置器alloc 3.用malloc和free 4.静态内存分配 基础概念 在讲内存分配之前,先对一些基础概念进行阐述,以便能更好的讨论问题 内存布局 代码编译为可执行程序后运行占用的内存可…

Ansible:简单、快速、安全、最强大的 IT 自动化系统 | 开源日报 No.140

ansible/ansible Stars: 59.6k License: GPL-3.0 Ansible 是一个极其简单的 IT 自动化系统,它处理配置管理、应用部署、云提供、临时任务执行、网络自动化和多节点编排。Ansible 使得像零停机滚动更新与负载均衡器一样复杂的更改变得容易。主要功能包括&#xff1…

SpringBoot 静态资源映射

文章目录 一、静态资源映射1.1 什么是静态资源映射1.2 常见的静态资源映射方式 二、SpringBooot默认配置2.1 resources 目录2.2 SpringBoot 默认配置 三、SpringBoot手动配置3.1 配置属性3.2 自定义配置类 参考资料 一、静态资源映射 1.1 什么是静态资源映射 资源映射指的是将…

C++ 中的指针和引用有什么区别?

C 中的指针和引用有什么区别? 在开始前我有一些资料,是我根据网友给的问题精心整理了一份「C的资料从专业入门到高级教程」, 点个关注在评论区回复“888”之后私信回复“888”,全部无偿共享给大家!!&#…