欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

day24torch.nn操作1入门一起学PyTorch吧,PyTorch从入门开始每天都更新超详细参数常用方法简单案列共同学习,共同进步坚持

时间:2023-06-05
torch . nn :神经网络相关模块。 class torch.nn.Parameter():Variable的一种,常被用与模块参数(module parameter)。 Parameters 是 Variable 的子类。Paramenters 和 Modules 一起使用的时候会有一些特殊的属性,即:当 Paramenters 赋值给 Module 的属性的时候,它会自动的被加到 Module的 参数列表中 ( 即:会出现在 parameters() 迭代器中 )。将 Varibale 赋值给 Module 属性则不会有这样的影响。这样做的原因是:我们有时候会需要缓存一些临时的状态 (state),比如:模型中 RNN 的最后一个隐状态。如果没有 Parameter 这个类的话,那么这些临时变量 也会注册成为模型变量。         Variable 与 Parameter 的另一个不同之处在于, Parameter 不能被 volatile(即:无法设置 volatile=True)而且默认 requires_grad=True 。 Variable 默认 requires_grad=False 。 参数:         -- data (Tensor) : parameter tensor         --requires_grad (bool, optional) :默认为 True ,在 BP 的过程中会对其求微分。 class torch . nn . Module:所有网络的基类。你的模型也应该继承这个类。Modules也可以包含其它Modules,允许使用树结构嵌入他们。你可以将子模块赋值给模型属性。

import torch.nn as nnimport torch.nn.functional as F 34 class Model(nn.Module): def __init__(self): super(Model, self).__init__() self.conv1 = nn.Conv2d(1, 20, 5)# submodule: Conv2d self.conv2 = nn.Conv2d(20, 20, 5) def forward(self, x): x = F.relu(self.conv1(x)) return F.relu(self.conv2(x))

通过上面方式赋值的 submodule 会被注册。当调用 .cuda() 的时候,submodule 的参数也会转换为 cuda Tensor。 参数:         -- add_module(name, module) 将一个 child module 添加到当前 modle 。被添加的module可以通过name属性来获取。 例子:

import torch.nn as nnclass Model(nn.Module): def __init__(self): super(Model, self).__init__() self.add_module("conv", nn.Conv2d(10, 20, 4)) #self.conv = nn.Conv2d(10, 20, 4) #和上面这个增加module的方式等价 model = Model()print(model.conv)

输出:

Conv2d(10, 20, kernel_size=(4, 4), stride=(1, 1))

children() 返回当前模型 子模块的迭代器。

import torch.nn as nnclass Model(nn.Module): def __init__(self): super(Model, self).__init__() self.add_module("conv", nn.Conv2d(10, 20, 4)) self.add_module("conv1", nn.Conv2d(20 ,10, 4))model = Model()for sub_module in model.children(): print(sub_module)

输出:

Conv2d(10, 20, kernel_size=(4, 4), stride=(1, 1))Conv2d(20, 10, kernel_size=(4, 4), stride=(1, 1))

cpu(device_id=None): 将所有的模型参数 (parameters) 和 buffers 复制到 CPUNOTE :官方文档用的 move ,但我觉着 copy 更合理。 cuda(device_id=None): 将所有的模型参数 (parameters) 和 buffers 赋值 GPU 参数说明 :device_id (int, optional):如果指定的话,所有的模型参数都会复制到指定的设备上。 double(): 将 parameters 和 buffers 的数据类型转换成 double 。 eval(): 将模型设置成 evaluation 模式。 仅仅当模型中有 Dropout 和 BatchNorm是才会有影响。 float(): 将 parameters 和 buffers 的数据类型转换成 float 。 forward(* input): 定义了每次执行的 计算步骤。在所有的子类中都需要重写这个函数。 half(): 将 parameters 和 buffers 的数据类型转换成 half 。 load_state_dict(state_dict): 将 state_dict 中的 parameters 和 buffers 复制到module和它的后代中。state_dict 中的 key 必须和 model.state_dict() 返回的 key一致。NOTE:用来加载模型参数。 参数说明:state_dict (dict) –保存 parameters 和 persistent buffers 的字典。 modules(): 返回一个包含 当前模型 所有模块的迭代器。

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。