回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我想在<code>AdaptiveAvgPool2d</code>层之后添加<code>layer normalization</code>函数,在<code>fc layer</code>层之后添加<code>L2 normalization</code>。我希望我的<code>fc layer</code>输出为200,所以尝试不包括fc层而不是它,使其成为新的<code>fc layer</code>,但它没有删除<code>fc layers</code>带有预训练模型,我使用<code>googlenet</code></p>
<p><strong>我的代码:</strong></p>
<pre><code>class GoogleNet(nn.Module):
def __init__(self):
super(GoogleNet,self).__init__()
self.model = googlenet_pytorch.GoogLeNet.from_pretrained('googlenet')
self.fc = nn.Linear(1024,200, bias=False),
def forward(self, x):
batch_size ,_,_,_ =x.shape
x = self.model.extract_features(x)
x = self.model._avg_pooling(x)
x = F.layer_norm(x,x.size[1:],elementwise_affine=False)
x = self.fc(x)
x = F.normalize(x, p=2, dim=1)
return x
</code></pre>
<p><strong>我得到的输出:</strong></p>
<pre><code> .....
.....
.....
(aux1): InceptionAux(
(conv): BasicConv2d(
(conv): Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn): BatchNorm2d(128, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)
)
(fc1): Linear(in_features=2048, out_features=1024, bias=True)
(fc2): Linear(in_features=1024, out_features=1000, bias=True)
)
(aux2): InceptionAux(
(conv): BasicConv2d(
(conv): Conv2d(528, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn): BatchNorm2d(128, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)
)
(fc1): Linear(in_features=2048, out_features=1024, bias=True)
(fc2): Linear(in_features=1024, out_features=1000, bias=True)
)
(avgpool): AdaptiveAvgPool2d(output_size=(1, 1))
(dropout): Dropout(p=0.2, inplace=False)
(fc): Linear(in_features=1024, out_features=1000, bias=True)
)
)
</code></pre>
<p><strong>我想要的输出:</strong></p>
<pre><code> ......
......
......
(aux1): None
(aux2): None
(avgpool): AdaptiveAvgPool2d(output_size=(1, 1))
** layer normalization here**
(dropout): Dropout(p=0.2, inplace=False)
(fc): Linear(in_features=1024, out_features=200, bias=False)
**L2 normalization here**
)
</code></pre>
<p><strong>如果有人需要知道这个问题的解决方案代码,在iacob的回答的帮助下,我解决了它,我将它添加为<a href="https://stackoverflow.com/a/67518840/14803728">an answer</a>。</strong></p>