torch.nn.Module()

torch.nn.Module()

如果自己想研究,官方文档

它是所有的神经网络的根父类! 你的神经网络必然要继承!
模块也可以包含其他模块,允许将它们嵌套在树结构中。所以呢,你可以将子模块指定为常规属性。常规定义子模块的方法如下:

以这种方式分配的子模块将被注册(也就是成为你的该分支下的子类),当你调用to()等方法的时候时,它们的参数也将被转换,等等。
当然子模块就可以包含各种线性or卷积等操作了! 也就是模型

变量:

1. training (bool) - Boolean表示该模块是处于培训模式还是评估模式。

方法:

1. add_module(name, module):

将子模块添加到当前模块。
可以使用给定的名称作为属性访问该模块。
参数

  • name: 该处填写子模块的名称
  • module: 该处是要添加的子模块!

2. apply(fn)

递归地将fn函数应用于每个子模块(由.children()返回) 和 self。典型的用法包括初始化模型的参数(参见torch.nn.init)。
参数
fn (Module -> None):用于每个子模块的函数,中间的参数必然是子模块! 如果用于参数的初始化,那么就该递归该模块下的各个函数
返回
self
返回类型
Module

@torch.no_grad()
def init_weights(m):print(m)if type(m) == nn.Linear:m.weight.fill_(1.0)print(m.weight)
net = nn.Sequential(nn.Linear(2, 2), nn.Linear(2, 2))
net.apply(init_weights)

3. children()

返回直接子模块上的迭代器。

4. cpu()

将所有模型参数和缓冲区移动到CPU。
此方法将就地修改模块(应该当前代码之前的所有立刻移动到别处)。

5. cuda(device=None)

将所有模型参数和缓冲区移动到GPU。
这也使得相关的参数和缓冲区成为不同的对象。因此,如果模块将在GPU上运行而被优化,则应该在构建优化器之前调用它
同样的,此方法将就地修改模块。
参数
Device (int,optional)-如果指定了,所有参数将被复制到该设备
返回
slef
返回类型
Module

6. eval()

将模块设置为评估模式。
只对某些模块有效。如果他们在培训/评估模式中受到影响,请参阅特定模块的文档以了解他们的行为细节,如Dropout, BatchNorm等。
同时这和 self.train(False) 是同等的!

返回
slef
返回类型
Module

7. float()

将所有浮点参数和缓冲区强制转换为浮点数据类型。
此方法将就地修改模块。
返回

  • slef
    返回类型
  • Module

8. forward()

定义在每次调用时执行的计算。
应该被所有子类覆盖。
注意: 虽然前向传递的方法需要在这个函数中定义,但是应该在之后调用Module实例而不是这个,因为前者负责运行已注册的钩子,而后者则会默默地忽略它们

9. get_buffer(target)

如果存在,返回target给出的缓冲区,否则抛出错误。
有关此方法的功能以及如何正确指定目标的更详细的解释,请参阅get_submodule的文档字符串。
参数

  • target - 要查找的缓冲区的全限定字符串名称。(参见get_submodule了解如何指定全限定字符串。)
    Returns
    目标引用的缓冲区
    Return type
    torch.Tensor
    Raises:
    AttributeError—如果目标字符串引用了无效的路径或解析为非缓冲区的内容

10.get_parameter(target)

如果target指定的参数存在,则返回该参数,否则抛出错误。
有关此方法的功能以及如何正确指定目标的更详细的解释,请参阅get_submodule的文档字符串。
参数

  • target - 要查找的参数的全限定字符串名称。(参见get_submodule了解如何指定全限定字符串。)
    Returns
    目标引用的参数
    Return type
    torch.nn.Parameter
    Raises:
    AttributeError—如果目标字符串引用了无效的路径或解析到不是nn.Parameter

11.get_submodule(target)

如果target给出的子模块存在,则返回子模块,否则抛出错误。
例如,假设你有一个nn.Module A是这样的:
(图中显示了一个神经网络。模块A有一个嵌套的子模块net_b,它本身有两个子模块net_clinear。然后Net_c有一个子模块conv。)

要检查是否有线性子模块,可以调用get_submodule(“net_b.linear”)。要检查是否有conv子模块,可以调用get_submodule(“net_b.net_c.conv”)
get_submodule运行时受模块在target中的嵌套程度的限制。对named_modules的查询获得了相同的结果,但是传递模块的数量是O(N)。因此,对于检查是否存在子模块的简单检查,应该始终使用get_submodule
参数

  • target - 要查找的子模块的全限定字符串名称。(参见上面的示例,了解如何指定全限定字符串。)
    Returns
    被target引用的子模块
    Return type
    torch.nn.Modules
    Raises:
    AttributeError—如果目标字符串引用了无效的路径或解析到不是nn.Module

12.load_state_dict(state_dict, strict=True)

state_dict中的参数和缓冲区复制到该模块及其后代模块中。如果strictTrue,则state_dict的键必须与该模块的*state_dict()*函数返回的键完全匹配。
参数

  • State_dict (dict): 一个包含参数和持久缓冲区的字典。
  • Strict (bool,optional): 是否严格强制state_dict中的键与该模块的*state_dict()*函数返回的键相匹配。默认值:Ture
    Returns
  • Missing_keys是一个包含丢失键的STR列表
  • unexpected keys是一个包含意外键的STR列表
    Return type
    NamedTuple with missing_keys and unexpected_keys fields

13. modules()

返回包含网络中所有模块的一个迭代器。
**迭代器的意思就是可以被for循环访问!**而经过for循环后得到的就是一个又一个的tuple!

产生
Module – a module in the network
重复的模块只返回一次。在下面的示例中,l 将只返回一次。
例子:

l = nn.Linear(2, 2)
net = nn.Sequential(l, l)
for idx, m in enumerate(net.modules()):print(idx, '->', m)0 -> Sequential((0): Linear(in_features=2, out_features=2, bias=True)(1): Linear(in_features=2, out_features=2, bias=True)
)
1 -> Linear(in_features=2, out_features=2, bias=True)

14. named_children()

返回直接子模块上的迭代器生成模块名模块本身(模块本身啥子哦? )。
如果返回的是两个,可以记住这个格式,如果满足条件就输出特定模块!

产生
(string, Module) – 包含名称和子模块的元组

例子

for name, module in model.named_children():   if name in ['conv4', 'conv5']:print(module)

15. parameters(recurse=True)

返回模块参数上的迭代器。
这通常被传递给优化器。
参数
recurse (bool) -如果为True,则生成该模块和所有子模块的参数。否则,只生成该模块的直接成员参数。

产生
Parameter – module parameter

举例

for param in model.parameters():print(type(param), param.size())
<class 'torch.Tensor'> (20L,)
<class 'torch.Tensor'> (20L, 1L, 5L, 5L)

16. requires_grad_(requires_grad=True)

更改autograd是否应该记录此模块中参数的操作。
该方法就地设置参数的requires_grad属性。
这种方法有助于冻结模块的一部分,以便对模型的各个部分进行微调或单独训练(如GAN训练)。
请参阅Locally disabling gradient computation 来比较**.requires_grad_()**和几个可能与之混淆的类似机制。
参数
Requires_grad (bool) - autograd是否应该记录对该模块中的参数的操作。默认值:真的。
返回
self
Return type
Module

17. state_dict(destination=None, prefix=’’, keep_vars=False)

返回包含整个模块状态的字典
**参数和持久缓冲区(**例如运行平均值)都包括在内。键是相应的参数和缓冲区名称。
返回
包含模块的整个状态的字典
Return type
dict
举例

module.state_dict().keys()
['bias', 'weight']

18. to(*args, **kwargs)

移动和/或强制转换参数和缓冲区。
这里可以被叫做:
在这里插入图片描述
它的签名类似于torch.Tensor.to(),但只接受浮点数或复杂的dtype’s。此外,该方法只将浮点数或复杂参数和缓冲区强制转换为:attr: ’ dtype(如果给定)
如果给定,整型参数和缓冲区将被移到device,但dtype不变。当设置non_blocking时,如果可能的话,它会尝试相对于主机进行异步转换/移动,例如,将带有固定内存的CPU张量移动到CUDA设备。

此方法将就地修改模块。

Parameters

  • device(torch.device) -在这个模块中参数和缓冲器的期望设备
  • Dtype(torch.dtype) -这个模块中参数和缓冲区的浮点型或复杂的Dtype
  • tensor(torch.tensor)-张量的dtype和设备是这个模块中所有参数和缓冲区所需的dtype和设备
  • memory_format (torch.memory_format) -该模块中4D参数和缓冲区所需的内存格式(仅关键字参数)
    返回
    self
    Return type
    Module

举例

>>> linear = nn.Linear(2, 2)
>>> linear.weight
Parameter containing:
tensor([[ 0.1913, -0.3420],[-0.5113, -0.2325]])
>>> linear.to(torch.double)
Linear(in_features=2, out_features=2, bias=True)
>>> linear.weight
Parameter containing:
tensor([[ 0.1913, -0.3420],[-0.5113, -0.2325]], dtype=torch.float64)
>>> gpu1 = torch.device("cuda:1")
>>> linear.to(gpu1, dtype=torch.half, non_blocking=True)
Linear(in_features=2, out_features=2, bias=True)
>>> linear.weight
Parameter containing:
tensor([[ 0.1914, -0.3420],[-0.5112, -0.2324]], dtype=torch.float16, device='cuda:1')
>>> cpu = torch.device("cpu")
>>> linear.to(cpu)
Linear(in_features=2, out_features=2, bias=True)
>>> linear.weight
Parameter containing:
tensor([[ 0.1914, -0.3420],[-0.5112, -0.2324]], dtype=torch.float16)>>> linear = nn.Linear(2, 2, bias=None).to(torch.cdouble)
>>> linear.weight
Parameter containing:
tensor([[ 0.3741+0.j,  0.2382+0.j],[ 0.5593+0.j, -0.4443+0.j]], dtype=torch.complex128)
>>> linear(torch.ones(3, 2, dtype=torch.cdouble))
tensor([[0.6122+0.j, 0.1150+0.j],[0.6122+0.j, 0.1150+0.j],[0.6122+0.j, 0.1150+0.j]], dtype=torch.complex128)

19. train(mode=True)

将模块设置为训练模式。
这只对某些模块有效。如果他们在培训/评估模式中受到影响,请参阅特定模块的文档以了解他们的行为细节,如Dropout, BatchNorm等。

参数
mode (bool) -是否设置训练模式(True)或评估模式(False)。默认值:真的。
返回
self
Return type
Module

20. zero_grad(set_to_none=False)

设置所有模型参数的梯度为零。更多内容请查看torch. optim. optimizer下的类似函数。
参数
set_to_none (bool) -不设置为零,而是将梯度值设置为None。详见torch. optimizer . optimizer .zero_grad()。

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

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

相关文章

dlib 怎么安装vs2017_win10中的dlib库安装过程

之前试过很多方法结果都失败&#xff0c;最后终于发现一个成功的方法&#xff0c;先记一下以防忘记。参考&#xff1a;记一次Win10环境python3.7安装dlib模块趟过的坑由于我是通过Anaconda安装的Python&#xff0c;所以环境与这位博主的有所不同&#xff0c;所以具体情况需要根…

LeetCode 779. 第K个语法符号(找规律)

1. 题目 在第一行我们写上一个 0。 接下来的每一行&#xff0c;将前一行中的0替换为01&#xff0c;1替换为10。 给定行数 N 和序数 K&#xff0c;返回第 N 行中第 K个字符。&#xff08;K从1开始&#xff09; 例子: 输入: N 1, K 1 输出: 0输入: N 2, K 1 输出: 0输入: …

ADO.NET、ODP.NET、Linq to SQL、ADO.NET Entity 、NHibernate在Oracle下的性能比较

下面我对Oracle数据库在.NET平台下的主要几种数据访问方式进行测试。 下面是测试表&#xff1a; CREATE TABLE CUSTOMERS ( "CUSTOMER_ID" NUMBER NOT NULL , "FIRST_NAME" VARCHAR2(255 CHAR) NOT NULL , "LAST_NAME" VARCHAR2(255 CHAR) …

LeetCode 第 186 场周赛(1060/3107,前34.1%)

文章目录1. 比赛结果2. 题目1. LeetCode 5392. 分割字符串的最大得分 easy2. LeetCode 5393. 可获得的最大点数 medium3. LeetCode 5394. 对角线遍历 II medium4. LeetCode 5180. 带限制的子序列和 hard1. 比赛结果 做出来了 1、2 题&#xff0c;第3题模拟法&#xff0c;超时&…

torch.nn.embedding()

作者&#xff1a;top_小酱油 链接&#xff1a;https://www.jianshu.com/p/63e7acc5e890 来源&#xff1a;简书 内容&#xff1a;上述是以RNN为基础解析的 torch.nn.Embedding(num_embeddings, embedding_dim, padding_idxNone, max_normNone, norm_type2.0, scale_grad_by_fre…

oracle杀死进程时权限不足_在oracle中创建函数时权限不足

我对oracle有一点了解。我试图创建一个如下所示的函数。在oracle中创建函数时权限不足CREATE OR REPLACE FUNCTION "BOOK"."CONVERT_TO_WORD" (totpayable IN NUMBER) RETURN VARCHARAStotlength NUMBER;num VARCHAR2(14);word VARCHAR2(70);word1 VARCHAR…

哇塞,打开一个页面访问了这么多次数据库??

用SQL Server 事件探查器看了一下&#xff0c;哇塞&#xff0c;每打开一个页面都select了n多次数据库&#xff0c;而且很多都是类似的代码&#xff1f;为啥&#xff1f; (1)、二级嵌套绑定数据源 (2)、二级联动 (3)、……多着呢&#xff01; 解决方法&#xff1a; 对于数据不大…

torch.nn

torch.nn 与 torch.nn.functional 说起torch.nn&#xff0c;不得不说torch.nn.functional! 这两个库很类似&#xff0c;都涵盖了神经网络的各层操作&#xff0c;只是用法有点不同&#xff0c;比如在损失函数Loss中实现交叉熵! 但是两个库都可以实现神经网络的各层运算。其他包…

ORACLE使用JOB定时备份数据库

Oracle的备份一般都是在操作系统上完成&#xff0c;因此定时备份Oracle的功能一般都是由操作系统功能完成&#xff0c;比如crontab。但是Oracle的PIPE接口使得在Oracle数据库中通过JOB来备份Oracle变得可能。 这篇文章给出一个简单的例子&#xff0c;说明如何在JOB中定期备份数…

mysql 装载dump文件_mysql命令、mysqldump命令找不到解决

1、解决bash: mysql: command not found 的方法[rootDB-02 ~]# mysql -u root-bash: mysql: command not found原因:这是由于系统默认会查找/usr/bin下的命令&#xff0c;如果这个命令不在这个目录下&#xff0c;当然会找不到命令&#xff0c;我们需要做的就是映射一个链接到/u…

LeetCode 796. 旋转字符串

1. 题目 给定两个字符串, A 和 B。 A 的旋转操作就是将 A 最左边的字符移动到最右边。 例如, 若 A ‘abcde’&#xff0c;在移动一次之后结果就是’bcdea’ 。如果在若干次旋转操作之后&#xff0c;A 能变成B&#xff0c;那么返回True。 示例 1: 输入: A abcde, B cdeab …

【DKN】(一)KCN详解

_ init _&#xff08;&#xff09;函数 参数&#xff1a; self, config, pretrained_word_embedding, pretrained_entity_embedding, pretrained_context_embedding config&#xff1a; 设置的固定的参数&#xff01; pretrained_word_embedding&#xff1a; 根据下面的使用是…

搜索引擎优化经验谈

转自&#xff1a;http://blog.donews.com/zszwyds/archive/2009/08/24/1551179.aspx 费话少说&#xff0c;直入正题。 1. “白马非马”的关键字(词) 很多客户对于自己网站的关键词无从下手&#xff0c;大部分的客户选择都是大而全的关键词&#xff0c;很多的关键词如果选择…

iphone版 天行skyline_Skyline QT

应用标题Skyline QT应用描述An information and feedback gathering tool for our Skyline Queenstown visitor to discover the complex and its array of activities and food and beverage outlets.Welcome to the world of SkylineAre you looking for things to do in New…

LeetCode 788. 旋转数字

1. 题目 我们称一个数 X 为好数, 如果它的每位数字逐个地被旋转 180 度后&#xff0c;我们仍可以得到一个有效的&#xff0c;且和 X 不同的数。要求每位数字都要被旋转。 如果一个数的每位数字被旋转以后仍然还是一个数字&#xff0c; 则这个数是有效的。 0, 1, 和 8 被旋转后…

pycharm中无法识别相对路径的问题

这种情况如果在Windows下操作如下&#xff1a; 第一步&#xff1a; 往往拷贝下来的程序是在linux上运行的 第二步&#xff1a; 设置根路径 要调整有python.exe文件的地方&#xff01; 这两个路径要设置成为自己的项目根目录&#xff01;

vue变量传值_Vue各类组件之间传值的实现方式

1、父组件向子组件传值首先在父组件定义好数据&#xff0c;接着将子组件导入到父组件中。父组件只要在调用子组件的地方使用v-bind指令定义一个属性&#xff0c;并传值在该属性中即可&#xff0c;此时父组件的使命完成&#xff0c;请看下面关键代码&#xff1a;:content"i…

Linux常用指令自己备用

~ 和 / 的区别&#xff1a; ~ 是当前用户的目录地址 / 是根目录的地址&#xff08;一般称呼为root&#xff0c;/ 和 /root/ 是有区别的&#xff09; 当用户是root用户时 ~ 代表/root/&#xff0c;即根目录下的root目录 / 代表/ &#xff0c;即根目录 当用户是jack用户时 ~…

『号外』 排名进入3000,特致感谢!

开博半个月来&#xff0c;老孙项目管理成功地闯入了博客园3000名&#xff01;&#xff01; 谢谢博客园的朋友们&#xff01;非常感谢&#xff01;&#xff01;“老孙项目管理”今日排名2975。这样的成绩&#xff0c;老孙没有预料到&#xff0c;开心极了。比奥巴马当选总统&…

qt如和调用linux底层驱动_擅长复杂硬件体系设计,多核系统设计,以及基于RTOS或者Linux,QT等进行相关底层驱动。...

双向可控硅在使用时&#xff0c;其触发限流电阻的阻值和封装应该怎么选取&#xff1f;(1)首先我们在进行TRIAC其驱动电路设计的时候&#xff0c;我们一般不直接进行驱动&#xff0c;而是通过DIAC或者Photo-TRIAC即光学的双向可控硅配合来使用进行驱动电路的设计&#xff0c;为什…