TensorFlowは、勾配降下の運動量を有するimplementationを有する。
独自の最適化アルゴリズムの実装に関する一般的な質問に答えるために、TensorFlowはグラデーションを計算するための基本要素を提供し、計算されたグラデーションを使用して変数を更新します。次のようにあなたのモデルでは、loss
は、損失関数を指定したとし、かつvar_list
はあなたがtf.all_variables
やtf.trainable_variables
を呼び出すことによって取得することができ、あなたのモデルでTensorFlow変数(のpythonのリストである、あなたは計算することができ勾配があなたの変数をWRT:
grads = tf.gradients(loss, var_list)
シンプルな勾配降下のために
、あなたは単に勾配の積と変数から学習率を引くでしょう、次のようにそのためのコードがなります。
var_updates = []
for grad, var in zip(grads, var_list):
var_updates.append(var.assign_sub(learning_rate * grad))
train_op = tf.group(*var_updates)
あなたはを呼び出すことによって、あなたのモデルをトレーニングすることができます。実際に変数を更新する前に、いろいろなことができるようになりました。たとえば、異なる変数セットのグラジエントを追跡し、モメンタムアルゴリズムに使用することができます。また、変数を更新する前にグラデーションをクリップすることもできます。グラデーションテンソルはTensorFlowで計算した他のテンソルと変わらないので、これらはすべて単純なTensorFlow演算です。独自の実装方法を理解するには、いくつかのより洗練された最適化アルゴリズムの実装(Momentum、RMSProp、Adam)を見てください。
'AdamOptimizer'または' RMSPropOptimizer'の使用を検討しましたか? – titus