PyTorch提取中間層特徵?

時間 2021-05-11 23:46:02

1樓:

建議使用hook,在不改變網路forward函式的基礎上提取所需的特徵或者梯度,在呼叫階段對module使用即可獲得所需梯度或者特徵。

inter_feature={}

inter_gradient={}

defmake_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

Falsem.

register_forward_hook

(make_hook

(name

,'forward'))m

.register_backward_hook

(make_hook

(name

,'backward'

))在前向計算和反向計算的時候即可達到類似鉤子的作用,中間變數已經被放置於inter_feature 和 inter_gradient。

output = model(input) # achieve intermediate feature

loss = criterion(output, target)

loss.backwardachieve backward intermediate gradients

最後可根據需求是否釋放hook。

hook.remove()

2樓:範汝超

中間層特徵的話就在forward上儲存變數比較方便。要提梯度的話就得hook了。仔細看看nn.

sequential類就會發現他的init函式裡是add_module().你用nn.functional肯定就加不進去了啊。

net.children()不會有pooling和relu。

3樓:nicolas gp

貌似確實是個問題。兩點:

(1)一般我都採用註冊好class。load預訓練好的模型(state_dict方式儲存),首先自己定義好自己的forward,並且保證自己的forward和訓練用的模型一致。

(2)提取中間特徵採用register hook, 舉個例子:

step1 : define hooks

def hook_net(net):

feature_mapshooks =

keys_list_0 = net._modules.keys()

for k0 in keys_list_0:

m = net._modules.get(k0)

# return layers, feature_maps, hooks

return feature_maps, hooks

forward data and get features stored in a list

dataset_features, hooks = hook_net(model)

for i, (inputs, labels) in enumerate(data_loader):

# forward data

model(inputs)

4樓:

提取中間特徵是指把中間的weights給提出來嗎?這樣不是直接訪問那個矩陣不就好了嗎? pytorch在存引數的時候, 其實就是給所有的weights bias之類的起個名字然後存在了乙個字典裡面.

不然你看看state_dict.keys(), 找到相對應的key拿出來就好了.

然後你說的慎用也是乙個很奇怪的問題啊..

就算用modules下面的class, 你存模型的時候因為你的activation function上面本身沒有引數, 所以也不會被存進去. 不然你可以試試在Sequential裡面把relu換成sigmoid, 你還是可以把之前存的state_dict給load回去.

不能說是慎用functional吧, 我覺得其他的設定是應該分開也存乙份的(假設你把這些當做超參的話)

利益相關: 給pytorch提過PR

pytorch中binary cross entropy損失函式中weight引數是如何設定的?

趙彤 首先我們看下BCEloss的計算公式 假設input x,target y,batch size N BCELoss x,y 其中M表示input中元素的個數,如果是二維影象,M height width 表示元素i求loss時所佔的比重。nn.BCELoss 函式中weight預設為None...

有用pytorch復現efficientDet的嗎

Zylo117 我.我根據官方的repository畫素級移植到了pytorch,有差異是正常的,畢竟底層實現不一樣,但op是完全一樣的.準確率什麼的也幾乎一樣,而且我的速度比tf原版快多了.想看中文解釋 吐槽 的,也可以看我的文章 Zylo Cheung 全網第一SoTA成績卻樸實無華的pytor...

TensorRT加速pytorch模型

唐悄悄 我個人是藝考生,按道理成績很差,事實原來也這樣,平時月考周考也才380分左右,全校兩百多名,但是,重點來了,我高考考了508,比本省二本線高了50多分。藝考回來後天天都在刷高考題,學校也天天做題考試,從乙個月一考到一月兩考,到一周一考,一周兩考,直到高考。所以呢,我的秘訣是 放平心態,多刷全...