<p>我添加了另一个答案,因为最近对这个问题的编辑产生了实质性的变化。您仍然可以看到运行时间的增长,因为您仍然在<code>sess</code>中多次调用<code>model</code>。您只是减少了向图中添加节点的频率。您需要做的是为要构建的每个模型创建一个新会话,并在完成后关闭每个会话。我已经修改了您的代码,如下所示:</p>
<pre><code>import numpy as np
import tensorflow as tf
import time
n_inputs = 9
n_class = 9
n_hidden_1 = 20
population_size = 10
weights = []
biases = []
game_steps = 20 #so we can see performance loss faster
# 2 games per individual
games_in_generation = population_size/2
def generate_initial_population(my_population_size):
my_weights = []
my_biases = []
for key in range(my_population_size):
layer_weights = {
'h1': tf.Variable(tf.truncated_normal([n_inputs, n_hidden_1], seed=key)),
'out': tf.Variable(tf.truncated_normal([n_hidden_1, n_class], seed=key))
}
layer_biases = {
'b1': tf.Variable(tf.truncated_normal([n_hidden_1], seed=key)),
'out': tf.Variable(tf.truncated_normal([n_class], seed=key))
}
my_weights.append(layer_weights)
my_biases.append(layer_biases)
return my_weights, my_biases
def model(x):
out_layer = tf.add(tf.matmul([biases[1]['b1']], weights[1]['out']), biases[1]['out'])
return out_layer
def play_game(sess):
model_input = [0] * 9
model_out = model(data)
for game_step in range(game_steps):
move = sess.run(model_out, feed_dict={data: model_input})[0]
while True:
for _ in range(int(games_in_generation)):
# Reset the graph.
tf.reset_default_graph()
weights, biases = generate_initial_population(population_size)
data = tf.placeholder(dtype=tf.float32) #will add shape later
# Create session.
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
start_time = time.time()
play_game(sess)
print(" -Games took %s seconds -" % (time.time() - start_time))
sess.close()
</code></pre>
<p>我在这里所做的是将对<code>play_game</code>的调用包装在<code>with</code>作用域中定义的会话中,并在对<code>play_game</code>的调用之后用<code>sess.close</code>退出该会话。我还重置了默认图形。我已经运行了几百次了,运行时间没有增加。你知道吗</p>