Deep learning 扁平效率网模型

Deep learning 扁平效率网模型,deep-learning,pytorch,conv-neural-network,efficientnet,Deep Learning,Pytorch,Conv Neural Network,Efficientnet,我正在尝试删除efficientnet pytorch实现中的顶层。然而,如果我按照作者的建议,简单地用我自己的完全连接的层替换最后的\u fc层,我担心即使在这个层之后仍然会有swish激活,而不是像我预期的那样什么都没有。打印模型时,最后一行如下所示: (\u bn1):BatchNorm2d(1280,每股收益=0.001,动量=0.010000000000000009,仿射=True,跟踪运行统计=True) (_avg_pooling):AdaptiveAvgPool2d(输出大小=1

我正在尝试删除efficientnet pytorch实现中的顶层。然而,如果我按照作者的建议,简单地用我自己的完全连接的层替换最后的
\u fc
层,我担心即使在这个层之后仍然会有
swish
激活,而不是像我预期的那样什么都没有。打印模型时,最后一行如下所示:

(\u bn1):BatchNorm2d(1280,每股收益=0.001,动量=0.010000000000000009,仿射=True,跟踪运行统计=True)
(_avg_pooling):AdaptiveAvgPool2d(输出大小=1)
(_辍学):辍学(p=0.2,原地=假)
(_fc):顺序(
(0):线性(输入特征=1280,输出特征=512,偏差=True)
(1) :ReLU()
(2) :辍学(p=0.25,原地=假)
(3) :线性(输入特征=512,输出特征=128,偏差=真)
(4) :ReLU()
(5) :辍学(p=0.25,原地=假)
(6) :线性(输入特征=128,输出特征=1,偏差=真)
)
(_swish):MemoryEfficientSwish()
)
)
其中,
\u fc
是我更换的模块

我希望做的是:

base\u model=EfficientNet.from\u pretrained('EfficientNet-b3'))
model=nn.Sequential(*列表(base_model.children()[:-3]))
在我看来,
base\u model.children()
将模型从嵌套结构中展平。然而,现在我似乎无法像使用虚拟输入那样使用模型,
x=torch.randn(1,3255255)
我得到了错误:
TypeError:forward()接受1个位置参数,但给出了2个位置参数

需要注意的是,
model[:2](x)
可以工作,但不能
model[:3](x)
<代码>模型[2]
似乎是移动块


这是对上述代码的一个解释。

这是对
print(net)
实际功能的一个常见误解

\u fc
之后有一个
\u swish
模块,这一事实仅仅意味着前者在后者之后注册。您可以在以下位置进行检查:

类效率网(nn.模块):
def uuu init uuuu(self,blocks_args=None,global_params=None):
# [...]
#最终线性层
self._avg_pooling=nn.AdaptiveAvgPool2d(1)
self.\u dropout=nn.dropout(self.\u global\u params.dropout\u rate)
self.\u fc=nn.Linear(输出通道、self.\u全局参数、num类)
self.\u swish=MemoryEfficientSwish()
它们的定义顺序就是它们的打印顺序。具体执行什么操作时,您必须检查:

def前进(自身,输入):
#卷积层
x=自提取功能(输入)
#池和最终线性层
x=自平均池(x)
x=x.展平(起始尺寸=1)
x=自退出(x)
x=自身。_fc(x)
返回x
而且,正如您所看到的,
self.\u fc(x)
之后没有任何内容,这意味着不会应用
Swish