2017-05-30 11 views
0

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) 
     . 
     . 
     . 
     . 
     . 

これは最初のループでうまく動作します。しかし、2番目のループでは、次のようになります。

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()を呼び出して2つのループ間でグラフをリセットすることです。そうすることによって、新しい変数は、新鮮な新しいデフォルトのグラフに追加されます。

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

もう一つの方法は、あなたの変数を維持し、初期化子のオペアンプを使用して、2つのループ間にそれらを再初期化することです。たとえば、次のように設定できます。

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() 
関連する問題