什么';在pytorch中使用子模型的两种方法有什么不同?
方法1:什么';在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
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可能更有意义的一种情况是,当您必须明确地将子网限制为仅由父网
使用时,我认为这取决于您是否在父网
之外使用子网
函数的子例程。如果不是,那么这两个子例程只是一个不应该与其他网络共享的属性,这在第一个实例中是可能的。我认为这取决于您是否在您的父网
之外使用子网
功能的子例程。如果不是,那么这两个子例程只是一个不应该与其他网络共享的属性,这在第一个实例中是可能的