一、需求
给定模型中的训练参数,我们对其进行扰动,得到
,且
服从正态分布或者其他分布(下面假设
服从正态分布)。需求是想要把
变成新的参数,并用于模型训练。
二、实现
代码
import torch
import torch.nn as nn
# 参数信息
n_node = 3
dim = 5
# 训练参数x
x = nn.Parameter(torch.tensor([[0.1, 0.1, 0.1, 0.1, 0.1], [0.2, 0.2, 0.2, 0.2, 0.2], [0.5, 0.5, 0.5, 0.5, 0.5]]))
# 输出参数x
print(x)
# 扰动ksi(扰动服从均值为0,方差1的正态分布)
ksi = torch.zeros(n_node, dim)
nn.init.normal_(tensor=ksi, mean=0.0, std=1.0)
print(ksi)
# 得到扰动后的x'
x_ = nn.Parameter(x + ksi)
print(x_)
三、效果(程序执行一次的输出结果)
Parameter containing:
tensor([[0.1000, 0.1000, 0.1000, 0.1000, 0.1000],
[0.2000, 0.2000, 0.2000, 0.2000, 0.2000],
[0.5000, 0.5000, 0.5000, 0.5000, 0.5000]], requires_grad=True)
tensor([[ 2.0497, 0.9443, 0.2037, -0.2141, 1.5716],
[-1.7983, 0.6927, -1.0899, -1.8570, -0.7935],
[ 2.4235, -0.5348, 0.0111, -1.1543, -0.2008]])
Parameter containing:
tensor([[ 2.1497, 1.0443, 0.3037, -0.1141, 1.6716],
[-1.5983, 0.8927, -0.8899, -1.6570, -0.5935],
[ 2.9235, -0.0348, 0.5111, -0.6543, 0.2992]], requires_grad=True)