日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

谈Tensorflow的Batch Normalization

發布時間:2025/3/15 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 谈Tensorflow的Batch Normalization 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

tensorflow中關于BN(Batch Normalization)的函數主要有兩個,分別是:

  • tf.nn.moments
  • tf.nn.batch_normalization

關于這兩個函數,官方API中有詳細的說明,具體的細節可以點鏈接查看,關于BN的介紹可以參考這篇論文,我來說說自己的理解。不得不吐槽一下,tensorflow的官方API很少給例子,太不人性化了,人家numpy做的就比tensorflow強。對了,moments函數的計算結果一般作為batch_normalization的部分輸入!這就是兩個函數的關系,下面展開介紹!

一、tf.nn.moments函數

官方的輸入定義如下:

def moments(x, axes, name=None, keep_dims=False)

解釋如下:

  • x 可以理解為我們輸出的數據,形如 [batchsize, height, width, kernels]
  • axes 表示在哪個維度上求解,是個list,例如 [0, 1, 2]
  • name 就是個名字,不多解釋
  • keep_dims 是否保持維度,不多解釋

這個函數的輸出有兩個,用官方的話說就是:

Two Tensor objects: mean and variance.

解釋如下:

  • mean 就是均值啦
  • variance 就是方差啦

關于這個函數的最基本的知識就介紹完了,但依然沒明白這函數到底是干啥的,下面通過幾個例子來說明:

  • 1、計算2×3維向量的mean和variance,程序節選如下:
img = tf.Variable(tf.random_normal([2, 3])) axis = list(range(len(img.get_shape()) - 1)) mean, variance = tf.nn.moments(img, axis)

輸出的結果如下:

img = [[ 0.69495416 2.08983064 -1.08764684][ 0.31431156 -0.98923939 -0.34656194]] mean = [ 0.50463283 0.55029559 -0.71710438] variance = [ 0.0362222 2.37016821 0.13730171]

有了例子和結果,就很好理解了,moments函數就是在 [0] 維度上求了個均值和方差,對于axis這個參數的理解,可以參考這里
另外,針對2×3大小的矩陣,axis還可以這么理解,若axis = [0],那么我們2×3的小矩陣可以理解成是一個包含了2個長度為3的一維向量,然后就是求這兩個向量均值方差啦!多個向量的均值、方差計算請自行腦補。
當然了,這個例子只是一個最簡單的例子,如果換做求形如“[batchsize, height, width, kernels]”數據的mean和variance呢?接下來來簡單分析一下。

  • 2、計算卷積神經網絡某層的的mean和variance
    假定我們需要計算數據的形狀是 [batchsize, height, width, kernels],熟悉CNN的都知道,這個在tensorflow中太常見了,例程序如下:
img = tf.Variable(tf.random_normal([128, 32, 32, 64])) axis = list(range(len(img.get_shape()) - 1)) mean, variance = tf.nn.moments(img, axis)

形如[128, 32, 32, 64]的數據在CNN的中間層非常常見,那么,為了給出一個直觀的認識,這個函數的輸出結果如下,可能輸出的數字比較多。。。

mean = [ -1.58071518e-03 9.46253538e-04 9.92774963e-04 -2.57909298e-044.31227684e-03 2.85443664e-03 -3.51431966e-03 -2.95847654e-04-1.57856941e-03 -7.36653805e-04 -3.81006300e-03 1.95848942e-03-2.19231844e-03 1.88898295e-04 3.09050083e-03 1.28045678e-04-5.45501709e-04 -7.49588013e-04 3.41436267e-03 4.55856323e-041.21808052e-03 1.71916187e-03 2.33578682e-03 -9.98377800e-041.01172924e-03 -3.25803459e-03 1.98090076e-03 -9.53197479e-043.37207317e-03 6.27857447e-03 -2.22939253e-03 -1.75476074e-041.82938576e-03 2.28643417e-03 -2.59208679e-03 -1.05714798e-03-1.82652473e-03 4.51803207e-05 -1.38700008e-03 1.88308954e-03-3.67999077e-03 -4.22883034e-03 8.54551792e-04 -1.30176544e-04-1.02388859e-03 3.15248966e-03 -1.00244582e-03 -3.58343124e-049.68813896e-04 -3.17507982e-03 -2.61783600e-03 -5.57708740e-03-3.49491835e-04 7.54106045e-03 -9.98616219e-04 5.13806939e-041.08468533e-03 1.58560276e-03 -2.76589394e-03 -1.18827820e-03-4.92024422e-03 3.14301252e-03 9.12249088e-04 -1.98567938e-03] variance = [ 1.00330877 1.00071466 1.00299144 1.00269675 0.99600208 0.996152760.9968518 1.00154674 0.99785519 0.99120021 1.00565553 0.996336280.99637395 0.99959981 0.99702841 0.99686354 1.00210547 1.001515151.00124979 1.00289011 1.0019592 0.99810153 1.00296855 1.00401641.00397885 0.99348587 0.99743217 0.99921477 1.00718474 1.001823191.00461221 1.00222814 1.00570309 0.99897575 1.00203466 1.00025071.00139284 1.0015136 1.00439298 0.99371535 1.00209546 1.002391460.99446201 1.00200033 1.00330424 0.99965429 0.99676734 0.999747280.99562836 1.00447667 0.9969337 1.0026046 0.99110448 1.002294661.00264072 0.99483615 1.00260413 1.0050714 1.00082493 1.000626561.0020628 1.00507069 1.00343442 0.99490905]

然后我解釋一下這些數字到底是怎么來的,可能對于2×3這么大的矩陣,理解起來比較容易,但是對于 [128, 32, 32, 64] 這樣的4維矩陣,理解就有點困難了。
其實很簡單,可以這么理解,一個batch里的128個圖,經過一個64 kernels卷積層處理,得到了128×64個圖,再針對每一個kernel所對應的128個圖,求它們所有像素的mean和variance,因為總共有64個kernels,輸出的結果就是一個一維長度64的數組啦!
手畫示意圖太丑了,我重新畫了一個!


計算mean和variance

二、tf.nn.batch_normalization函數

官方對函數輸入的定義是:

def batch_normalization(x, mean, variance, offset, scale, variance_epsilon, name=None):

關于這幾個參數,可以參考這篇論文和這個博客,我這里就直接給出一個公式的截圖了,如下

晦澀難懂的公式

官方對參數的解釋如下


官方的解釋

這一堆參數里面,我們已經知道x、mean、variance這三個,那offset和scale呢??答案是:這兩個參數貌似是需要訓練的,其中offset一般初始化為0,scale初始化為1,另外offset、scale的shape與mean相同。

variance_epsilon這個參數設為一個很小的數就行,比如0.001。

但是,我這里要但是一下!BN在神經網絡進行training和testing的時候,所用的mean、variance是不一樣的!這個博客里已經說明了,但具體怎么操作的呢?我們看下面的代碼

update_moving_mean = moving_averages.assign_moving_average(moving_mean, mean, BN_DECAY) update_moving_variance = moving_averages.assign_moving_average(moving_variance, variance, BN_DECAY) tf.add_to_collection(UPDATE_OPS_COLLECTION, update_moving_mean) tf.add_to_collection(UPDATE_OPS_COLLECTION, update_moving_variance) mean, variance = control_flow_ops.cond(['is_training'], lambda: (mean, variance), lambda: (moving_mean, moving_variance))

看不懂沒關系,這段代碼的意思就是計算moving mean(滑動平均)、moving variance(滑動方差),然后利用 (moving_mean, moving_variance) 進行網絡測試。

關于BN的完整實現,在Ryan Dahl的repository里有,名字叫做tensorflow-resnet,可以自行查看。




總結

以上是生活随笔為你收集整理的谈Tensorflow的Batch Normalization的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产福利一区在线 | 毛片毛片毛片毛片毛片毛片毛片毛片毛片 | 蜜桃aaa | 在线看免费av | 亚洲性猛交富婆 | 激情六月丁香 | 看片一区二区 | 中文字幕网址在线 | 日韩福利视频一区 | av一区二区三区免费观看 | 香蕉网av | 一级做a爱片久久 | 夜夜嗨av禁果av粉嫩avhd | wwwjizzzcom | 呦呦色 | 夜夜小视频| 欧美影院一区 | 国产破处av | 在线成人中文字幕 | 天天艹日日干 | 一二区视频 | 成年网站在线播放 | 日韩精品一区二区三区电影 | 五月色婷| 国产成人av免费观看 | 久久久精品免费看 | 国产精品爱啪在线线免费观看 | 日韩av一卡二卡 | 国内精品国产成人国产三级 | 黄污视频网站 | 中国免费黄色片 | 福利社午夜 | 欧美综合激情 | a天堂亚洲| 黄网站视频在线观看 | 一本大道一区二区 | 日日日日操 | 国产免费福利视频 | 97免费在线观看 | 国产精品天美传媒 | 国内老熟妇对白xxxxhd | 四虎影视国产精品 | 黄色一级二级 | 中文字幕第一页在线 | 探花av在线 | 中文字幕日韩精品亚洲一区小树林 | 69久久成人精品 | 性久久久久久久久久 | 欧美偷拍一区二区 | 成av人在线观看 | 精品日韩中文字幕 | 美女视频黄色 | 久久久久久久9999 | 欧美另类日韩 | 日本无遮挡边做边爱边摸 | 色01看片网 | 亚洲一区二区三区三州 | 午夜精品久久久久久久99 | 黄色小说在线观看视频 | 国产精品日韩欧美大师 | 91看片黄 | 成人亚洲一区二区 | 久久精品国产亚洲av麻豆图片 | 国产模特av私拍大尺度 | 97人人看| 男操女视频免费 | 国产真实在线 | 在线观看国产精品一区 | 激情欧美一区 | 日韩在线视频免费看 | 日本大尺度吃奶做爰久久久绯色 | 成人亚洲玉足脚交系列 | 欧美成人精品激情在线视频 | 性欧美熟妇videofreesex | 欧美午夜精品一区 | 日本精品一区二区三区在线观看 | 日韩精品成人免费观看视频 | 好男人视频www| 国产欧美日韩综合精品 | 四川丰满妇女毛片四川话 | 亚洲清纯国产 | 粉嫩欧美一区二区三区 | 欧美xxxxx自由摘花 | 国产午夜精品福利视频 | 91精品啪在线观看国产线免费 | 干美女视频 | 黄色综合 | 一级片视频免费观看 | 91精品99| 欧美黄色一级生活片 | 丁香七月婷婷 | 男人扒女人添高潮视频 | 中文字幕一区二区三区四区免费看 | 欧美精品一区二区蜜臀亚洲 | 一级免费a | 99久久婷婷国产综合精品电影 | 欧美三级小说 | 国产黄色一区二区 | 黄色一级片免费在线观看 |