亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

可視化pytorch 模型中不同BN層的running mean曲線實例

 更新時間:2020年06月24日 08:35:20   作者:Nick Blog  
這篇文章主要介紹了可視化pytorch 模型中不同BN層的running mean曲線實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

加載模型字典

逐一判斷每一層,如果該層是bn 的 running mean,就取出參數并取平均作為該層的代表

對保存的每個BN層的數值進行曲線可視化

from functools import partial
import pickle
import torch
import matplotlib.pyplot as plt

pth_path = 'checkpoint.pth'

pickle.load = partial(pickle.load, encoding="latin1")
pickle.Unpickler = partial(pickle.Unpickler, encoding="latin1")
pretrained_dict = torch.load(pth_path, map_location=lambda storage, loc: storage, pickle_module=pickle)
pretrained_dict = pretrained_dict['state_dict']

means = []
for name, param in pretrained_dict.items():
 print(name)
 if 'running_mean' in name:
  means.append(mean.numpy())

layers = [i for i in range(len(means))]

plt.plot(layers, means, color='blue')
plt.legend()
plt.xticks(layers)
plt.xlabel('layers')
plt.show()

補充知識:關于pytorch中BN層(具體實現)的一些小細節(jié)

最近在做目標檢測,需要把訓好的模型放到嵌入式設備上跑前向,因此得把各種層的實現都用C手擼一遍,,,此為背景。

其他層沒什么好說的,但是BN層這有個小坑。pytorch在打印網絡參數的時候,只打出weight和bias這兩個參數。咦,說好的BN層有四個參數running_mean、running_var 、gamma 、beta的呢?一開始我以為是pytorch把BN層的計算簡化成weight * X + bias,但馬上反應過來應該沒這么簡單,因為pytorch中只有可學習的參數才稱為parameter。上網找了一些資料但都沒有說到這么細的,畢竟大部分用戶使用時只要模型能跑起來就行了,,,于是開始看BN層有哪些屬性,果然發(fā)現了熟悉的running_mean和running_var,原來pytorch的BN層實現并沒有不同。這里吐個槽:為啥要把gamma和beta改叫weight、bias啊,很有迷惑性的好不好,,,

扯了這么多,干脆捋一遍pytorch里BN層的具體實現過程,幫自己理清思路,也可以給大家提供參考。再吐槽一下,在網上搜“pytorch bn層”出來的全是關于這一層怎么用的、初始化時要輸入哪些參數,沒找到一個pytorch中BN層是怎么實現的,,,

眾所周知,BN層的輸出Y與輸入X之間的關系是:Y = (X - running_mean) / sqrt(running_var + eps) * gamma + beta,此不贅言。其中gamma、beta為可學習參數(在pytorch中分別改叫weight和bias),訓練時通過反向傳播更新;而running_mean、running_var則是在前向時先由X計算出mean和var,再由mean和var以動量momentum來更新running_mean和running_var。所以在訓練階段,running_mean和running_var在每次前向時更新一次;在測試階段,則通過net.eval()固定該BN層的running_mean和running_var,此時這兩個值即為訓練階段最后一次前向時確定的值,并在整個測試階段保持不變。

以上這篇可視化pytorch 模型中不同BN層的running mean曲線實例就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • python中以函數作為參數(回調函數)的實現方法

    python中以函數作為參數(回調函數)的實現方法

    這篇文章主要介紹了python中以函數作為參數(回調函數)的實現方法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • python 實現樸素貝葉斯算法的示例

    python 實現樸素貝葉斯算法的示例

    這篇文章主要介紹了python實現樸素貝葉斯算法的示例,幫助大家更好的理解和學習python 機器學習算法,感興趣的朋友可以了解下
    2020-09-09
  • 在Python中實現shuffle給列表洗牌

    在Python中實現shuffle給列表洗牌

    今天小編就為大家分享一篇在Python中實現shuffle給列表洗牌,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-11-11
  • Python使用Keras OCR實現從圖像中刪除文本

    Python使用Keras OCR實現從圖像中刪除文本

    這篇文章主要為大家介紹了如何在Python中利用Keras OCR實現快速地從圖像中刪除文本,從而作為圖像分類器的預處理步驟,需要的可以參考一下
    2022-03-03
  • scrapy框架ItemPipeline的使用

    scrapy框架ItemPipeline的使用

    本文主要介紹了scrapy框架ItemPipeline的使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-08-08
  • python?random庫的簡單使用demo

    python?random庫的簡單使用demo

    這篇文章主要為大家介紹了python?random庫的簡單使用demo,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-03-03
  • 從入門到精通:玩轉Python?Fire庫

    從入門到精通:玩轉Python?Fire庫

    想快速打造屬于你的Python?GUI應用嗎?拋開復雜的代碼,用Python?Fire庫就能輕松實現!本指南將引領你從零起步,駕馭Python?Fire的強大功能,讓編程既簡單又高效,準備好了嗎?讓我們開始玩轉Python?Fire,開啟你的編程冒險吧!
    2024-02-02
  • 實例解析Python中的__new__特殊方法

    實例解析Python中的__new__特殊方法

    __new__方法在Python中用于被創(chuàng)建類實例,接下來我們以實例解析Python中的__new__特殊方法,注意一下__new__與__init__方法的區(qū)別
    2016-06-06
  • python輸出pdf文檔的實例

    python輸出pdf文檔的實例

    今天小編就為大家分享一篇python輸出pdf文檔的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • 對PyQt5的輸入對話框使用(QInputDialog)詳解

    對PyQt5的輸入對話框使用(QInputDialog)詳解

    今天小編就為大家分享一篇對PyQt5的輸入對話框使用(QInputDialog)詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-06-06

最新評論