欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

TensorFlow 滑動平均的示例代碼

 更新時間:2018年06月19日 09:24:01   作者:疊加態(tài)的貓  
這篇文章主要介紹了TensorFlow 滑動平均的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

滑動平均會為目標變量維護一個影子變量,影子變量不影響原變量的更新維護,但是在測試或者實際預(yù)測過程中(非訓(xùn)練時),使用影子變量代替原變量。

1、滑動平均求解對象初始化

ema = tf.train.ExponentialMovingAverage(decay,num_updates) 

參數(shù)decay

`shadow_variable = decay * shadow_variable + (1 - decay) * variable`

參數(shù)num_updates

`min(decay, (1 + num_updates) / (10 + num_updates))`

2、添加/更新變量

添加目標變量,為之維護影子變量

注意維護不是自動的,需要每輪訓(xùn)練中運行此句,所以一般都會使用tf.control_dependencies使之和train_op綁定,以至于每次train_op都會更新影子變量

ema.apply([var0, var1]) 

3、獲取影子變量值

這一步不需要定義圖中,從影子變量集合中提取目標值

sess.run(ema.average([var0, var1])) 

4、保存&載入影子變量

我們知道,在TensorFlow中,變量的滑動平均值都是由影子變量所維護的,如果你想要獲取變量的滑動平均值需要獲取的是影子變量而不是變量本身。

保存影子變量

建立tf.train.ExponentialMovingAverage對象后,Saver正常保存就會存入影子變量,命名規(guī)則是"v/ExponentialMovingAverage"對應(yīng)變量”v“

import tensorflow as tf 
if __name__ == "__main__": 

  v = tf.Variable(0.,name="v") 

  #設(shè)置滑動平均模型的系數(shù) 

  ema = tf.train.ExponentialMovingAverage(0.99) 

  #設(shè)置變量v使用滑動平均模型,tf.all_variables()設(shè)置所有變量 

  op = ema.apply([v]) 

  #獲取變量v的名字 

  print(v.name) 

  #v:0 

  #創(chuàng)建一個保存模型的對象 

  save = tf.train.Saver() 

  sess = tf.Session() 

  #初始化所有變量 

  init = tf.initialize_all_variables() 

  sess.run(init) 

  #給變量v重新賦值 

  sess.run(tf.assign(v,10)) 

  #應(yīng)用平均滑動設(shè)置 

  sess.run(op) 

  #保存模型文件 

  save.save(sess,"./model.ckpt") 

  #輸出變量v之前的值和使用滑動平均模型之后的值 

  print(sess.run([v,ema.average(v)])) 

  #[10.0, 0.099999905]  

載入影子變量并映射到變量

利用了Saver載入模型的變量名映射功能,實際上對所有的變量都可以如此操作『TensorFlow』模型載入方法匯總

v = tf.Variable(1.,name="v") 

#定義模型對象 

saver = tf.train.Saver({"v/ExponentialMovingAverage":v}) 

sess = tf.Session() 

saver.restore(sess,"./model.ckpt") 

print(sess.run(v)) 

#0.0999999  

這里特別需要注意的一個地方就是,在使用tf.train.Saver函數(shù)中,所傳遞的模型參數(shù)是{"v/ExponentialMovingAverage":v}而不是{"v":v},如果你使用的是后面的參數(shù),那么你得到的結(jié)果將是10而不是0.09,那是因為后者獲取的是變量本身而不是影子變量。

使用這種方式來讀取模型文件的時候,還需要輸入一大串的變量名稱。

variables_to_restore函數(shù)的使用

v = tf.Variable(1.,name="v") 

#滑動模型的參數(shù)的大小并不會影響v的值 

ema = tf.train.ExponentialMovingAverage(0.99) 

print(ema.variables_to_restore()) 

#{'v/ExponentialMovingAverage': <tf.Variable 'v:0' shape=() dtype=float32_ref>} 

sess = tf.Session() 

saver = tf.train.Saver(ema.variables_to_restore()) 

saver.restore(sess,"./model.ckpt") 

print(sess.run(v)) 

#0.0999999 

variables_to_restore會識別網(wǎng)絡(luò)中的變量,并自動生成影子變量名。

通過使用variables_to_restore函數(shù),可以使在加載模型的時候?qū)⒂白幼兞恐苯佑成涞阶兞康谋旧?,所以我們在獲取變量的滑動平均值的時候只需要獲取到變量的本身值而不需要去獲取影子變量。

5、官方文檔例子

官方文檔中將每次apply更新就會自動訓(xùn)練一邊模型,實際上可以反過來兩者關(guān)系,《tf實戰(zhàn)google》P128中有示例

 | Example usage when creating a training model:
 | 
 | ```python
 | # Create variables.
 | var0 = tf.Variable(...)
 | var1 = tf.Variable(...)
 | # ... use the variables to build a training model...
 | ...
 | # Create an op that applies the optimizer. This is what we usually
 | # would use as a training op.
 | opt_op = opt.minimize(my_loss, [var0, var1])
 | 
 | # Create an ExponentialMovingAverage object
 | ema = tf.train.ExponentialMovingAverage(decay=0.9999)
 | 
 | with tf.control_dependencies([opt_op]):
 |   # Create the shadow variables, and add ops to maintain moving averages
 |   # of var0 and var1. This also creates an op that will update the moving
 |   # averages after each training step. This is what we will use in place
 |   # of the usual training op.
 |   training_op = ema.apply([var0, var1])
 | 
 | ...train the model by running training_op...
 | ```

6、batch_normal的例子

和上面不太一樣的是,batch_normal中不太容易綁定到train_op(位于函數(shù)體外面),則強行將兩個variable的輸出過程化為節(jié)點,綁定給參數(shù)更新步驟

def batch_norm(x,beta,gamma,phase_train,scope='bn',decay=0.9,eps=1e-5):

  with tf.variable_scope(scope):

    # beta = tf.get_variable(name='beta', shape=[n_out], initializer=tf.constant_initializer(0.0), trainable=True)

    # gamma = tf.get_variable(name='gamma', shape=[n_out],

    #             initializer=tf.random_normal_initializer(1.0, stddev), trainable=True)

    batch_mean,batch_var = tf.nn.moments(x,[0,1,2],name='moments')

    ema = tf.train.ExponentialMovingAverage(decay=decay)

 

    def mean_var_with_update():

      ema_apply_op = ema.apply([batch_mean,batch_var])

      with tf.control_dependencies([ema_apply_op]):

        return tf.identity(batch_mean),tf.identity(batch_var)

        # identity之后會把Variable轉(zhuǎn)換為Tensor并入圖中,

        # 否則由于Variable是獨立于Session的,不會被圖控制control_dependencies限制

 

    mean,var = tf.cond(phase_train,

              mean_var_with_update,

              lambda: (ema.average(batch_mean),ema.average(batch_var)))

     normed = tf.nn.batch_normalization(x, mean, var, beta, gamma, eps)

  return normed 

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 一文帶你掌握Matplotlib風(fēng)格與樣式

    一文帶你掌握Matplotlib風(fēng)格與樣式

    學(xué)過Python的小伙伴都會知道,Matplotlib是Python生態(tài)最好用的可視化工具庫,下面這篇文章主要給大家介紹了關(guān)于Matplotlib風(fēng)格與樣式的相關(guān)資料,需要的朋友可以參考下
    2023-09-09
  • Python實現(xiàn)重建二叉樹的三種方法詳解

    Python實現(xiàn)重建二叉樹的三種方法詳解

    這篇文章主要介紹了Python實現(xiàn)重建二叉樹的三種方法,結(jié)合實例形式分析了Python重建二叉樹的實現(xiàn)方法、操作技巧與注意事項,需要的朋友可以參考下
    2018-06-06
  • Python 處理圖片像素點的實例

    Python 處理圖片像素點的實例

    今天小編就為大家分享一篇Python 處理圖片像素點的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • Python中collections模塊的基本使用教程

    Python中collections模塊的基本使用教程

    collections是Python內(nèi)建的一個集合模塊,提供了許多有用的集合類。下面這篇文章主要給大家介紹了關(guān)于Python中collections模塊的基本使用,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2018-12-12
  • conda與jupyter notebook kernel核環(huán)境不一致的問題解決

    conda與jupyter notebook kernel核環(huán)境不一致的問題解決

    本文記錄在使用conda時候出現(xiàn)的問題,jupter notebook中的環(huán)境不一致導(dǎo)致的,具有一定的參考價值,感興趣的可以了解一下
    2023-05-05
  • Python Opencv中基礎(chǔ)的知識點

    Python Opencv中基礎(chǔ)的知識點

    這篇文章主要介紹了Python Opencv中基礎(chǔ)的知識點,主要包括創(chuàng)建窗口、保存圖片、采集視頻、鼠標控制的代碼,代碼簡單易懂,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-07-07
  • PyTorch實現(xiàn)重寫/改寫Dataset并載入Dataloader

    PyTorch實現(xiàn)重寫/改寫Dataset并載入Dataloader

    這篇文章主要介紹了PyTorch實現(xiàn)重寫/改寫Dataset并載入Dataloader,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • 跟老齊學(xué)Python之類的細節(jié)

    跟老齊學(xué)Python之類的細節(jié)

    前面對類的有關(guān)內(nèi)容已經(jīng)描述不少了,其實話題遠遠沒有結(jié)束,不過對于初學(xué)者,掌握這些已經(jīng)算是入門,在以后的實踐中,還需要進行體會和感悟。
    2014-10-10
  • 用Pelican搭建一個極簡靜態(tài)博客系統(tǒng)過程解析

    用Pelican搭建一個極簡靜態(tài)博客系統(tǒng)過程解析

    這篇文章主要介紹了用Pelican搭建一個極簡靜態(tài)博客系統(tǒng)過程解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-08-08
  • python設(shè)置環(huán)境變量的作用和實例

    python設(shè)置環(huán)境變量的作用和實例

    在本篇文章里小編給各位整理了關(guān)于python設(shè)置環(huán)境變量的作用和實例內(nèi)容知識點,需要的朋友們學(xué)習(xí)參考下。
    2019-07-07

最新評論