Pytorch 各種奇葩古怪的使用方法


不間斷更新。。。

增減layer

增加layer

增加layer很方便,可以使用model.add_module('layer name', layer)

刪減layer

刪減layer很少用的到,之所以我會有這么一個需求,是因為我需要使用vgg做遷移學習,而且需要修改最后的輸出。

而vgg由兩個部分組成:featuresclassifier,這兩個部分都是torch.nn.Sequential,所以不能單獨對其中某一層做修改。

而如果對整個Sequential做修改,那么這個模型的參數會被初始化,而我又需要保留這些參數,所以才想到是否有辦法把最后一層fc刪掉,重新再填加一個不就行了?具體方法如下:

以vgg16為例,假設我們現在只需要對classifier的最后一層全連接層的輸出做修改:

model = models.vgg16(pretrained=True)

先看一下未做修改之前的classifier的參數:

  • 截取要修改的layer之前的網絡
removed = list(model.classifier.children())[:-1]

model.classifier = torch.nn.Sequential(*removed)
  • 添加fc層
model.add_module('fc', torch.nn.Linear(4096, out_num)) # out_num是你希望輸出的數量 

此時我們看一下model以及classifier的參數有什么變化:

這達到了我預期的效果。



MARSGGBO原創





2018-4-10




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM