pytorch中的单个运算符模块与torch.nn的基本块

tf7tbtn2  于 2023-04-06  发布在  其他
关注(0)|答案(1)|浏览(139)

我正在使用pytorch,我做了一个简单的单操作符nn.module(model1)如下:

class conv(nn.Module):
    def __init__(self):
        conv1 = nn.Conv2d(1,20,5)
    def forward(self,x):
        return(conv1(x))
model1 = conv()
model1(input)

我开始想知道它与torch.nn层本身有什么不同。

model2 = nn.Conv2d(1,20,5)
model2(input)

model1(input)的行为与model2(input)相同吗?如果是,它们之间的区别是什么?

model3 = nn.Sequential(nn.Conv2d(1,20,5))
model2(input)

如果区别来自于它的类属性,那么如果我这样定义model3呢?在任何意义上将model3视为model1都可以吗?
我试着调查他们的实际类,但我真的不知道他们是什么。

>>> type(model2)
<class 'torch.nn.modules.conv.Conv2d'>
>>> type(model3)
<class 'torch.nn.modules.container.Sequential'>
umuewwlo

umuewwlo1#

在你的问题中有两个因素我想回答。第一个是 Package 一个内置的nn.Module的事实,第二个是为什么你会得到不同的结果。
它们是相同的层,具有相同的属性。然而,使用自定义nn.Modulenn.Sequential所做的是 Package 这些层(在编程意义上),换句话说,它不会改变底层本身。
model1model2model3在相同的输入下会产生不同的结果,这是因为它们都是单独初始化的,因此它们的初始化权重是不同的!

相关问题