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