自己写模型类的优势就是可以自定义层与层之间的连接关系,自定义数据流x的流向。例子1:class Module(nn.Module): def __init__(self): super(Module, self).__init__() # ... def forward(self, x): # ... …
def __init__(self, **kwargs): super(MyModel, self).__init__(**kwargs) self.weight1 = nn.Parameter(torch.rand(20, 20)) self.weight2 = torch.rand(20, 20) def forward(self, x): pass n = MyModel() for name, param in n.named_parameters(): print(name) 1. 2. 3. 4. 5...
这里面用到了一个函数nn.init.calculate_gain(nonlinearity, param=None)这个函数的作用是计算激活函数的「方差变化尺度」,怎么理解这个方差变化尺度呢?其实就是输入数据的方差除以经过激活函数之后的输出数据的方差。nonlinearity 表示激活函数的名称,如tanh。param 表示激活函数的参数,如 Leaky ReLU 的negative_slop。(...
class Optimizer(object):def zero_grad(self):for group in self.param_groups:for p in group['params']:if p.grad is not None:p.grad.detach_()p.grad.zero_() class Optimizer(object):def __init__(self, params, defaults):self.defaults = defaultsself.state = defaultdict(dict)self.param_g...
(Module) def __init__(self): # 初始化构造函数 super(Net, self).__init__() # 等价与self.register_parameter('param1',nn.Parameter(t.randn(3,3))) self.param1 = nn.Parameter(t.rand(3, 3)) self.submodule1 = nn.Linear(3, 4) def forward(self, input): x = (input) x = ...
初始化模型参数需要引入init模块: from torch.nn import init 比如针对刚才的net对象,我们初始化它的每个参数为均值为0、标准差为0.01的正态分布随机数: for name, param in net.named_parameters(): init.normal_(param, mean=0, std=0.01) print(name, param.data) ...
torch.nn.init.sparse_(tensor,sparsity,std=0.01) 从正态分布N~(0. std)中进行稀疏化,使每一个column有一部分为0 sparsity- 每一个column稀疏的比例,即为0的比例 nn.init.sparse_(w, sparsity=0.1) 11. 计算增益 torch.nn.init.calculate_gain(nonlinearity,param=None)...
init.constant_(param,0) print(name, param.data) 上面使用了torch.nn.init中自带的初始化方法,也可以自己实现一个满足自己需求的初始化方法. 我们先来看看PyTorch是怎么实现这些初始化方法的,例如torch.nn.init.normal_: defnormal_(tensor, mean=0, std=1):withtorch.no_grad():returntensor.normal_(mean...
importtorchimporttorch.nnasnnfromtorch.optimimportAdamclassNN_Network(nn.Module):def__init__(self,in_dim,hid,out_dim):super(NN_Network, self).__init__() self.linear1 = nn.Linear(in_dim,hid) self.linear2 = nn.Linear(hid,out_dim) ...
class MyLoss(torch.nn.Moudle):def __init__(self):super(MyLoss, self).__init__() def forward(self, x, y):loss = torch.mean((x - y) ** 2)return loss 标签平滑(label smoothing) 写一个label_smoothing.py的文件,然后在训练代码里引用,用LSR代替交叉熵损...