最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

pytorch在fintune時將sequential中的層輸出方法,以vgg為例

 更新時間:2019年08月20日 08:40:24   作者:BinWang-cvlab  
今天小編就為大家分享一篇pytorch在fintune時將sequential中的層輸出方法,以vgg為例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

有時候我們在fintune時發(fā)現pytorch把許多層都集合在一個sequential里,但是我們希望能把中間層的結果引出來做下一步操作,于是我自己琢磨了一個方法,以vgg為例,有點僵硬哈!

首先pytorch自帶的vgg16模型的網絡結構如下:

VGG(
 (features): Sequential(
 (0): Conv2d (3, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
 (1): ReLU(inplace)
 (2): Conv2d (64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
 (3): ReLU(inplace)
 (4): MaxPool2d(kernel_size=(2, 2), stride=(2, 2), dilation=(1, 1))
 (5): Conv2d (64, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
 (6): ReLU(inplace)
 (7): Conv2d (128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
 (8): ReLU(inplace)
 (9): MaxPool2d(kernel_size=(2, 2), stride=(2, 2), dilation=(1, 1))
 (10): Conv2d (128, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
 (11): ReLU(inplace)
 (12): Conv2d (256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
 (13): ReLU(inplace)
 (14): Conv2d (256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
 (15): ReLU(inplace)
 (16): MaxPool2d(kernel_size=(2, 2), stride=(2, 2), dilation=(1, 1))
 (17): Conv2d (256, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
 (18): ReLU(inplace)
 (19): Conv2d (512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
 (20): ReLU(inplace)
 (21): Conv2d (512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
 (22): ReLU(inplace)
 (23): MaxPool2d(kernel_size=(2, 2), stride=(2, 2), dilation=(1, 1))
 (24): Conv2d (512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
 (25): ReLU(inplace)
 (26): Conv2d (512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
 (27): ReLU(inplace)
 (28): Conv2d (512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
 (29): ReLU(inplace)
 (30): MaxPool2d(kernel_size=(2, 2), stride=(2, 2), dilation=(1, 1))
 )
 (classifier): Sequential(
 (0): Linear(in_features=25088, out_features=4096)
 (1): ReLU(inplace)
 (2): Dropout(p=0.5)
 (3): Linear(in_features=4096, out_features=4096)
 (4): ReLU(inplace)
 (5): Dropout(p=0.5)
 (6): Linear(in_features=4096, out_features=1000)
 )
)

我們需要fintune vgg16的features部分,并且我希望把3,8, 15, 22, 29這五個作為輸出進一步操作。我的想法是自己寫一個vgg網絡,這個網絡參數與pytorch的網絡一致但是保證我們需要的層輸出在sequential外。于是我寫的網絡如下:

class our_vgg(nn.Module):
 def __init__(self):
  super(our_vgg, self).__init__()
  self.conv1 = nn.Sequential(
   # conv1
   nn.Conv2d(3, 64, 3, padding=35),
   nn.ReLU(inplace=True),
   nn.Conv2d(64, 64, 3, padding=1),
   nn.ReLU(inplace=True),

  )
  self.conv2 = nn.Sequential(
   # conv2
   nn.MaxPool2d(2, stride=2, ceil_mode=True), # 1/2
   nn.Conv2d(64, 128, 3, padding=1),
   nn.ReLU(inplace=True),
   nn.Conv2d(128, 128, 3, padding=1),
   nn.ReLU(inplace=True),

  )
  self.conv3 = nn.Sequential(
   # conv3
   nn.MaxPool2d(2, stride=2, ceil_mode=True), # 1/4
   nn.Conv2d(128, 256, 3, padding=1),
   nn.ReLU(inplace=True),
   nn.Conv2d(256, 256, 3, padding=1),
   nn.ReLU(inplace=True),
   nn.Conv2d(256, 256, 3, padding=1),
   nn.ReLU(inplace=True),

  )
  self.conv4 = nn.Sequential(
   # conv4
   nn.MaxPool2d(2, stride=2, ceil_mode=True), # 1/8
   nn.Conv2d(256, 512, 3, padding=1),
   nn.ReLU(inplace=True),
   nn.Conv2d(512, 512, 3, padding=1),
   nn.ReLU(inplace=True),
   nn.Conv2d(512, 512, 3, padding=1),
   nn.ReLU(inplace=True),

  )
  self.conv5 = nn.Sequential(
   # conv5
   nn.MaxPool2d(2, stride=2, ceil_mode=True), # 1/16
   nn.Conv2d(512, 512, 3, padding=1),
   nn.ReLU(inplace=True),
   nn.Conv2d(512, 512, 3, padding=1),
   nn.ReLU(inplace=True),
   nn.Conv2d(512, 512, 3, padding=1),
   nn.ReLU(inplace=True),
  )


 def forward(self, x):

  conv1 = self.conv1(x)
  conv2 = self.conv2(conv1)
  conv3 = self.conv3(conv2)
  conv4 = self.conv4(conv3)
  conv5 = self.conv5(conv4)

  return conv5

接著就是copy weights了:

def convert_vgg(vgg16):#vgg16是pytorch自帶的
 net = our_vgg()# 我寫的vgg

 vgg_items = net.state_dict().items()
 vgg16_items = vgg16.items()

 pretrain_model = {}
 j = 0
 for k, v in net.state_dict().iteritems():#按順序依次填入
  v = vgg16_items[j][1]
  k = vgg_items[j][0]
  pretrain_model[k] = v
  j += 1
 return pretrain_model


## net是我們最后使用的網絡,也是我們想要放置weights的網絡
net = net()

print ('load the weight from vgg')
pretrained_dict = torch.load('vgg16.pth')
pretrained_dict = convert_vgg(pretrained_dict)
model_dict = net.state_dict()
# 1. 把不屬于我們需要的層剔除
pretrained_dict = {k: v for k, v in pretrained_dict.items() if k in model_dict}
# 2. 把參數存入已經存在的model_dict
model_dict.update(pretrained_dict) 
# 3. 加載更新后的model_dict
net.load_state_dict(model_dict)
print ('copy the weight sucessfully')

這樣我就基本達成目標了,注意net也就是我們要使用的網絡fintune部分需要和our_vgg一致。

以上這篇pytorch在fintune時將sequential中的層輸出方法,以vgg為例就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • python namedtuple函數的使用

    python namedtuple函數的使用

    今天介紹collections里面的一個好用的小函數: namedtuple函數(不創(chuàng)類而可以擁有類的便利),例如可以使用object.attribute
    2021-06-06
  • python簡單圖片操作:打開\顯示\保存圖像方法介紹

    python簡單圖片操作:打開\顯示\保存圖像方法介紹

    這篇文章主要介紹了python簡單圖片操作:打開\顯示\保存圖像方法介紹,還涉及將圖片保存為灰度圖的簡單方法示例,具有一定參考價值,需要的朋友可以了解下。
    2017-11-11
  • python?使用第三方庫requests-toolbelt?上傳文件流的示例

    python?使用第三方庫requests-toolbelt?上傳文件流的示例

    這篇文章主要介紹了python?使用第三方庫requests-toolbelt?上傳文件流,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-09-09
  • Python安裝lz4-0.10.1遇到的坑

    Python安裝lz4-0.10.1遇到的坑

    本篇文章給大家分享了Python安裝lz4-0.10.1的詳細過程以及遇到的坑,需要的讀者們參考下。
    2018-05-05
  • Python構造函數與析構函數超詳細分析

    Python構造函數與析構函數超詳細分析

    在python之中定義一個類的時候會在類中創(chuàng)建一個名為__init__的函數,這個函數就叫做構造函數。它的作用就是在實例化類的時候去自動的定義一些屬性和方法的值,而析構函數恰恰是一個和它相反的函數,這篇文章主要介紹了Python構造函數與析構函數
    2022-11-11
  • 使用Python實現跳一跳自動跳躍功能

    使用Python實現跳一跳自動跳躍功能

    這篇文章主要介紹了使用Python實現跳一跳自動跳躍功能,本文圖文并茂通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-07-07
  • 使用Python判斷一個文件是否被占用的方法教程

    使用Python判斷一個文件是否被占用的方法教程

    這篇文章主要給大家介紹了關于如何使用Python判斷一個文件是否被占用的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-12-12
  • Python實現的爬取百度文庫功能示例

    Python實現的爬取百度文庫功能示例

    這篇文章主要介紹了Python實現的爬取百度文庫功能,結合實例形式分析了Python針對百度文庫的爬取、編碼轉換、文件保存等相關操作技巧,需要的朋友可以參考下
    2019-02-02
  • Python滲透測試入門之Scapy庫的使用詳解

    Python滲透測試入門之Scapy庫的使用詳解

    Scapy?是一個用來解析底層網絡數據包的Python模塊和交互式程序,該程序對底層包處理進行了抽象打包,使得對網絡數據包的處理非常簡便。本文就來聊聊它的具體使用,希望對大家有所幫助
    2023-03-03
  • Python的SQLalchemy模塊連接與操作MySQL的基礎示例

    Python的SQLalchemy模塊連接與操作MySQL的基礎示例

    SQLalchemy是Python世界中驅動MySQL的一款高人氣模塊,這里我們從入門開始來看一下Python的SQLalchemy模塊連接與操作MySQL的基礎示例:
    2016-07-07

最新評論

谷城县| 吉水县| 长岛县| 靖安县| 富蕴县| 中宁县| 德安县| 留坝县| 茂名市| 太仆寺旗| 鲁甸县| 岳西县| 乌鲁木齐县| 贡觉县| 承德县| 平远县| 嵩明县| 图木舒克市| 肇庆市| 合川市| 沂水县| 炉霍县| 宜川县| 冕宁县| 佛学| 浦江县| 武胜县| 滨州市| 泰和县| 吉林市| 奈曼旗| 漾濞| 襄垣县| 河东区| 宣化县| 南京市| 桐乡市| 建昌县| 库尔勒市| 邮箱| 白朗县|