tensorflowチュートリアル:collection,regularizer


回転:https://www.cnblogs.com/linyuanzhou/p/6923607.html
tf.add_to_collection:変数を1つの集合に入れ、多くの変数を1つのリストにします.
tf.get_collection:1つのセットからすべての変数を取り出し、リストです.
tf.add_n:リストのものを順番に加算する
例:
[python] 
 
  • import tensorflow as tf;    
  • import numpy as np;    
  • import matplotlib.pyplot as plt;    
  •   
  • v1 = tf.get_variable(name='v1', shape=[1], initializer=tf.constant_initializer(0))  
  • tf.add_to_collection('loss', v1)  
  • v2 = tf.get_variable(name='v2', shape=[1], initializer=tf.constant_initializer(2))  
  • tf.add_to_collection('loss', v2)  
  •   
  • with tf.Session() as sess:  
  •     sess.run(tf.initialize_all_variables())  
  •     print tf.get_collection('loss')  
  •     print sess.run(tf.add_n(tf.get_collection('loss')))  

  • 出力:
    [, ]
     
    tensorflow Regularizers
    損失関数に正規項を加えることは、オーバーフィットを防止する重要な方法である、TensorFlowで正規項をどのように使用するかについて説明する.tensorflowでパラメータに正規項を使用するには、2つのステップに分けられます.正規メソッド(関数/オブジェクト)2を作成します.この正規メソッド(関数/オブジェクト)をパラメータに適用
    正規メソッド関数の作成方法
    tf.contrib.layers.l1_regularizer(scale, scope=None) L1の正規化を実行するための関数を返し、関数の署名はfunc(weights)である.パラメータ:
  • scale:正規項の係数.
  • scope:オプションのscope name
  • tf.contrib.layers.l2_regularizer(scale, scope=None) L2の正規化を実行する関数を返す.
    tf.contrib.layers.sum_regularizer(regularizer_list, scope=None)
    複数の正規化を実行できる関数を返す.複数の正規化方法の混合体である正規化方法を作成することを意味する.
    パラメータ:regularizer_List:regulizerのリスト
    正規化メソッドの作成方法はわかりましたが、パラメータに正規化メソッドを適用する方法について説明します.
    正規化メソッドをパラメータに適用
    tf.contrib.layers.apply_regularization(regularizer, weights_list=None)
    まずパラメータを見て
  • regularizer:前回作成した正規化方法
  • です.
  • weights_List:正規化方法を実行するためのパラメータリストは、Noneである、GraphKeys.WEIGHTSweightsをとる.

  • 関数は、1つのスカラーTensorを返し、同時に、このスカラーTensorGraphKeys.REGULARIZATION_LOSSESに保存する.このTensorは、正規項損失を算出する方法を保存する.tensorflowのうちTensorはこの値を計算する経路(方法)を保存しており、runの場合、tensorflowの後端は経路を通じてTensorに対応する値を計算する
    今、私たちはこの正則項の損失を私たちの損失関数に加えるだけでいいです.
    自分で手動でweightを定義する場合は、weightを手動でGraphKeys.WEIGHTSに保存する必要がありますが、layerを使うと、そんなに面倒なことはありません.他の人はもう考えてあげました.( tf.GraphKeys.WEIGHTSにすべてのweightsが含まれているかどうか、ピット防止)
    その他tf.get_variable()tf.variable_scope()を使用すると、2つの中にregularizer形の参があることがわかります.このパラメータが入力と、variable_scope内のweightsの正規化損失、またはweightsの正規化損失がGraphKeys.REGULARIZATION_LOSSESに追加される.例:
    import tensorflow as tf
    from tensorflow.contrib import layers
    
    regularizer = layers.l1_regularizer(0.1)
    with tf.variable_scope('var', initializer=tf.random_normal_initializer(), 
    regularizer=regularizer):
        weight = tf.get_variable('weight', shape=[8], initializer=tf.ones_initializer())
    with tf.variable_scope('var2', initializer=tf.random_normal_initializer(), 
    regularizer=regularizer):
        weight2 = tf.get_variable('weight', shape=[8], initializer=tf.ones_initializer())
    
    regularization_loss = tf.reduce_sum(tf.get_collection(tf.GraphKeys.REGULARIZATION_LOSSES))