Networking 我是否可以同时训练两个网络,一个网络包含另一个netwrok?

Networking 我是否可以同时训练两个网络,一个网络包含另一个netwrok?,networking,pytorch,Networking,Pytorch,我在模型中定义了两个网络 def Net_One(): conv2d conv2d ... def Net_Two(): Net_One(input) conv2d fc 所以我的问题是:当我使用反向传播优化训练netu_2时,pytorch是否会自动训练netu_1?为什么?首先,模型类名的约定应该是:NetOne,NetTwo,但这并没有损害任何东西,只是约定而已 至于您的问题,取决于NetTwo()的处理。 如果NetTwo的最终丢失与Ne

我在模型中定义了两个网络

def Net_One():
    conv2d
    conv2d
    ...
def Net_Two():
    Net_One(input)
    conv2d
    fc

所以我的问题是:当我使用反向传播优化训练netu_2时,pytorch是否会自动训练netu_1?为什么?

首先,模型类名的约定应该是:
NetOne
NetTwo
,但这并没有损害任何东西,只是约定而已

至于您的问题,取决于NetTwo()的处理。
如果NetTwo的最终丢失与NetOne()无关,则反向传播将不会流经NetOne(),因此不会更新NetOne()的参数。 否则,反向传播将计算NetOne()的梯度并更新其权重

对于代码示例:

#NetTwo的损失与NetOne无关:
def NetOne():
定义初始化(自):
超级(网通,自我)。\uuuuuu初始化
...
def前进(输入):
...
def NetTwo():
定义初始化(自):
super(NetTwo,self)。\uuuuu init\uuuuuuuu()
...
def前进(输入):
#在此处理过程中,NetTwo的层从不使用temp。。
...
temp=NetOne(输入)
输入=conv2d(输入)
...
在上面的代码中,
temp
从未使用过,因此NetTwo更新时不会更新NetOne

但是如果NetTwo.forward()使用了
temp
,它将被更新,如下所示:

def NetTwo():
定义初始化(自):
super(NetTwo,self)。\uuuuu init\uuuuuuuu()
...
def前进(输入):
#在这个过程中,NetTwo的层使用temp。
...
temp=NetOne(输入)
输入=conv2d(温度)
...

这回答了你的问题吗?

是的,网络管理员也会接受培训。Net_One和Net_two都是连接的,因为您从通过这两个网络的所有层的输入中获得输出。你可以找到关于它的教程。例如:非常感谢!现在我明白了!