我想在不破坏TF计算图的情况下将这个非常简单的Python for循环转换为Tensorflow。有什么办法可以做到吗? (如果有)
这是for循环,其中A,B和C是张量。
go install
我对Tensorflow还是陌生的,我知道这可能是一个不合理的问题(根据TF的工作原理),如果我也离现实太远,那么对此我将不胜感激。谢谢,
答案 0 :(得分:1)
您不需要在tensorflow中使用循环。 tf.scatter_nd
是适合您问题的函数。一个例子:
import tensorflow as tf
A = [-1,2,3,1]
B = [-2,4,6,2]
C = [-1,2,3,1,7,6]
for a, b in zip(A, B):
if 0 <= a:
C[a] += b
print('your result:\n',C)
A = tf.constant([-1,2,3,1])
B = tf.constant([-2,4,6,2])
C = tf.constant([-1,2,3,1,7,6])
mask_B = tf.boolean_mask(B,tf.greater_equal(A,0))
mask_A = tf.boolean_mask(A,tf.greater_equal(A,0))
C = tf.scatter_nd(tf.expand_dims(mask_A,axis=-1), mask_B, tf.shape(C))+C
# if C type is tf.Variable, you can use tf.scatter_nd_add
# C = tf.scatter_nd_add(C, tf.expand_dims(mask_A,axis=-1), mask_B)
with tf.Session() as sess:
print('tensorflow version:\n',sess.run(C))
your result:
[-1, 4, 7, 7, 7, 6]
tensorflow version:
[-1 4 7 7 7 6]