为什么在每个时期之后sess.run(tf.assign)需要更长的时间来执行?

时间:2019-07-16 08:20:12

标签: python numpy tensorflow

我写了一个函数,通过tf.assign()函数在每个纪元后更新可训练变量,新值是numpy数组,并且在每个纪元后可训练变量的形状不会改变。但是,当时期增加时,尽管可训练变量的数量和形状相同,但是运行此代码的时间也增加了。有没有人可以解释这种现象?

start_time = time.time()
for i, v in enumerate(tf.trainable_variables()):
    v_tensor = graph.get_tensor_by_name(v.name)
    sess.run(tf.assign(v_tensor, value[i]))
print('Time to update trainable variables: {}'.format(time.time() - start_time))

如您所见,在每个时期之后,运行此代码的时间会增加:

Time to update trainable variables: 0.20442891120910645
Time to update trainable variables: 0.31240272521972656
Time to update trainable variables: 0.44904398918151855
Time to update trainable variables: 0.6219220161437988
...

1 个答案:

答案 0 :(得分:0)

如果您多次运行该代码,那么您将在图形中创建越来越多的复制操作,这会使操作变慢。相反,只需创建一次分配操作:

assignment_ops = []
for i, v in enumerate(tf.trainable_variables()):
    v_tensor = graph.get_tensor_by_name(v.name)
    assignment_ops.append(tf.assign(v_tensor, value[i]))

然后,每当需要实际执行分配时,只需运行先前创建的操作即可:

sess.run(assignment_ops)