4
オプションtrainable=False
とtf.stop_gradient()
の違いを知りたいと思います。 trainable
オプションをFalse
にすると、私のオプティマイザはトレーニング用の変数を考慮しませんか? このオプションは、トレーニングを通して一定の値にしていますか?テンソルフローでは、訓練可能な勾配と停止勾配の違いは何ですか?
オプションtrainable=False
とtf.stop_gradient()
の違いを知りたいと思います。 trainable
オプションをFalse
にすると、私のオプティマイザはトレーニング用の変数を考慮しませんか? このオプションは、トレーニングを通して一定の値にしていますか?テンソルフローでは、訓練可能な勾配と停止勾配の違いは何ですか?
トレーニング可能= 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)
私が間違っている場合は、私を修正してください。トレーニング中に変数を一定にしたい場合、私は 'trainable = False'を使います。しかし条件付きで変数を訓練したいと思って、時には訓練したくない場合は 'stop_gradient'を使います。私の理解は正しいのですか? –
それは私が意味するものです。 –