Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么';在pytorch中使用子模型的两种方法有什么不同?_Pytorch - Fatal编程技术网

什么';在pytorch中使用子模型的两种方法有什么不同?

什么';在pytorch中使用子模型的两种方法有什么不同?,pytorch,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

方法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()
当我训练父亲时,似乎没什么不同


不过我还是想得到一些详细的解释。有什么想法吗?

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

从执行的角度来看,二者是相同的,但考虑子网作为实体(对象)并具有各自的正向传递(和反向传递)作为它们各自的行为更有意义。p>


方法2可能更有意义的一个场景是,当您必须显式地将子网约束为仅由
父网使用时,从面向对象的角度来看,方法1将两个子网实现为对象,并将向前通过网络作为行为。而在方法2中,两个子网被定义为父网对象的行为,因此被定义为方法

从执行的角度来看,二者是相同的,但考虑子网作为实体(对象)并具有各自的正向传递(和反向传递)作为它们各自的行为更有意义。p>


方法2可能更有意义的一种情况是,当您必须明确地将子网限制为仅由
父网
使用时,我认为这取决于您是否在
父网
之外使用
子网
函数的子例程。如果不是,那么这两个子例程只是一个不应该与其他网络共享的属性,这在第一个实例中是可能的。我认为这取决于您是否在您的
父网
之外使用
子网
功能的子例程。如果不是,那么这两个子例程只是一个不应该与其他网络共享的属性,这在第一个实例中是可能的