考虑以下程序,我迭代地计算@if (var3!= null)
{
<p> Product: @var3 </p>
}
进行多次迭代。
b += a
显然,上面的循环调用至少100次内核启动,看起来不必要,因为我实际上正在进行此添加。有没有办法避免内核启动开销?理想情况下,我正在寻找一个tensorflow API解决方案(只有A = tf.constant(np.random.randn(1000000))
B = tf.constant(np.random.randn(1000000))
init = tf.global_variables_initializer()
with tf.Session() as sess:
sess.run(init)
for i in range(100):
B = tf.add(A, B)
上的一个调用),而不是更改run
的逻辑。
答案 0 :(得分:0)
您可以使用tf.while_loop
。
i = tf.constant(100)
op = tf.while_loop(
lambda a, b, i: tf.greater(i, 0),
lambda a, b, i: (a+b, b, i-1),
(a, b, i))
res = op[0]
res
在运行循环后包含“a
”的值 - 请注意a
实际上未更改且仍包含起始值。
答案 1 :(得分:0)
基本上,您在图表中创建了100个分配和添加操作,这可能不是您想要的。
这段代码应该做你想要的。
mbstring
答案 2 :(得分:0)
您需要了解TF的第一件事是您需要将图形的定义与其执行分开。当您处理真正的问题时,它将节省您数小时的调试/搜索效率低下的问题。
你当前的问题是因为你还没有这样做。在循环中,每次创建一个图形节点(100次)。如果你愿意 - 检查你的张量板图表,如果你是懒惰的,只需将值增加到一个非常大的值,你的程序就会崩溃graph is bigger than 2Gb
。
要以更好的方式执行此操作,您可以定义然后执行。要重新分配值,请使用assign operator。
A = tf.constant(3) # change to your random stuff
B = tf.Variable(1) # change to your random stuff
B_new = B.assign(tf.add(A, B))
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
for i in range(100):
res = sess.run(B_new)
print res
最后你显然不需要循环:
A = tf.constant(3)
B = tf.constant(1)
C = 100 * A + B
with tf.Session() as sess:
print sess.run(C)