<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
勾點程式設計(hooking
),也稱作“掛鉤”,是計算機程式設計術語,指通過攔截軟體模組間的函數呼叫、訊息傳遞、事件傳遞來修改或擴充套件作業系統、應用程式或其他軟體元件的行為的各種技術。處理被攔截的函數呼叫、事件、訊息的程式碼,被稱為勾點(hook)。
Hook 是 PyTorch
中一個十分有用的特性。利用它,我們可以不必改變網路輸入輸出的結構,方便地獲取、改變網路中間層變數的值和梯度。這個功能被廣泛用於視覺化神經網路中間層的 feature
、gradient
,從而診斷神經網路中可能出現的問題,分析網路有效性。
本文主要用 hook 函數輸出網路執行過程中 forward 和 backward 的執行順序,以此找到了bug所在。
用法如下:
# 設定hook func def hook_func(name, module): def hook_function(module, inputs, outputs): # 請依據使用場景自定義函數 print(name+' inputs', inputs) print(name+' outputs', outputs) return hook_function # 註冊正反向hook for name, module in model.named_modules(): module.register_forward_hook(hook_func('[forward]: '+name, module)) module.register_backward_hook(hook_func('[backward]: '+name, module))
如一個簡單的 MNIST 手寫數位識別的模型結構如下:
class Net(nn.Module): def __init__(self): super(Net, self).__init__() self.conv1 = nn.Conv2d(1, 32, 3, 1) self.conv2 = nn.Conv2d(32, 64, 3, 1) self.dropout1 = nn.Dropout(0.25) self.dropout2 = nn.Dropout(0.5) self.fc1 = nn.Linear(9216, 128) self.fc2 = nn.Linear(128, 10) def forward(self, x): x = self.conv1(x) x = F.relu(x) x = self.conv2(x) x = F.relu(x) x = F.max_pool2d(x, 2) x = self.dropout1(x) x = torch.flatten(x, 1) x = self.fc1(x) x = F.relu(x) x = self.dropout2(x) x = self.fc2(x) output = F.log_softmax(x, dim=1) return output
列印模型:
Net( (conv1): Conv2d(1, 32, kernel_size=(3, 3), stride=(1, 1)) (conv2): Conv2d(32, 64, kernel_size=(3, 3), stride=(1, 1)) (dropout1): Dropout(p=0.25, inplace=False) (dropout2): Dropout(p=0.5, inplace=False) (fc1): Linear(in_features=9216, out_features=128, bias=True) (fc2): Linear(in_features=128, out_features=10, bias=True) )
構建hook函數:
# 設定hook func def hook_func(name, module): def hook_function(module, inputs, outputs): with open("log_model.txt", 'a+') as f: # 請依據使用場景自定義函數 f.write(name + ' len(inputs): ' + str(len(inputs)) + 'n') f.write(name + ' len(outputs): ' + str(len(outputs)) + 'n') return hook_function # 註冊正反向hook for name, module in model.named_modules(): module.register_forward_hook(hook_func('[forward]: '+name, module)) module.register_backward_hook(hook_func('[backward]: '+name, module))
輸出的前向和反向傳播過程:
[forward]: conv1 len(inputs): 1
[forward]: conv1 len(outputs): 8
[forward]: conv2 len(inputs): 1
[forward]: conv2 len(outputs): 8
[forward]: dropout1 len(inputs): 1
[forward]: dropout1 len(outputs): 8
[forward]: fc1 len(inputs): 1
[forward]: fc1 len(outputs): 8
[forward]: dropout2 len(inputs): 1
[forward]: dropout2 len(outputs): 8
[forward]: fc2 len(inputs): 1
[forward]: fc2 len(outputs): 8
[forward]: len(inputs): 1
[forward]: len(outputs): 8
[backward]: len(inputs): 2
[backward]: len(outputs): 1
[backward]: fc2 len(inputs): 3
[backward]: fc2 len(outputs): 1
[backward]: dropout2 len(inputs): 1
[backward]: dropout2 len(outputs): 1
[backward]: fc1 len(inputs): 3
[backward]: fc1 len(outputs): 1
[backward]: dropout1 len(inputs): 1
[backward]: dropout1 len(outputs): 1
[backward]: conv2 len(inputs): 2
[backward]: conv2 len(outputs): 1
[backward]: conv1 len(inputs): 2
[backward]: conv1 len(outputs): 1
因為只要模型處於train狀態,hook_func
就會執行,導致不斷輸出 [forward] 和 [backward],所以將輸出內容建議寫到檔案中,而不是 print
到此這篇關於pytorch hook 勾點函數的用法的文章就介紹到這了,更多相關pytorch hook 勾點函數內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45