河南高端网站建设公司,福州高端网站制作,厦门哪里有建设网站的,认识网络营销目录
1. 基于Module构建自己的网络
2. Module的初始化变量
3. Modules中需要子类 forward()
4. Modules中其他内置函数 1. 基于Module构建自己的网络
torch.nn.Module是所有神经网络模块的基类#xff0c;如何定义自已的网络#xff1a;
由于 Module 是神经网络模块的基…目录
1. 基于Module构建自己的网络
2. Module的初始化变量
3. Modules中需要子类 forward()
4. Modules中其他内置函数 1. 基于Module构建自己的网络
torch.nn.Module是所有神经网络模块的基类如何定义自已的网络
由于 Module 是神经网络模块的基类自己的模型应该要继承这个类要实现 torch.nn.Module 中的forward函数从而进行网络的前向传播一般把网络中具有可学习参数的层放在构造函数__init__()中把不具有可学习参数的层(如ReLU)放在forward中并通过nn.functional来代替
import torch.nn as nn
import torch.nn.functional as Fclass Model(nn.Module): # 继承nn.Module类def __init__(self):super(Model, self).__init__()# 把具有可学习参数的层放在构造函数中self.conv1 nn.Conv2d(1, 20, 5) self.conv2 nn.Conv2d(20, 20, 5)def forward(self, x): # 实现forward函数# 在forward中直接使用torch.nn.functional.relu()函数x F.relu(self.conv1(x))return F.relu(self.conv2(x)) 2. Module的初始化变量
nn.Module 类内置了一些初始化变量。包括在模块 forward、 backward 和权重加载等时候会被调用的的 hooks也定义了 parameters 和 buffers如源码所示
def __init__(self):Initializes internal Module state, shared by both nn.Module and ScriptModule.torch._C._log_api_usage_once(python.nn_module)self.training True # 当前训练/测试的状态self._parameters OrderedDict() # 在训练过程中会随 BP 而更新的参数self._buffers OrderedDict() # 在训练过程中不会随 BP 而更新的参数self._non_persistent_buffers_set set() self._backward_hooks OrderedDict() # Backward 完成后会被调用的 hookself._is_full_backward_hook Noneself._forward_hooks OrderedDict() # Forward 完成后会被调用的 hookself._forward_pre_hooks OrderedDict() # Forward 前会被调用的 hookself._state_dict_hooks OrderedDict() # 得到 state_dict 以后会被调用的 hookself._load_state_dict_pre_hooks OrderedDict() # 加载state_dict 前会被调用的 hookself._modules OrderedDict() # 网络的子模块 3. Modules中需要子类 forward()
注意在网络训练过程中直接通过mode(input) 自动调用forward函数而非model.forward(input)进行调用因为前者mode(input) 除了forward()外还调用了额外的函数先执行_forward_pre_hooks里的所有hooks
再调用forward()执行_forward_hooks中所有hooks执行_backward_hooks中所有hooks4. Modules中其他内置函数
除了初始化的成员变量之外Modules还内置了很多函数具体包含以下几类
(1) 属性访问modules(), named_modules(), buffers(), named_buffers(), children(), named_children(), parameters(), named_parameters() 等
(2) 属性设置register_parameter()register_buffer()register_forward_hook()register_forward_pre_hook() 等
(3) 参数转换/转移cpu(), cuda(), float(), double() 等
(4) 状态转换train(), eval() 等
对于这些内置函数的详细介绍在 PyTorch系列相关文章-Aaron_neil的csdn博客 持续更新中 本文所参考的部分博客 [1] pytorch 入坑三nn module - 知乎 [2] torch.nn.Module模块简单介绍_allan2222的博客-CSDN博客