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()。

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值