2016-12-26 2 views

答えて

3

Theano/Tensorflowとライブラリを使用する利点の1つは、それらの上に構築されます。彼らはあなたに数学的関数と演算の自動勾配計算を与えることができます。今度はオプティマイザによって呼び出され

# keras/theano_backend.py 
def gradients(loss, variables): 
    return T.grad(loss, variables) 

# keras/tensorflow_backend.py 
def gradients(loss, variables): 
    '''Returns the gradients of `variables` (list of tensor variables) 
    with regard to `loss`. 
    ''' 
    return tf.gradients(loss, variables, colocate_gradients_with_ops=True) 

(keras/optimizers.py)grads = self.get_gradients(loss, params)をすべてparamsの更新ルールを記述するために使用されている勾配を得るために:

Kerasを呼び出すことによって、それらを取得します。ここではparamsが層の訓練可能な重みです。しかし、ラムダ機能層によって作られた層は、訓練可能な重みを持たない。しかし、それらは順方向のprobを介して損失関数に影響し、したがって他の層の訓練可能な重みの勾配の計算に間接的に影響を及ぼす。

新しい勾配計算を書く必要があるのは、新しい基本的な算術演算/関数を定義するときだけです。また、カスタムロス関数を書くとき、自動グラデーションはほとんど常に勾配計算を行います。しかし、オプションで、カスタム関数の分析グラディエントを実装する場合は、必ずしも最適化する必要はありません。例えば、ソフトワックス関数はexp、sum、divで表すことができ、auto gradはそれを処理することができますが、分析/記号勾配は通常Theano/Tensorflowで実装されます。 http://deeplearning.net/software/theano/extending/extending_theano.html https://www.tensorflow.org/versions/r0.12/how_tos/adding_an_op/index.html

新しいオプスを実装するために、あなたはそのために、以下のリンクを参照してくださいすることができます

関連する問題