當我微調一個預訓練的 resnet152 模型時,我似乎丟失了我想要訪問的所有命名層。我已經包含了簡單的微調模型代碼,以及預訓練和微調的命名層的列印。我想維護層名稱,以便我可以在類激活圖中可視化它們的輸出。
代碼
class ConvNet3(nn.Module):
def init(self):
super().init()
model = models.resnet152(pretrained=True)
model.fc = nn.Linear(2048, 10)
self.model = model
def forward(self, x):
return self.model(x) # [batch_size, 10]
import torchvision.models as models
model = ConvNet3().eval()
print([n for n, _ in model.named_children()])
model = models.resnet152(pretrained=True).eval()
print([n for n, _ in model.named_children()])
輸出
[‘model’]
[‘conv1’, ‘bn1’, ‘relu’, ‘maxpool’, ‘layer1’, ‘layer2’, ‘layer3’, ‘layer4’, ‘avgpool’, ‘fc’]
uj5u.com熱心網友回復:
圖層沒有丟失,您將原始 Resnet 模型封裝在自己的類中。如果您使用:
print([n for n, _ in model.model.named_children()])
因為 Resnet 模型存盤在類的model屬性下ConvNet3。
除非您出于其他原因需要它,否則包裝類似乎沒有必要,更簡單的方法是執行以下操作:
model = models.resnet152(pretrained=True)
model.fc = nn.Linear(2048,10)
model.eval()
print([n for n, _ in model.named_children()])
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/515402.html
標籤:调试火炬人工智能
下一篇:顯示變數的所有特征
