2017-05-30 67 views
0

我試着用不同的超參數重複運行tensorflow深度學習程序。Tensorflow:我如何反覆運行tensorflow作業?

for i in range(10): 
    my_learner = DQNLearner() 
    my_learner.build_network() 
    my_learner.run() 


class DQNLearner(): 
    def build_network(self): 
     W1 = tf.get_variable(
      "W1", 
      shape=[self.input_size, h_size], 
      initializer=tf.contrib.layers.xavier_initializer() 
     ) 
     b1 = tf.Variable(tf.random_normal([h_size])) 
     L1 = tf.nn.relu(tf.matmul(self._X, W1) + b1) 
     L1 = tf.nn.dropout(L1, keep_prob=self.keep_prob) 

     W2 = tf.get_variable(
      "W2", 
      shape=[h_size, h_size], 
      initializer=tf.contrib.layers.xavier_initializer() 
     ) 
     b2 = tf.Variable(tf.random_normal([h_size])) 
     L2 = tf.nn.relu(tf.matmul(L1, W2) + b2) 
     L2 = tf.nn.dropout(L2, keep_prob=self.keep_prob) 
     . 
     . 
     . 
     . 
     . 

它在第一次循環中效果很好。但在第二個循環中,它是這樣發生的:

ValueError: Variable W1 already exists, disallowed. Did you mean to set reuse=True in VarScope? Originally defined at: 

我該如何解決它?

回答

0

tf.get_variable方法試圖給你一個現有的變量,如果它已經被調用,否則它會創建一個新的變量。請參閱the variable guide

您可以做的是通過調用tf.reset_default_graph()來重置兩個循環之間的圖形。這樣,新的變量將被添加到一個全新的默認的圖形:

for i in range(10): 
    tf.reset_default_graph() 
    my_learner = DQNLearner() 
    my_learner.build_network() 
    my_learner.run() 

另一種方法是,讓您的變量和使用初始化器運算兩個循環之間重新初始化它們。例如,你可以這樣做:

tf.reset_default_graph() 
my_learner = DQNLearner() 
my_learner.build_network() 

init_op = tf.global_variables_initializer() 
sess = tf.InteractiveSession() 
for i in range(10): 
    sess.run(init_op) 
    my_learner.run()