2016-11-01 18 views
0

深いラーニングモデルのテンソルフローの実装を読むとき、私はトレーニングプロセスに含まれる次のコードセグメントを理解しようとしています。テンソルフローでのミニバッチグラディエントの適切な実装

self.net.gradients_node = tf.gradients(loss, self.variables) 
for epoch in range(epochs): 
      total_loss = 0 
      for step in range((epoch*training_iters), ((epoch+1)*training_iters)): 
       batch_x, batch_y = data_provider(self.batch_size) 

       # Run optimization op (backprop) 
       _, loss, lr, gradients = sess.run((self.optimizer, self.net.cost, self.learning_rate_node, self.net.gradients_node), 
                feed_dict={self.net.x: batch_x, 
                  self.net.y: util.crop_to_shape(batch_y, pred_shape), 
                  self.net.keep_prob: dropout}) 

       if avg_gradients is None: 
        avg_gradients = [np.zeros_like(gradient) for gradient in gradients] 
       for i in range(len(gradients)): 
        avg_gradients[i] = (avg_gradients[i] * (1.0 - (1.0/(step+1)))) + (gradients[i]/(step+1)) 

       norm_gradients = [np.linalg.norm(gradient) for gradient in avg_gradients] 
       self.norm_gradients_node.assign(norm_gradients).eval() 



       total_loss += loss 

私はそれがまともなミニバッチ勾配に関連していると思うが、私はそれが動作しない方法を理解することができない、または私はアルゴリズムにそれを接続するためのいくつかの困難を持っている

enter image description here

答えて

0
を次のように示されます

これは、ミニバッチSGDとは関係ありません。

すべてのタイムステップにわたって平均勾配を計算します。最初のタイムステップavg_gradientsには、計算されたばかりの勾配が含まれます.2番目のステップの後には、2つのステップからの2つの勾配の要素平均があります。nステップ後は、これまで計算されたすべてのn勾配の要素平均となります。次に、これらの平均勾配は正規化される(その標準が1になるように)。なぜそれらの平均的な勾配が提示された文脈なしに必要であるかを知ることは難しい。

+0

こんにちはlshamael、返信ありがとうございます。私は元の投稿にトレーニングの反復部分全体を含めます。私を混乱させるもう一つの要因は、もともとゼロと定義されていたavg_gradientsについてです。 avg_gradients [i] = 0であるため、avg_gradients [i] =(avg_gradients [i] *(1.0 - (1.0 /(step + 1))))+(gradients [i] /(step + 1)左辺の最初の項のように0に等しく、avg_gradients [i] = gradients [i] /(step + 1)はそうですか?この勾配操作が何を達成することを目指しているのか分かりません。 – user288609

+0

はい、最初のステップ**では**ステップ+1 = 1となり、 'avg_gradients [i] = grandients [i]'となります。連続する各ステップで、 'avg_gradients is None'という条件は保持されないので、もはやゼロではありません。 – Ishamael

+0

ありがとう、ありがとう。しかし、バッチSGDでない場合、この実装の基礎となるアルゴリズム(またはロジック)は何ですか。私は元の投稿を更新しました。 – user288609

関連する問題