如何從PyTorch中獲取過程特征圖實例詳解
一、獲取Tensor
神經(jīng)網(wǎng)絡在運算過程中實際上是以Tensor為格式進行計算的,我們只需稍稍改動一下forward函數(shù)即可從運算過程中抓到Tensor
代碼如下:
base_feature = self.extractor.forward(x) #正常的前向傳遞 feature=base_feature.detach() #抓取tensor feature_imshow(feature) #展示函數(shù)(關(guān)鍵代碼)
通過將過程張量賦值給一個臨時變量,即可將其從前向傳遞中分離出來且不影響原來的前向傳遞函數(shù),這種方法遠比復雜的hook函數(shù)更實用。
將Tensor數(shù)據(jù)取到后到可視化還需要進行以下幾步:
①類型轉(zhuǎn)換
如果網(wǎng)絡是在cuda中進行運算,則需要將提取到的tensor轉(zhuǎn)換為cpu類型才能進行接下來的運算
inp = inp.cpu() #類型轉(zhuǎn)換
②張量拆解
網(wǎng)絡中的張量一般是高維度的,需要對其進行降維,一般降至兩維即可進行顯示。這里以Faster R-CNN中的resnet50特征提取網(wǎng)絡為例:輸出其特征圖尺寸為:[1,1024,68,38],可以很明顯的看出,第一維實際上是batch_size,在圖像顯示中不需要,可以直接去除;第二維1024則是網(wǎng)絡提取到的特征圖張數(shù),故可以對第二維進行遍歷;而第3,4維是特征圖的尺寸,直接顯示即可。
inp=inp.squeeze(0) #除去第一維 for i in range(len(inp)): plt.imshow(transforms.ToPILImage()(inp[i])) #遍歷第二維并將其轉(zhuǎn)換為圖像
③圖像展示
選取你需要的特征圖像,進行保存或使用plt進展示
完整的展示函數(shù)如下:
def feature_imshow(inp, title=None): inp = inp.cpu() inp=inp.squeeze(0) print(inp.shape) plt.figure(figsize=(12, 7)) for i in range(len(inp)): plt.subplot(4, 5, i+1) #第一二個參數(shù)為圖像個數(shù),第三參數(shù)為圖像位置 plt.imshow(transforms.ToPILImage()(inp[i])) i+=1 plt.show() plt.pause(0.001)
總結(jié)
到此這篇關(guān)于如何從PyTorch中獲取過程特征圖的文章就介紹到這了,更多相關(guān)PyTorch獲取過程特征圖內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python 判斷是否為質(zhì)數(shù)或素數(shù)的實例
下面小編就為大家?guī)硪黄狿ython 判斷是否為質(zhì)數(shù)或素數(shù)的實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-10-10python 數(shù)字轉(zhuǎn)換為日期的三種實現(xiàn)方法
在Python中,我們經(jīng)常需要處理日期和時間,本文主要介紹了python 數(shù)字轉(zhuǎn)換為日期的三種實現(xiàn)方法,包含datetime模塊,strftime方法及pandas庫,具有一定的參考價值,感興趣的可以了解一下2024-02-02Python?jpg快速轉(zhuǎn)png并調(diào)整大小方式
這篇文章主要介紹了Python實現(xiàn)jpg快速轉(zhuǎn)png并調(diào)整大小方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-03-03