![](/img/trans.png)
[英]pytorch nn.Sequential(*list) TypeError: list is not a Module subclass
[英]Model Created With Pytorch's *list, .children(), and nn.sequential Produces Different Output Tensors
我目前正在嘗試在我的模型中使用預訓練的 DenseNet。 我正在關注本教程: https ://pytorch.org/hub/pytorch_vision_densenet/,它運行良好,輸入為 [1,3,244,244],它返回一個 [1,1000] 張量,完全符合預期。 但是,目前我正在使用此代碼將預訓練的 Densenet 加載到我的模型中,並將其用作“特征提取”模型。 這是init函數中的代碼
base_model = torch.hub.load('pytorch/vision:v0.10.0', 'densenet121', pretrained=True)
self.base_model = nn.Sequential(*list(base_model.children())[:-1])
它在轉發功能中是這樣使用的
x = self.base_model(x)
然而,采用相同的輸入,返回大小為 ([1, 1024, 7, 7]) 的張量。 我不知道什么不起作用,我認為這是因為 DenseNet 將所有層連接在一起,但我不知道如何讓它以相同的方法工作。 關於如何在我自己的模型中使用預訓練 DenseNet 的任何提示?
通常nn.Modules
forward
定義中具有邏輯,這意味着僅通過將模型轉換為順序塊將無法訪問它。 最值得注意的是,您通常會發現 CNN 和網絡的分類器層之間發生下采樣和/或扁平化。 這是 DenseNet。
如果你看一下Torchvision的正向實施DenseNet的在這里您將看到:
def forward(self, x: Tensor) -> Tensor:
features = self.features(x)
out = F.relu(features, inplace=True)
out = F.adaptive_avg_pool2d(out, (1, 1))
out = torch.flatten(out, 1)
out = self.classifier(out)
return out
您可以看到 CNN self.features
輸出的張量(shape (*, 1024, 7, 7)
)在被饋送到分類器(最后一層)之前如何通過 ReLU、自適應平均池和展平進行處理。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.