2016-08-02 3 views
3

피드 변수에 문제가 있습니다. 나는 시대에 걸친 내 모델의 동파와 편향을 원한다. 나는 다음 변수가 : 예를 들어get_collection에서 사용할 텐서 플로어 자리 표시자를 사용하는 방법

wc1 = tf.Variable(tf.random_normal([f1, f1, _channel, n1], mean=0, stddev=0.01), name="wc1") 
wc2 = tf.Variable(tf.random_normal([f2, f2, n1, n2], mean=0, stddev=0.01), name="wc2") 
wc3 = tf.Variable(tf.random_normal([f3, f3, n2, _channel], mean=0, stddev=0.01), name="wc3") 

bc1 = tf.Variable(tf.random_normal(shape=[n1], mean=0, stddev=0.01), name="bc1") 
bc2 = tf.Variable(tf.random_normal(shape=[n2], mean=0, stddev=0.01), name="bc2") 
bc3 = tf.Variable(tf.random_normal(shape=[_channel], mean=0, stddev=0.01), name="bc3") 

내가 훈련을 원하는 [WC1, BC1] 처음 10 시대 이상을, 다음 [WC2, BC2]를 옆에 획기적인 이상. 이 목적을 위해 나는 변수 컬렉션을 만들어 :

tf.add_to_collection('wc1', wc1) 
tf.add_to_collection('wc1', bc1) 

tf.add_to_collection('wc2', wc2) 
tf.add_to_collection('wc2', bc2) 

을 그리고 컬렉션 이름에 대한 자리를 만들 :

opt = tf.train.GradientDescentOptimizer(learning_rate=learning_rate) 
train_op = opt.minimize(cost, var_list=tf.get_collection(trainable_name)) 

피드 데이터 :

trainable_name = tf.placeholder(tf.string, shape=[]) 

다음 내 최적화에 그것을 얻을 시도

sess.run(train_op, feed_dict={ ... , trainable_name: "wc1"}) 

그리고 I ge t 오류 :

Traceback (most recent call last): 
    File "/home/keeper121/PycharmProjects/super/sp_train.py", line 292, in <module> 
    train(tiles_names, "model.ckpt") 
    File "/home/keeper121/PycharmProjects/super/sp_train.py", line 123, in train 
    train_op = opt.minimize(cost, var_list=tf.get_collection(trainable_name)) 
    File "/home/keeper121/anaconda/envs/tensorflow/lib/python2.7/site-packages/tensorflow/python/training/optimizer.py", line 193, in minimize 
    grad_loss=grad_loss) 
    File "/home/keeper121/anaconda/envs/tensorflow/lib/python2.7/site-packages/tensorflow/python/training/optimizer.py", line 244, in compute_gradients 
    raise ValueError("No variables to optimize") 
ValueError: No variables to optimize 

따라서 세션을 통해 교육 변수를 변경하는 방법은 무엇입니까?

감사합니다.

답변

0

다음 시도 보내기

train_op_wc1 = opt.minimize(cost, var_list=tf.get_collection("wc1")) 
train_op_wc2 = opt.minimize(cost, var_list=tf.get_collection("wc2")) 

그리고를 당신은 데이터 피드 때

#define your samples as you would always do 
input_feed = ... 
#then use the training op that addresses the correct layers, as you defined above 
if first_10_epoch: 
    sess.run(train_op_wc1, feed_dict=input_feed) 
else: 
    sess.run(train_op_wc2, feed_dict=input_feed) 
관련 문제