Neural network 具有作为另一网络参数的网络输出

Neural network 具有作为另一网络参数的网络输出,neural-network,pytorch,parameter-passing,gradient-descent,backpropagation,Neural Network,Pytorch,Parameter Passing,Gradient Descent,Backpropagation,我有y=y(x;θ)和theta=M(t;omega),其中x和t是输入变量(从数据集中给出),以及theta和omega可训练参数。我需要有theta作为omega的函数。然后,我在y上有一个损失函数,需要通过M将梯度反向传播到y。如何在pytorch中创建这样的结构 目前,我的网络构建如下(size是一个整数列表,定义为size=[input\u size,hidden1\u size,hidden2\u size,…,output\u size]) 我认为这很简单,或者我没有正确理解您的查

我有
y=y(x;θ)
theta=M(t;omega)
,其中
x
t
是输入变量(从数据集中给出),以及
theta
omega
可训练参数。我需要有
theta
作为
omega
的函数。然后,我在
y
上有一个损失函数,需要通过
M
将梯度反向传播到
y
。如何在pytorch中创建这样的结构

目前,我的网络构建如下(
size
是一个整数列表,定义为
size=[input\u size,hidden1\u size,hidden2\u size,…,output\u size]


我认为这很简单,或者我没有正确理解您的查询

x
t
是您的输入变量

现在让我们定义一个网络
M
,它将接受输入t并输出
theta

M = nn.Sequential(....) # declare network here
接下来,我们定义一个网络
Y
。这可能很棘手,因为您想使用θ作为参数。使用
nn
(请参阅)中声明的模块的功能对应项可能更容易、更直观。我将尝试给出一个例子,假设θ是线性模的参数

class Y(nn.Module):
    def __init__(self):
        # declare any modules here

    def forward(self, theta, x):
        return nn.functional.linear(input=x, weight=theta, bias=None)
总的向前传球是

def forward(t, x, M, Y):
    theta = M(t)
    output = Y(theta, x)
    return output

谢谢,但是我不熟悉使用模块来定义网络。另外,如何修改多个层的代码?我想我必须根据每层的大小手动拆分θ,对吗?我编辑了我的问题,以提供我对
M
的实现。如果您能帮助我以类似的方式(多层)编写
Y
,那就太好了。非常感谢。@Simon你能解释一下你想如何使用M i.eθ的输出吗。只需编写数学运算即可。
theta
只需分配给
Y
参数即可。如果
theta
只是网络
Y
第一层的线性权重,则返回nn.functional.linear(输入=x,权重=theta,偏差=None)是可以的,但我需要在所有层都执行,包括偏差。一种方法是将
theta
作为所有权重和偏差的叠加,然后在其上循环(我需要事先保存所有大小),正如您所写的那样分配它们。我真的不喜欢这种方式,我想知道是否有更好的方式。我无法想象在任何情况下你怎么能不这样做。如果你的网络M输出一个向量,你将不得不重新排列它以获得Y的参数,对吗?是的,除非Pytork中有我不知道的特殊结构(我对Pytork的了解相当基本:D)。不管怎样,我将开始使用您的代码编写循环,如果有人回复,我将使用se。如果没有,我会接受你的(你的代码帮助了我)。谢谢
def forward(t, x, M, Y):
    theta = M(t)
    output = Y(theta, x)
    return output