我正在使用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'>
1条答案
按热度按时间umuewwlo1#
在你的问题中有两个因素我想回答。第一个是 Package 一个内置的
nn.Module
的事实,第二个是为什么你会得到不同的结果。它们是相同的层,具有相同的属性。然而,使用自定义
nn.Module
和nn.Sequential
所做的是 Package 这些层(在编程意义上),换句话说,它不会改变底层本身。model1
、model2
和model3
在相同的输入下会产生不同的结果,这是因为它们都是单独初始化的,因此它们的初始化权重是不同的!