CNN特征提取結果可視化——hooks簡單應用
在神經網絡搭建時可能出現各式各樣的錯誤,使用hook而非print或者簡單的斷點調試有助於你更清晰的意識到錯誤所在。
hook的使用場景多種多樣,本文將使用hooks來簡單可視化卷積神經網絡的特征提取。用到的神經網絡框架為Pytorch
Hooks簡單介紹
每個hook都是預先定義好的可調用對象,在pytorch框架中,每個nn.Module對象都能夠方便地注冊(定義)一個hook。當一些trigger方法調用(如forward()和backward())后,注冊了hook的nn.Module對象會將相關信息傳遞到hook里面去。
在PyTorch中,可以注冊三種hook:
forward prehook (在forward之前執行)
forward hook (在forward之后執行)
backward hook (在backward之后執行)
具體理解每種hook的使用不是本文討論的范圍,我們將通過一個生動的卷積神經網絡可視化例子來介紹hook的使用
CNN特征提取的簡單可視化
我們將要進行的工作包括:
創建CNN特征提取器,本文使用PyTorch自帶的resnet34
創建一個保存hook內容的對象
為每個卷積層創建hook
讀取圖像並進行特征提取
查看卷積層特征提取效果
本文將對下圖進行特征提取並可視化