定义自定义变量pytorch张量

时间:2020-01-29 04:38:41

标签: pytorch

我有一个与此类似的问题:

有一个(n1, n2)形式的输入向量,我想要一个f(n1, n2) = f(n2, n1)的模型。我希望这个模型是线性的。例如,我想学习的2x2矩阵。 2x2矩阵有4个权重,训练将尝试学习这些权重。但是,收缩可以巧妙地减少问题。 f(nvec) = W*nvec,即nvec=(n1, n2)。 因此,假设X = [[0, 1],[1, 0]]是一个2x2矩阵,它会翻转矢量,然后是f(n2,n1) = W*X*(n1, n2) = f(n1, n2) = W (n1, n2)

基本上,等式意味着W*X = W,或者如果是W = [[w1, w2], [w3, w4]],则等式意味着W = [[w1, w1], [w3, w3]],即矩阵只有2个自由参数。如何在pytorch中定义这样的模型?

谢谢。

1 个答案:

答案 0 :(得分:1)

如果参数具有特殊的结构,并且不想使用默认图层存储的默认参数,则可以自己定义一个图层,并使用nn.Parameter来存储参数。

例如,

class CustomLayer(nn.Module):  # layer must be derived from nn.Module class
  def __init__(self):  # you can have arguments here...
    super(CustomLayer, self).__init__()
    self.params = nn.Parameter(data=torch.rand((2, 1), dtype=torch.float), requires_grad=True)

  def forward(self, x):
    w = self.params.repeat(1, 2)  # create a 2x2 matrix from the two parameters
    y = torch.bmm(x, w)
    return y