tensorflowチュートリアル:collection,regularizer
3457 ワード
回転: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
損失関数に正規項を加えることは、オーバーフィットを防止する重要な方法である、
正規メソッド関数の作成方法
tf.contrib.layers.l1_regularizer(scale, scope=None) scale:正規項の係数. scope:オプションの tf.contrib.layers.l2_regularizer(scale, scope=None)
tf.contrib.layers.sum_regularizer(regularizer_list, scope=None)
複数の正規化を実行できる関数を返す.複数の正規化方法の混合体である正規化方法を作成することを意味する.
パラメータ:regularizer_List:regulizerのリスト
正規化メソッドの作成方法はわかりましたが、パラメータに正規化メソッドを適用する方法について説明します.
正規化メソッドをパラメータに適用
tf.contrib.layers.apply_regularization(regularizer, weights_list=None)
まずパラメータを見て regularizer:前回作成した正規化方法 です. weights_List:正規化方法を実行するためのパラメータリストは、
関数は、1つのスカラー
今、私たちはこの正則項の損失を私たちの損失関数に加えるだけでいいです.
自分で手動で
その他
tf.add_to_collection:変数を1つの集合に入れ、多くの変数を1つのリストにします.
tf.get_collection:1つのセットからすべての変数を取り出し、リストです.
tf.add_n:リストのものを順番に加算する
例:
[python]
出力:
[, ]
tensorflow Regularizers
損失関数に正規項を加えることは、オーバーフィットを防止する重要な方法である、
TensorFlow
で正規項をどのように使用するかについて説明する.tensorflow
でパラメータに正規項を使用するには、2つのステップに分けられます.正規メソッド(関数/オブジェクト)2を作成します.この正規メソッド(関数/オブジェクト)をパラメータに適用正規メソッド関数の作成方法
tf.contrib.layers.l1_regularizer(scale, scope=None)
L1
の正規化を実行するための関数を返し、関数の署名はfunc(weights)
である.パラメータ:scope name
L2
の正規化を実行する関数を返す.tf.contrib.layers.sum_regularizer(regularizer_list, scope=None)
複数の正規化を実行できる関数を返す.複数の正規化方法の混合体である正規化方法を作成することを意味する.
パラメータ:regularizer_List:regulizerのリスト
正規化メソッドの作成方法はわかりましたが、パラメータに正規化メソッドを適用する方法について説明します.
正規化メソッドをパラメータに適用
tf.contrib.layers.apply_regularization(regularizer, weights_list=None)
まずパラメータを見て
None
である、GraphKeys.WEIGHTS
のweights
をとる.関数は、1つのスカラー
Tensor
を返し、同時に、このスカラーTensor
もGraphKeys.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))