【问题标题】:Feed Variables in Tensorflow Efficiently在 Tensorflow 中有效地输入变量
【发布时间】:2019-02-27 21:50:30
【问题描述】:

我需要将字典输入到 Tensorflow 中的一组变量中,并实际更改它们的值。我试过:sess.run([], feed_dict=feed_dict),运行结果是使用feed_dict执行的,但是变量值没有更新。为了更新这些值,我还尝试对每个变量进行“加载”。这行得通,但效率极低。加载约 20 个 20M 数据的变量需要 10 秒。我需要它在 1 秒内。 (喂它只需要~100ms)有没有更有效的方法来做到这一点?

下面是一个例子:

import tensorflow as tf
import numpy as np

variables = []
for i in range(100):
    variables.append(tf.Variable(np.random.rand(100, 100)))

sess = tf.Session()

feed_dict = dict()
for var in variables:
    feed_dict[var] = np.ones((100, 100))

sess.run(tf.initialize_all_variables())



# this is fast but do not actaully load variables (~ 14ms)
sess.run(variables, feed_dict=feed_dict)

# this loads, but is extremely slow (~8s)
data = np.ones((100, 100))
for var in variables:
    var.load(data, sess)

【问题讨论】:

  • 请以 mcve 的形式显示代码。不知道你的意思
  • 添加了一个例子。谢谢:-)

标签: tensorflow


【解决方案1】:

命令

sess.run(variables, feed_dict=feed_dict)

不更新变量的值,它只是运行张量,就好像变量是从 feed_dict 中输入值的占位符一样。如果你想改变变量的值,你可以使用 tf.assign:

data = np.ones((100, 100))
assg = [tf.assign(var, data) for var in variables]
sess.run(assg)
print(sess.run(variables)) # arrays of 1s

【讨论】:

    猜你喜欢
    • 2021-06-11
    • 2016-11-29
    • 2019-09-08
    • 2016-06-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多