定义自定义变量pytorch张量

定义自定义变量pytorch张量,pytorch,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

我有一个类似的问题:

有一个形式为
(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]]
,即矩阵只有两个自由参数。如何在pytorch中定义这样的模型


谢谢。

如果您的参数具有特殊结构,并且您不想使用默认图层存储的默认参数,则可以自行定义图层并使用来存储参数

比如说,

类CustomLayer(nn.Module):#层必须从nn.Module类派生
def uu init(self):#您可以在此处使用参数。。。
超级(CustomLayer,self)。\uuuu init\uuuuu()
self.params=nn.Parameter(data=torch.rand((2,1),dtype=torch.float),需要_grad=True)
def前进(自身,x):
w=self.params.repeat(1,2)#从两个参数创建一个2x2矩阵
y=火炬。bmm(x,w)
返回y