2017-02-06 8 views
1

私は同様の質問hereを求めました。テンソルフローでネットワークを複製する

しかし、答えは私の必要性を満たしておらず、誰も私のコメントに返信していないので、質問を再投稿して明確にする必要があります。

私はTarget & Sourceという2つのネットワークを持っています。シンプルの場合、ネットワークは次のように定義されています。

# definition for Source 
s_input = tf.placeholder(tf.float32, [None, 1], name = 'input_layer') 
s_output = tf.contrib.layers.fully_connected(input = s_input, num_outputs=1) 
#structure of target is the same as Source's with t_input & t_output 
#loss 
loss = (alpha*t_output-s_input+beta*label)**2 
opt = tf.train.GradientDescentOptimizer(learning_rate=0.1).minimize(loss) 

は今、いくつかのトレーニング段階の後、私はs_ouputが原因変わっとしてt_ouputが変化しないようt_ouput層への層s_ouputの内容(パラメータ)をコピーしたいです勾配降下へ& t_putはまだt_inputから入力を受け取ります。

私はYaroslav Bulatovが提案した解決方法を試しましたが、うまくいかなかったのです。

単純にtf.Variableを使用してネットワークを定義すると、変数をtf.assignで簡単にコピーできますが、もっと簡単なtf.contrib.layersを使用したいと考えています。&自分のネットワーク。

誰かが私の質問を理解できない場合は、私にそれを修正できるように通知してください。

答えて

1

こんにちは、割り当てを使用してコピー操作を作成することができます。

s_output = tf.contrib.layers.fully_connected(input = s_input, num_outputs=1, weights_initializer=tf.contrib.layers.xavier_initializer()) 
t_output = tf.contrib.layers.fully_connected(input = s_input, num_outputs=1) 

今、あなたはトレーニング可能な変数

vars = tf.trainable_variables() 

と(最初の半分はs_outputとt_outputから後半からの変数である)それらをコピーにアクセスすることができます:あなたは今

copy_ops = [vars[ix+len(vars)//2].assign(var.value()) for ix, var in enumerate(vars[0:len(vars)//2])] 

init = tf.global_variables_initializer() 
sess = tf.Session() 
sess.run(init) 
map(lambda x: sess.run(x), copy_ops) 
print(sess.run(vars[2])) 
を使用してデータをコピーできます。

あなたが探しているものがほしいと思っています。

関連する問題