我大致了解了TensorFlow图在评估它包含的Tensors
之一时是如何评估的:该张量的run
或val
的执行将触发图中所需的所有级联计算计算该张量的值,因此,图中“导致它”的任何张量也将被计算,并且连接它们的任何操作都将被运行。
因此,如果我有一个包含张量out\u a的图,其计算涉及(可能在许多其他事情中)使用int\u b的操作,这反过来(最终)需要执行本身(最终)使用in的操作
a, b, o = sess.run([out_a, int_b, an_op], feed_dict={in: x})
将只评估out_a
、int_b
和an_op
一次:out_a
和int_b
的计算都使用an_op
的相同执行;用于提供int_b
的计算与计算out_a
中使用的计算相同。(例如,如果我稍后引用a
,我使用的是评估张量out_a
的值,因此不会进一步执行。)
但是,如果我不以这种方式合并我的操作,会发生什么
o = sess.run(an_op, feed_dict={in: x})
# ... and later yet, after I remember I need `int_b`:
b = sess.run(int_b, feed_dict={in: x})
# ... later, after I remember I need `out_a`:
a = sess.run(out_a, feed_dict={in: x})
在这种情况下,TensorFlow是否执行了任何优化以避免计算an_op
第二次和第三次,以及int_b
第二次,可能会触发这些计算的副作用?
在这种情况下,TensorFlow是否进行了任何优化,以避免第二次和第三次计算an\u op,第二次计算int\u b,从而可能触发这些计算的副作用?
不,这取决于开发人员是否记住需要执行哪些计算,并将它们全部放在SES的列表中。运行函数(按您描述的方式)。
您可以通过运行以下代码进行验证:
import tensorflow as tf
import numpy as np
from datetime import datetime
n = 3000
t = np.random.rand(n,n)
a = tf.Variable(t)
b = tf.matmul(a, a)
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
startTime = datetime.now()
_ = sess.run(b)
print datetime.now() - startTime
startTime = datetime.now()
_ = sess.run(b)
print datetime.now() - startTime
startTime = datetime.now()
_ = sess.run(b)
print datetime.now() - startTime
在我的机器上返回:
0:00:02.798704
0:00:02.940005
0:00:03.039798
如果数据将被缓存,第二次运行将立即返回。
问题内容: 我一直在研究优化LinkedList的方法。有人知道Java默认的双向链接LinkedList类是否经过优化以进行反向操作吗?例如: 将调用优化搜索和走在相反,因为它是一个双向链表?如果您知道该元素位于列表的后半部分,则从末尾开始搜索并向中心搜索会更有意义。 我知道用的是时间,遍历LinkedList时应该使用迭代器,但是我很好奇。 问题答案: 是的。您可以自己检查源代码:http :
条款14:使用reserve来避免不必要的重新分配 关于STL容器,最神奇的事情之一是只要不超过它们的最大大小,它们就可以自动增长到足以容纳你放进去的数据。(要知道这个最大值,只要调用名叫max_size的成员函数。)对于vector和string,只要需要更多空间,就以realloc等价的思想来增长。这个类似于realloc的操作有四个部分: 分配新的内存块,它有容器目前容量的几倍。在大部分实现
本文向大家介绍在React中如何避免不必要的render?相关面试题,主要包含被问及在React中如何避免不必要的render?时的应答技巧和注意事项,需要的朋友参考一下 shouldComponentUpdate、memoization、PureComponent
我正在编写一些Swing应用程序,用于使用MigLayout进行测量。我试图消除不必要的差距。 我已经注意到,由于顶部的句子,差距是存在的。然而,当我删除它时,它看起来很好。 该问题在下图中可见: 我加句子的方式是: 我添加按钮的方式: 有人能帮我解释一下为什么会发生这种情况,以及我如何消除与现在句子的差距吗? ////////////编辑 我想使用我当前的基础架构,我已经在miglaway中启用
问题内容: 我发现JavaScipt和通过bash(和其他编程语言)创建的json- data之间存在差异。使用JavaScript,即使使用,我也可以创建最多六位的十进制数字。但是与它不同,因为添加十进制值只需要在小数点后四位数字。 我的问题是我需要十进制数字存储在SQL中,该点后最多六位数字。 例: 我的目标是用此行验证小数点… 有什么建议/建议吗? 问题答案: 您无法更改其行为-目前,相关功
我有一个典型的Antlr 4.5项目,其中有两个语法文件:MyLexer。g4和MyParser。Antlr从中生成6个输出文件:MyLexer。java,MyLexer。标记,MyParser。java,MyParser。令牌,MyParserBaseListener。java和MyParserListener。Java语言gradle任务都工作正常,因此输出文件都按预期生成、编译和测试。 问题