2

私はスタンフォードコースを通してTensorflowを使ってニューラルネットについて学んでいます。私はRNNを実装しながらこれを発見し、損失が蓄積されている理由をかなり理解していなかった:tensorflow.get_collection()のコレクションはクリアされていますか?

# This adds a loss operation to the Graph for batch training 
def add_loss_op(self, output): 
    all_ones = [tf.ones([self.config.batch_size * self.config.num_steps])] 
    cross_entropy = sequence_loss(
     [output], [tf.reshape(self.labels_placeholder, [-1])], all_ones, len(self.vocab)) 
    tf.add_to_collection('total_loss', cross_entropy) 
    # Doesn't this increase in size every batch of training? 
    loss = tf.add_n(tf.get_collection('total_loss')) 
    return loss 

get_collection()hereのドキュメントは、変数をクリアについては何も言及していません。これはすべての訓練ステップで実行されるので、喪失は訓練のエポック/ミニバイトごとに増分され、引き継がれますか?

私はまだNNに新しいので、私はこれについて何か誤解を修正してください!

答えて

1

ここでadd_nは実際には、 'total_loss'コレクションの既存の損失が最終結果に追加されることを確認することだと思います。変数を変更するのではなく、入力を合計して合計を戻すだけです。

0

このadd_loss_to_collection opの前に間違っていると推測できない場合は、このコレクションに訓練可能なvarsのl2_lossを追加するopsがあります。そうした場合、このadd_n演算子は、この "損失"コレクション内のすべての損失(l2_lossと予測損失を含む)を合計することを意味します。あなたは "add_to_loss操作を実行する多くの反復がありますが、損失の増分ですか?"、いいえ、実行プロセスをデバッグすると、グラフ全体が構築されているとき、テンソルフローが実行されているときにそのコレクションのサイズやフレームワークは変更されていません。

関連する問題