【问题标题】:transfer parameters between models in tensorflow slows down training time张量流中模型之间的传递参数减慢了训练时间
【发布时间】: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_hupdate_v 时性能会持续下降。有什么想法吗?

【问题讨论】:

    标签: python tensorflow


    【解决方案1】:

    解决了。关键是定义 tf.assign() 以便它被调用一次而不是在训练循环中。否则,如果您每次都调用它,那么这会向图中添加一个新节点,这意味着您必须在每次迭代后进行额外的计算。

    var = tf.trainable_variables()
    old_hidden = var[0] 
    old_value = var[1]
    update_h = old_hidden.assign(update_hidden)
    update_v = old_value.assign(update_value)
    
    for loop:
    
        # overwrite old_hidden and old_value here.
        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()})
    

    我 100% 确定有一种更整洁的方式来做这件事,但这就是我所拥有的!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-24
      • 2017-09-22
      • 1970-01-01
      • 2016-11-04
      • 1970-01-01
      • 2020-02-29
      • 2023-03-12
      相关资源
      最近更新 更多