PyTorch提取中間層特征

https://mp.weixin.qq.com/s/U80uqeP-_nRJTjJZ3MfQ4g
本文僅作為學(xué)術(shù)分享豺鼻,如果侵權(quán),會刪文處理

作者:澀醉
https://www.zhihu.com/question/68384370/answer/751212803

  • 通過pytorch的hook機制簡單實現(xiàn)了一下,只輸出conv層的特征圖。
import torch
from torchvision.models import resnet18
import torch.nn as nn
from torchvision import transforms

import matplotlib.pyplot as plt


def viz(module, input):
    x = input[0][0]
    #最多顯示4張圖
    min_num = np.minimum(4, x.size()[0])
    for i in range(min_num):
        plt.subplot(1, 4, i+1)
        plt.imshow(x[i])
    plt.show()


import cv2
import numpy as np
def main():
    t = transforms.Compose([transforms.ToPILImage(),
                            transforms.Resize((224, 224)),
                            transforms.ToTensor(),
                            transforms.Normalize(mean=[0.485, 0.456, 0.406],
                                                 std=[0.229, 0.224, 0.225])
                            ])

    device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")

    model = resnet18(pretrained=True).to(device)
    for name, m in model.named_modules():
        # if not isinstance(m, torch.nn.ModuleList) and \
        #         not isinstance(m, torch.nn.Sequential) and \
        #         type(m) in torch.nn.__dict__.values():
        # 這里只對卷積層的feature map進行顯示
        if isinstance(m, torch.nn.Conv2d):
            m.register_forward_pre_hook(viz)
    img = cv2.imread('/Users/edgar/Desktop/cat.jpeg')
    img = t(img).unsqueeze(0).to(device)
    with torch.no_grad():
        model(img)

if __name__ == '__main__':
    main()
  • 打印的特征圖大概是這個樣子广辰,取了第一層以及第四層的特征圖。


作者:袁坤
https://www.zhihu.com/question/68384370/answer/419741762

  • 建議使用hook主之,在不改變網(wǎng)絡(luò)forward函數(shù)的基礎(chǔ)上提取所需的特征或者梯度择吊,在調(diào)用階段對module使用即可獲得所需梯度或者特征。
inter_feature = {}
 inter_gradient = {}
 def make_hook(name, flag):
     if flag == 'forward':
         def hook(m, input, output):
             inter_feature[name] = input
         return hook
     elif flag == 'backward':
         def hook(m, input, output):
             inter_gradient[name] = output
         return hook
     else:
         assert False
m.register_forward_hook(make_hook(name, 'forward'))
m.register_backward_hook(make_hook(name, 'backward'))
  • 在前向計算和反向計算的時候即可達到類似鉤子的作用槽奕,中間變量已經(jīng)被放置于inter_feature 和 inter_gradient几睛。
output = model(input)  # achieve intermediate feature
loss = criterion(output, target)
loss.backward()  # achieve backward intermediate gradients
  • 最后可根據(jù)需求是否釋放hook。hook.remove()

作者:羅一成
https://www.zhihu.com/question/68384370/answer/263120790

  • 提取中間特征是指把中間的weights給提出來嗎?這樣不是直接訪問那個矩陣不就好了嗎? pytorch在存參數(shù)的時候, 其實就是給所有的weights bias之類的起個名字然后存在了一個字典里面. 不然你看看state_dict.keys(), 找到相對應(yīng)的key拿出來就好了粤攒。
  • 就算用modules下面的class, 你存模型的時候因為你的activation function上面本身沒有參數(shù), 所以也不會被存進去. 不然你可以試試在Sequential里面把relu換成sigmoid, 你還是可以把之前存的state_dict給load回去所森。不能說是慎用functional吧, 我覺得其他的設(shè)置是應(yīng)該分開也存一份的(假設(shè)你把這些當(dāng)做超參的話)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末囱持,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子焕济,更是在濱河造成了極大的恐慌洪唐,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件吼蚁,死亡現(xiàn)場離奇詭異凭需,居然都是意外死亡,警方通過查閱死者的電腦和手機肝匆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進店門粒蜈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人旗国,你說我怎么就攤上這事枯怖。” “怎么了能曾?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵度硝,是天一觀的道長。 經(jīng)常有香客問我寿冕,道長蕊程,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任驼唱,我火速辦了婚禮藻茂,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘玫恳。我一直安慰自己辨赐,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布京办。 她就那樣靜靜地躺著掀序,像睡著了一般。 火紅的嫁衣襯著肌膚如雪惭婿。 梳的紋絲不亂的頭發(fā)上不恭,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天,我揣著相機與錄音审孽,去河邊找鬼县袱。 笑死浑娜,一個胖子當(dāng)著我的面吹牛佑力,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播筋遭,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼打颤,長吁一口氣:“原來是場噩夢啊……” “哼暴拄!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起编饺,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤乖篷,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后透且,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體撕蔼,經(jīng)...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年秽誊,在試婚紗的時候發(fā)現(xiàn)自己被綠了鲸沮。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,841評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡锅论,死狀恐怖讼溺,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情最易,我是刑警寧澤怒坯,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站藻懒,受9級特大地震影響剔猿,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜嬉荆,卻給世界環(huán)境...
    茶點故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一艳馒、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧员寇,春花似錦弄慰、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至扳缕,卻和暖如春慌闭,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背躯舔。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工驴剔, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人粥庄。 一個月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓丧失,卻偏偏與公主長得像,于是被迫代替她去往敵國和親惜互。 傳聞我的和親對象是個殘疾皇子布讹,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,781評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 18年11月份至19年4月份收藏夾如何評價步長制藥董事長趙濤花 650 萬美元琳拭,讓其女兒趙雨思進入美國斯坦福大學(xué)就...
    Pengoing閱讀 1,229評論 0 0
  • 0.有哪些笑話,就算你再難過描验,一聽也能笑出來白嘁?(https://www.zhihu.com/question/53...
    Leo_Jack閱讀 1,175評論 0 2
  • 工資與生活對比: 在中國年薪 30 萬人民幣和在美國年薪 10 萬美金,生活水平上有沒有什么區(qū)別膘流? - 知乎 ht...
    晨曦抗北風(fēng)閱讀 783評論 0 0
  • 雕刻技法呼股,就是在雕刻創(chuàng)作中盟蚣,作者對雕件的形象和空間的處理手法。這種手法主要體現(xiàn)在削減意義上的雕與刻卖怜,是展現(xiàn)雕刻藝術(shù)...
    玉天下閱讀 676評論 0 0
  • 在地球上在宇宙里在時間的長河中過去與未來一直同在 不明飛行物外星人靈異現(xiàn)象不一定是外來入侵也許他們只是如約歸來 何...
    思考空間閱讀 227評論 1 3