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都是连接的,因为您从通过这两个网络的所有层的输入中获得输出。你可以找到关于它的教程。例如:非常感谢!现在我明白了!