2017-08-02 10 views
0

私はpaperを実装しており、要件は以下のように抽象化されています。私は複数のレイヤーを持つCNNを持っています。それぞれのレイヤーはスコープされています。紙には2つの例が必要なので、[grad_and_vars1, grad_and_vars2]grad_and_varsは勾配と変数の組み合わせを意味し、1は最初の例を表す)を得るためにopt.compute_gradients(loss)tf.get_variable_scope().reuse_variables()を使用しました。Tensorflowはスコープ内のすべてのgradient_and_variableペアを取得します

対応する変数が必要なスコープに含まれるグラデーションと変数のペアを取得するにはどうすればよいですか?

ありがとうございます。

答えて

0

compute_gradientsに変数のリストをキーワード引数var_listで渡すことができます。また、tf.trainable_variables()tf.contrib.framework.filter_variables()をご覧ください。

は、ここでは、2つの異なるスコープのための勾配を計算するための例です:私は@chrertからの回答を補足する必要が

all_variables = tf.trainable_variables() 
scope1_variables = tf.contrib.framework.filter_variables(all_variables, include_patterns=['name_of_scope1']) 
scope2_variables = tf.contrib.framework.filter_variables(all_variables, include_patterns=['name_of_scope2']) 
opt = tf.train.MomentumOptimizer(lr, momentum) 
grad_and_vars1 = opt.compute_gradients(loss, var_list=scope1_variables) 
grad_and_vars2 = opt.compute_gradients(loss, var_list=scope2_variables) 
+0

'scope1_variables'と' scope2_variables'の変数の順序は同じですか? @chrert – Tengerye

+0

「同じ注文」とはどういう意味ですか?異なるスコープの変数について話しているので、 'scope1_variables'と' scope2_variables'は互いに素です。 @Tengerye – chrert

0

paperの課題は、2つの損失関数(l1l2)を持って、あなたは両方の機能に関連する勾配を有するいくつかの変数を更新する必要があるということです。

opt.apply_gradientsを使用する前に、l2によって計算l1によって計算されたペア(grad1, var1)とペア(grad2, var2)を見つける必要があり、どこvar1.name==var2.nameそれらを結合します。

私が見つけた簡単な解決策は、opt.compute_gradientsで計算されたペアは同じ順序です。

関連する問題