在pytorch中使用子模型的两种方法有什么区别?

时间:2019-11-05 04:23:22

标签: pytorch

方法1:

class subnet1():
    def __init__()

class subnet2():
    def __init__()

class father_net():
    def __init__():
        self.n1 = subnet1()
        self.n2 = subnet2()
    def forward():
        x = self.n1()
        x = self.n2(x)

方法2:

class father_net():
    def subnet1():
    def subnet2():
    def forward():
        x = self.subnet1()
        x = self.subnet2()

训练father_net时似乎没什么不同。

但是我仍然想获得一些详细的解释。有想法吗?

1 个答案:

答案 0 :(得分:0)

从面向对象的角度来看,方法1将两个子网实现为对象,并且将通过网络的正向传递作为一种行为。在方法2中,两个子网被定义为父网络对象的行为,因此被定义为方法。

从执行角度来看,两者是相同的,但是将子网视为实体(对象)并使其各自的前向通过(和后向通过)作为它们各自的行为是更有意义的。

方法2可能更有意义的一种情况是,您必须明确限制子网只能由father_net使用。