2017-08-10 6 views

答えて

1

トレーニング可能= Falseの

ここで変数の値は、訓練を通じて一定になります。オプティマイザはトレーニング用にこの変数を考慮せず、グラデーションの更新も行いません。特定の状況で

stop_gradient

、あなたは一定の他のいくつかの変数を維持するいくつかの変数についてのOPの傾きを計算します。他の操作の場合は、これらの変数を使用してグラデーションを計算することもできます。ここではtrinable=Falseを使用することはできません。他の操作でトレーニングするためにはこれらの変数が必要です。

stop_gradientは、操作に非常に便利です。他の定数を維持しながら、いくつかの変数を選択するためにopを選択的に最適化することができます。

y1 = tf.stop_gradient(W1x+b1) 
y2 = W2y1+b2 
cost = cost_function(y2, y) 
# this following op wont optimize the cost with respect to W1 and b1 
train_op_w2_b2 = tf.train.MomentumOptimizer(0.001, 0.9).minimize(cost) 

W1 = tf.get_variable('w1', trainable=False) 
y1 = W1x+b1 
y2 = W2y1+b2 
cost = cost_function(y2, y) 
# this following op wont optimize the cost with respect to W1 
train_op = tf.train.MomentumOptimizer(0.001, 0.9).minimize(cost) 
+0

私が間違っている場合は、私を修正してください。トレーニング中に変数を一定にしたい場合、私は 'trainable = False'を使います。しかし条件付きで変数を訓練したいと思って、時には訓練したくない場合は 'stop_gradient'を使います。私の理解は正しいのですか? –

+0

それは私が意味するものです。 –