当我在体内初始化一些变量时,tf.while_loop如何工作?

时间:2019-08-04 06:39:26

标签: python tensorflow

我在body函数旁边创建了一些随机变量,并将这些随机变量合并为张量。运行此操作后,我得到的结果concat张量都具有相同的随机数。我想知道是什么问题以及如何解决这个问题。

我尝试另一个示例,这里有一个张量列表,我使用tf.while_loop通过使用list.pop(0)操作列表中的每个张量,但仅在第一个张量上使用op。我可以感觉到这样的代码出了点问题,因为.pop(0)是python op。我不知道如何处理这种情况。谢谢!

i = tf.constant(0)
x = tf.zeros([0,4])
cond = lambda i, x: i<10
def func(i,x):
    i = i + 1
    c = tf.constant(np.random.rand(4).reshape(1,4),dtype=tf.float32)
    x = tf.concat([x,c],0)
    return [i, x]
i, x = tf.while_loop(cond, func, [i,x], shape_invariants=[i.get_shape(),tf.TensorShape([None,4])])

sess.run(x)
array([[0.10202069, 0.51291764, 0.06818759, 0.86766857],
   [0.10202069, 0.51291764, 0.06818759, 0.86766857],
   [0.10202069, 0.51291764, 0.06818759, 0.86766857],
   [0.10202069, 0.51291764, 0.06818759, 0.86766857],
   [0.10202069, 0.51291764, 0.06818759, 0.86766857],
   [0.10202069, 0.51291764, 0.06818759, 0.86766857],
   [0.10202069, 0.51291764, 0.06818759, 0.86766857],
   [0.10202069, 0.51291764, 0.06818759, 0.86766857],
   [0.10202069, 0.51291764, 0.06818759, 0.86766857],
   [0.10202069, 0.51291764, 0.06818759, 0.86766857]], dtype=float32)


l = [tensor1, tensor2, tensor3]
i = tf.constant(0)
cond = lambda i, x: i < 3
x = tf.zeros([0,4])
def func(i, x):
    i = i + 1
    y = l.pop(0)
    x = tf.concat([x,y],0)
    return [i, x]
i, x = tf.while_loop(cond, func, [i,x],shape_invariants=[i.get_shape(),tf.TensorShape([None,4])])

0 个答案:

没有答案