gpt4 book ai didi

tensorflow - 为什么 tf.assign() 会减慢执行时间?

转载 作者:行者123 更新时间:2023-12-03 22:54:02 24 4
gpt4 key购买 nike

今天,我在 Tensorflow 中为我的 LSTM 添加了学习率衰减。

我改变

train_op = tf.train.RMSPropOptimizer(lr_rate).minimize(loss)


lr = tf.Variable(0.0,trainable=False)

并运行每一个火车步骤
sess.run(tf.assign(lr, lr_rate*0.9**epoch))

但是,此更改将执行时间从约 7 分钟增加到超过 20 分钟。

我的问题是:
为什么此更改会增加执行时间?

一个明显的解决方法是每 1000 次迭代才进行一次分配。但是,我想了解这背后的原因。
  • sess.run() 需要额外的时间吗?
  • tf.asign() 需要额外的时间吗?
  • 我可以用另一种更有效的方式实现这个 tf.assign() 吗?
  • 最佳答案

    您遇到的问题与sess.run无关或 tf.assign .这是许多模型中非常流行的问题,并且由于图形臃肿,您的模型速度很慢。我将在一个与您的代码无关的非常简单的示例中解释所有这些意味着什么。看看这两个片段:

    片段 1

    a = tf.Variable(1, name='a')
    b = tf.Variable(2, name='b')
    with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    for _ in range(3):
    print sess.run(tf.add(a, b)),

    片段 2
    a = tf.Variable(1, name='a')
    b = tf.Variable(2, name='b')
    res = tf.add(a, b)
    with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    for _ in range(3):
    print sess.run(res),

    他们都返回相同的值,看起来他们都做同样的事情。问题是他们创建了不同的图表,如果你愿意 print len(tf.get_default_graph().get_operations())循环后,您将看到 Snippet 1 的节点数比 Snippet 2 多。将范围增加到几千个,差异会很明显。

    臃肿的图形也有同样的问题。因为在循环的每次迭代中,您都会创建 tf.assign(lr, lr_rate*0.9**epoch)图中的 3 个节点。将图形定义与图形运行分开移动,您将看到改进。

    关于tensorflow - 为什么 tf.assign() 会减慢执行时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37966924/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com