ニューラルネットワークモデルでは、0.99 MOVING_AVERAGE_DECAYは、パラメータW1が0に設定され、平均値W1を移動提供
0に設定されています。
開始①、global_step車輪の数が0に設定され、パラメータが1 W1に更新され、平均実行W1である:
W1移動平均=分(0.99,1 / 10)* 0 +(1-分(0.99,1 / 。10)* = 0.9 1
車輪100が数global_step、W1パラメータ更新10に設定されている場合②は、移動平均は次のようになる。
平均=分(0.99,101 / 110)*実行W1 (0.9 +(1-分0.99,101 / 110)* 10 = 0.826 + 0.818 = 1.644
③ラン再び、1.644にパラメータW1を更新する、移動平均になる:
平均=分(0.99,101 / 110)を実行W1 * 1.644 +(1- 分(0.99,101 / 110)* 10 = 2.328
④ラン再び、2.328へW1パラメータを更新、移動平均:
W1 = 2.956平均摺動
コードは以下の通りであります:
#1 コーディング:UTF 8 インポートAS tensorflowのTF #1変数定義されたクラスと移動平均 #は32ビット浮動小数点変数を定義し、0.0このコードの初期値を移動平均したW1パラメータW1、W1最適化パラメータを、更新されシャドウ W1 tf.Variable =(0、DTYPE = tf.float32) # (反復のNN番号)NUM_UPDATESを定義し、初期値は0であり、(訓練された)最適化されず、このパラメータが訓練されていない global_step = tf.Variable(0 、訓練可能= 偽) #インスタンス化クラスの移動平均、150減衰率、global_stepラウンドの現在の数 MOVING_AVERAGE_DECAY = 150 EMA = tf.train.ExponentialMovingAverage(MOVING_AVERAGE_DECAY、global_step) #平均移動 #の更新後にブラケットがema.applyでありますリスト、あなたがsess.run(ema_op)を実行するたびに、移動平均は、要素のリストを更新しようとしています。 #は、すべてのパラメータが要約リストとして訓練されるように自動的に)(実用的なアプリケーションのtf.trainable_variablesに使用されます #= ema.apply ema_op([W1]) #関数のパラメータが既に辞書やタプル、間接呼び出し関数に存在する場合適用(FUNC [、引数[、kwargsから]])関数が使用されます。 = ema_op ema.apply(tf.trainable_variables()) #2を表示異なる反復変数の値を変更します。 ()セッション数ASとtf.Session: #初期 tf.global_variables_initializer init_op =() #は、初期化 (init_op)sess.runを#は、初期化計算 #として、(複数のノードとema.averageを実行する(W1)の平均値W1を移動取得をリストに記載されている要素は、中sess.run)に書き込み #1 印刷現在のパラメータW1及び移動平均W1 プリント 「現在global_step:」、sess.run(global_step)#1 印刷global_stepの 印刷を 「現在W1 」、Sess.runは([w1が、ema.average(W1)]) #は、移動平均算出 #のパラメータがW1の値が割り当てられている1。 #tf.assign(A、NEW_NUMBER):この機能は、主に値Aの関数となりますNEW_NUMBER sess.run(tf.assign(W1 ,. 1 )) sess.run(ema_op) プリント " 現在global_step:" 、sess.run(global_step) プリント " 現在W1 " 、sess.run([W1、ema.average( W1)]) #更新global_step w1の値とは、10となるW1のパラメータは、次のコードはglobal_step 100は、移動平均動作は、シャドウ値が更新されるたびに保持され、ラウンド数は100であり、シミュレーション sess.run(TFを。 (global_step、100))を割り当てる #1 100にセットglobal_step sess.run(tf.assign(W1、10))#1 セットW1は10 sess.run(ema_op) #ファイル名を指定して実行ema_op 印刷 " 現在global_step:"、sess.run(global_step) #の印刷 印刷 " 現在W1:"、sess.run([W1、ema.average(W1)]) #の印刷 #各sess.runが更新されますW1平均摺動 sess.run(ema_op) プリント " :現在global_step " 、sess.run(global_step) プリント " 現在W1:" 、sess.run([W1、ema.average(W1)]) sess.runを( ema_op) 印刷 " 現在global_step:" 、sess.run(global_step) 印刷 」現在W1:"sess.run([W1、ema.average(W1)]) sess.run(ema_op)プリント " 現在global_step:"sess.run(global_step) プリント" 現在W1:" 、sess.run([W1、 ema.average(W1)]) sess.run(ema_op)プリント" 現在global_step:" 、sess.run(global_step) プリント" 現在W1:" 、sess.run([W1、ema.average(W1)]) のSES .RUN(ema_op)プリント" 現在global_step:" 、sess.run(global_step) プリント" 現在W1:" 、sess.run([W1、ema.average(W1)]) sess.run(ema_op) プリント " 現在global_step:" 、sess.run(global_step) プリント " 現在W1:"、sess.run([W1、EMA .average(W1)])
操作の結果から、初期パラメータW1及び移動平均が0であり; W1パラメータが1に設定され、移動平均値は0.9となる。
反復回数がパラメータW1 10を更新した後、100に更新されたときに、移動平均値は1.644となります。たびに、その後、パラメータ
移動平均は、パラメータW1 W1と近くにあります。可視、移動平均処理変動の変化に追従。