【发布时间】:2018-10-18 14:18:43
【问题描述】:
我开发了一个模型,该模型需要我有两个版本的模型,一个在训练步骤之前,一个在训练步骤之后。我以为我可以简单地使用 tf.assign() 方法调用来做到这一点,但这似乎大大减慢了训练速度。
Why does tf.assign() slow the execution time?
这篇文章提出了一个类似的问题,但作者只是试图更新学习率,只需添加一个 feed_dict 即可。但是,在我的情况下,真的不能避免调用 tf.assign 吗?另一个解决方案涉及分离图形定义和图形运行,但由于我需要两者都在会话中,因为它们需要访问其他模型的参数,所以我不确定如何执行此操作。
感谢任何帮助。
代码很简单:
tf.assign(var[0], var[2])
tf.assign(var[1], var[3])
Q_agent.train(...)
和var[0] 和var[1] 是Q_agent 的参数。
在这种情况下,训练时间相当长。我已经修改了代码以尝试使用 tf.placeholder。代码如下:
var = tf.trainable_variables()
params = [var[4], var[5]]
update_hidden = tf.placeholder(params[0].dtype, shape=params[0].get_shape())
update_value = tf.placeholder(params[1].dtype, shape=params[1].get_shape())
for loop:
var = tf.trainable_variables()
old_hidden = var[0]
old_value = var[1]
new_hidden = var[2]
new_value = var[3]
update_h = old_hidden.assign(update_hidden)
update_v = old_value.assign(update_value)
sess.run([update_h, update_v], feed_dict={update_hidden: new_hidden.eval(), update_value: new_value.eval()})
虽然 train 函数现在运行很快,但这并没有提高代码的效率,因为在运行 update_h 和 update_v 时性能会持续下降。有什么想法吗?
【问题讨论】:
标签: python tensorflow