目的: 在訓練神經網絡的時候,有時候需要自己寫操作,比如faster_rcnn中的roi_pooling,我們可以可視化前向傳播的圖像和反向傳播的梯度圖像,前向傳播可以檢查流程和計算的正確性,而反向傳播則可以大概檢查流程的正確性。
實驗
可視化rroi_align的梯度
1.pytorch 0.4.1及之前,需要聲明需要參數,這里將圖片數據聲明為variable
im_data = Variable(im_data, requires_grad=True)
2.進行前向傳播,最后的loss映射為一個一維的張量
pooled_feat = roipool(im_data, rois.view(-1, 6))res = pooled_feat.pow(2).sum()res.backward()
3.注意求loss的時候采用更加復雜,或者更多的運算(這樣在梯度可視化的時候效果才更加明顯)
可視化效果
原始圖片
梯度可視化圖片
原圖+梯度圖
小結:
可以看到誤差梯度的位置是正確的,誤差是否正確,需要其他方式驗證(暫時沒有思路)
可以看到上面在求loss的時候為:loss = sum(x2),但是如果換成:loss = mean(x),效果就沒有上面明顯。
實驗二的效果
loss = mean(x)
可以看到根本無法看到誤差梯度的位置信息
實驗三:loss = sum(x)
小結: 可以看到位置信息有差別,比如國徽部分,這會讓人以為,國徽部分只利用了左部分的信息,或者自己手寫的操作誤差索引不對。
可以通過兩種方式進行驗證
1.用更多,更復雜的運算求loss,比如pow,等
2.用matplotlib顯示圖片后,用鼠標可以指示每個點的具體的值,可以檢測有誤差梯度區域是否和無誤差梯度區域有差別。
以上這篇pytorch對梯度進行可視化進行梯度檢查教程就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持武林站長站。
新聞熱點
疑難解答