Если я правильно понимаю вашу проблему, вы хотите создать линейный слой с матрицей M
, а затем создать два вывода
y_1 = (M + μ_1) * x + b
y_2 = (M + μ_2) * x + b
, где μ_1, μ_2 ~ P
. Самый простой способ, на мой взгляд, создать пользовательский класс
import torch
import torch.nn.functional as F
from torch import nn
class NoisyLinear(nn.Module):
def __init__(self, n_in, n_out):
super(NoisyLinear, self).__init__()
# or any other initialization you want
self.weight = nn.Parameter(torch.randn(n_out, n_in))
self.bias = nn.Parameter(torch.randn(n_out))
def sample_noise(self):
# implement your noise generation here
return torch.randn(*self.weight.shape) * 0.01
def forward(self, x):
noise = self.sample_noise()
return F.linear(x, self.weight + noise, self.bias)
nl = NoisyLinear(4, 3)
x = torch.randn(2, 4)
y1 = nl(x)
y2 = nl(x)
print(y1, y2)