繁体   English   中英

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

[英]Why sess.run(tf.assign) take longer time to execute after each epoch?

我写了一个函数,通过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
...

如果您多次运行该代码,那么您将在图形中创建越来越多的复制操作,这会降低速度。 相反,仅创建一次分配操作:

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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM