网站制作方案包括哪些内容,营山县城乡规划建设局官方网站,装修网站效果图,网站栏目结构优化深度学习基础知识 register_buffer 与 register_parameter用法分析 1、问题引入2、register_parameter()2.1 作用2.2 用法 3、register_buffer()3.1 作用3.2 用法 1、问题引入 思考问题#xff1a;定义的weight与bias是否会被保存到网络的参数中#xff0c;可否在优化器的作用… 深度学习基础知识 register_buffer 与 register_parameter用法分析 1、问题引入2、register_parameter()2.1 作用2.2 用法 3、register_buffer()3.1 作用3.2 用法 1、问题引入 思考问题定义的weight与bias是否会被保存到网络的参数中可否在优化器的作用下进行学习 验证方案定义网络模型设置weigut与bias遍历网络结构参数net.named_parameters()如果定义的weight与bias在里面则说明是可学习参数否则是不可学习参数 import torch
import torch.nn as nn# 思考两个问题定义的weight与bias是否会被保存到网络的参数中可否在优化器的作用下进行学习class MyModule(nn.Module):def __init__(self):super(MyModule,self).__init__()self.conv1nn.Conv2d(in_channels 3,out_channels 6,kernel_size3,stride 1,padding1,biasFalse)self.conv2nn.Conv2d(in_channels 6,out_channels 9,kernel_size3,stride 1,padding1,biasFalse)self.waighttorch.ones(10,10)self.biastorch.zeros(10)def forward(self,x):xself.conv1(x)xself.conv2(x)x x * self.weight self.biasreturn xnetMyModule()for name,param in net.named_parameters(): # 如果weight与bias在里面说明其是可学习参数否则是不可学习参数print(name,param.shape)print(\n,-*40,\n)for key,val in net.state_dict().items(): # 说明weight与bias是不会被state_dict转化为字典中的元素的print(key,val.shape)
打印分析结果 可以看到weight与bias不在其中所以此种定义方式不会是的weight与bias成为可训练参数
2、register_parameter()
register_parameter()是 torch.nn.Module 类中的一个方法
2.1 作用 1、可将 self.weight 和 self.bias 定义为可学习的参数保存到网络对象的参数中被优化器作用进行学习 2、self.weight 和 self.bias 可被保存到 state_dict 中进而可以 保存到网络文件 / 网络参数文件中 2.2 用法
register_parameter(nameparam)
name参数名称param参数张量 须是 torch.nn.Parameter() 对象 或 None
否则报错如下
import torch
import torch.nn as nnclass MyModule(nn.Module):def __init__(self):super(MyModule, self).__init__()self.conv1 nn.Conv2d(in_channels3, out_channels6, kernel_size3, stride1, padding1, biasFalse)self.conv2 nn.Conv2d(in_channels6, out_channels9, kernel_size3, stride1, padding1, biasFalse)self.register_parameter(weight, torch.nn.Parameter(torch.ones(10, 10)))self.register_parameter(bias, torch.nn.Parameter(torch.zeros(10)))def forward(self, x):x self.conv1(x)x self.conv2(x)x x * self.weight self.biasreturn xnet MyModule()for name, param in net.named_parameters():print(name, param.shape)print(\n, **40, \n)for key, val in net.state_dict().items():print(key, val.shape)
结果显示
3、register_buffer()
register_buffer()是 torch.nn.Module() 类中的一个方法
3.1 作用 将 self.weight 和 self.bias 定义为不可学习的参数不会被保存到网络对象的参数中不会被优化器作用进行学习 self.weight 和 self.bias 可被保存到 state_dict 中进而可以 保存到网络文件 / 网络参数文件中 它用于在网络实例中 注册缓冲区存储在缓冲区中的数据类似于参数但不是参数 参数可以被优化器更新 requires_gradFalse / Truebuffer 中的数据 不会被优化器更新
3.2 用法 register_buffer(nametensor) name参数名称tensor张量 代码
import torch
import torch.nn as nnclass MyModule(nn.Module):def __init__(self):super(MyModule, self).__init__()self.conv1 nn.Conv2d(in_channels3, out_channels6, kernel_size3, stride1, padding1, biasFalse)self.conv2 nn.Conv2d(in_channels6, out_channels9, kernel_size3, stride1, padding1, biasFalse)self.register_buffer(weight, torch.ones(10, 10)) # 注意定义的方式self.register_buffer(bias, torch.zeros(10))def forward(self, x):x self.conv1(x)x self.conv2(x)x x * self.weight self.biasreturn xnet MyModule()for name, param in net.named_parameters():print(name, param.shape)print(\n, **40, \n)for key, val in net.state_dict().items():print(key, val.shape)效果如下所示