在tensorflow中,我想做类似的事情:
A = tf.add(a, b, c)
也就是说,我要创建一个添加两个以上自变量的图形。我该怎么做?
答案 0 :(得分:0)
答案实际上在张量流中比人们预期的要复杂。
您可以链接附加项:
res = a + b + c
,但是随后创建的节点数与添加的节点数相同。此外,您可以强制执行加法顺序:a
和b
首先相加(因此TF必须等待它们的值准备好),然后再添加c
。
解决方案似乎是
res = tf.add_n([a, b, c])
创建一个节点。 {,tf.add_n
效率不高。它会等待所有输入准备就绪再将它们求和,因此它实际上比链接添加的效率低,后者可以在a
和b
准备好后立即开始。其次,所有输入必须同时存储在内存中,这浪费了内存—同样,当链接添加项时,a
和b
可以在求和c
之前被丢弃。
汇总多个输入的更好方法是使用tf.accumulate_n
,这可以减轻tf.add_n
的问题,因为它会在输入出现时对其求和。
恕我直言,仍然拥有tf.add_n
的唯一原因是为了与TF <1.7兼容,为此tf.accumulate_n
不能通过渐变,如果要支持旧版本的TF,这是一个主要缺点。