1. ホーム
  2. python

[解決済み] TensorFlowで正則化を追加するには?

2023-02-22 19:32:52

質問

TensorFlowで実装された多くのニューラルネットワークのコードを見ると、正則化項は損失値に手動で追加することで実装されていることが多いような気がします。

私の質問は

  1. 正則化を手動で行うよりもエレガントで推奨される方法はありますか?

  2. また、私は get_variable には引数 regularizer . これはどのように使うべきでしょうか。私の観測によると、もし正則化物を渡すと ( tf.contrib.layers.l2_regularizer という名前のグラフコレクションに追加されます。 tf.GraphKeys.REGULARIZATOIN_LOSSES . そのコレクションはTensorFlowによって自動的に利用されるのでしょうか(例えば学習時にオプティマイザによって利用される)?それとも、自分でそのコレクションを使用することが期待されているのでしょうか?

どのように解決するのですか?

2点目でおっしゃられているように regularizer 引数を使うのが推奨される方法です。で使用することができます。 get_variable の中で使うか、あるいは variable_scope で一度だけ設定し、すべての変数を正規化します。

損失はグラフに収集されるので、手動でこのようにコスト関数に追加する必要があります。

  reg_losses = tf.get_collection(tf.GraphKeys.REGULARIZATION_LOSSES)
  reg_constant = 0.01  # Choose an appropriate one.
  loss = my_normal_loss + reg_constant * sum(reg_losses)

お役に立てれば幸いです。