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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

TensorFlow的batch_normalization

發(fā)布時間:2023/12/31 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 TensorFlow的batch_normalization 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

批量標(biāo)準(zhǔn)化(batch normalization簡稱BN)主要是為了克服當(dāng)神經(jīng)網(wǎng)絡(luò)層數(shù)加深而導(dǎo)致難以訓(xùn)練而誕生的。當(dāng)深度神經(jīng)網(wǎng)絡(luò)隨著網(wǎng)絡(luò)深度加深,訓(xùn)練起來會越來越困難,收斂速度會很慢,還會產(chǎn)生梯度消失問題(vanishing gradient problem)。

在統(tǒng)計機(jī)器學(xué)習(xí)領(lǐng)域中有一個ICS(Internal Covariate Shift)理論:源域(source domain)和目標(biāo)域(target domain)的數(shù)據(jù)分布是一致的。也就是訓(xùn)練數(shù)據(jù)和測試數(shù)據(jù)滿足相同的分布,這是通過訓(xùn)練數(shù)據(jù)獲得的模型在測試數(shù)據(jù)上有一個好的效果的保證。

Covariate Shift是指訓(xùn)練數(shù)據(jù)的樣本和測試數(shù)據(jù)的樣本分布不一致時,訓(xùn)練獲取的模型無法很好的泛化。它是分布不一致假設(shè)之下的一個分支問題,也就是指源域和目標(biāo)域的條件概率是一致的,但是其邊緣概率不同。對于神經(jīng)網(wǎng)絡(luò)而言,神經(jīng)網(wǎng)絡(luò)的各層輸出,在經(jīng)過了層內(nèi)操作后,各層輸出分布會隨著輸入分布的變化而變化,而且差異會隨著網(wǎng)絡(luò)的深度增加而加大,但是每一層隨指向的樣本標(biāo)記是不會改變的。

解決Covariate Shift問題可以通過對訓(xùn)練樣本和測試樣本的比例對訓(xùn)練樣本做一個矯正,通過批量標(biāo)準(zhǔn)化來標(biāo)準(zhǔn)化某些層或所有層的輸入,從而固定每層輸入信號的均值與方差。

一、批量標(biāo)準(zhǔn)化的實現(xiàn)

批量標(biāo)準(zhǔn)化是在激活函數(shù)之前,對z=wx+b做標(biāo)準(zhǔn)化,使得輸出結(jié)果滿足標(biāo)準(zhǔn)的正態(tài)分布,即均值為0,方差為1。讓每一層的輸入有一個穩(wěn)定的分布便于網(wǎng)絡(luò)的訓(xùn)練。

二、批量標(biāo)準(zhǔn)化的優(yōu)點

1、加大探索的步長,加快模型收斂的速度

2、更容易跳出局部最小值

3、破壞原來的數(shù)據(jù)分布,在一定程度上可以緩解過擬合。

當(dāng)遇到神經(jīng)網(wǎng)絡(luò)收斂速度很慢或梯度爆炸等無法訓(xùn)練的情況時,可以嘗試使用批量標(biāo)準(zhǔn)化來解決問題。

三、TensorFlow的批量標(biāo)準(zhǔn)化實例

1、tf.nn.moments(x,axes,shift=None,name=None,keep_dims=False)

函數(shù)介紹:計算x的均值和方差

參數(shù)介紹:

  • x:需要計算均值和方差的tensor
  • axes:指定求解x某個維度上的均值和方差,如果x是一維tensor,則axes=[0]
  • name:用于計算均值和方差操作的名稱
  • keep_dims:是否產(chǎn)生與輸入相同相同維度的結(jié)果
z = tf.constant([[1,1,1,1,1],[2,2,2,2,2]],dtype=tf.float32)#計算z的均值和方差#計算列的均值和方差z_mean_col,z_var_col = tf.nn.moments(z,axes=[0])#[1.5 1.5 1.5 1.5 1.5] [0.25 0.25 0.25 0.25 0.25]#計算行的均值和方差z_mean_row,z_var_row = tf.nn.moments(z,axes=[1])#等價于axes=[-1],-1表示最后一維#[1. 2.] [0. 0.]#計算整個數(shù)組的均值和方差z_mean,z_var = tf.nn.moments(z,axes=[0,1])#1.5 0.25sess = tf.Session()init = tf.global_variables_initializer()sess.run(init)print(sess.run(z))print(sess.run(z_mean_col),sess.run(z_var_col))print(sess.run(z_mean_row),sess.run(z_var_row))print(sess.run(z_mean),sess.run(z_var))

2、tf.nn.batch_normalization(x,mean,variance,offset,scale,variance_epsilon,name=None)

函數(shù)介紹:計算batch normalization

參數(shù)介紹:

  • x:輸入的tensor,具有任意的維度
  • mean:輸入tensor的均值
  • variance:輸入tensor的方差
  • offset:偏置tensor,初始化為1
  • scale:比例tensor,初始化為0
  • variance_epsilon:一個接近于0的數(shù),避免除以0
z = tf.constant([[1,1,1,1,1],[2,2,2,2,2]],dtype=tf.float32)#計算z的均值和方差z_mean,z_var = tf.nn.moments(z,axes=[0,1])scale = tf.Variable(tf.ones([2,5]))shift = tf.Variable(tf.zeros([2,5]))#計算batch normalizationz_bath_norm = tf.nn.batch_normalization(z,z_mean,z_var,shift,scale,variance_epsilon=0.001)sess = tf.Session()init = tf.global_variables_initializer()sess.run(init)print(sess.run(z))print(sess.run(z_bath_norm))

總結(jié)

以上是生活随笔為你收集整理的TensorFlow的batch_normalization的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。