【问题标题】:Tile Random Tensor Without Loosing Randomness in TensorFlow在 TensorFlow 中平铺随机张量而不丢失随机性
【发布时间】:2017-02-26 23:48:31
【问题描述】:

在下面的示例中,我有一个随机行张量 r(为了示例,它是一个简单的 tf.random_normal,但在我的实际代码中是一个复杂的图形,它的形状我无法改变)。

似乎在 TensorFlow 中 tf.tile 操作仅在计算 r 的值之后运行,实际上平铺张量 t 的所有行都是相同的。有没有办法在不丢失每个图块的随机性的情况下平铺张量?

import tensorflow as tf

r = tf.random_normal(shape=[1, 2])

t = tf.tile(r, tf.pack([3, 1]), name=None)

session = tf.Session()

print(session.run(t))

session.close()

结果(所有行相同):

[[ 0.29335016  0.11843499]
 [ 0.29335016  0.11843499]
 [ 0.29335016  0.11843499]]

期望的结果(所有行单独计算):

[[ 0.29335016  0.11843499]
 [ 0.46995060  0.58384848]
 [ 0.73958005  0.95689274]]

【问题讨论】:

    标签: python random tensorflow


    【解决方案1】:

    因为tf.tile 复制了第一个参数,所以所有行都相同。在您的情况下,名为 r 的节点输出一个随机张量。这个张量被馈送到tf.tile,它将它复制(即复制值)三次。

    如果您不想这样,您可以直接将指定的形状传递给tf.random_normal() 以生成完全随机且符合您的形状要求的张量。

    【讨论】:

    • 嗯,我不确定我是否理解。我不想洗牌。我只有一个随机行张量,我想将它堆叠在一个矩阵中,但是一旦我这样做,所有行都是相同的。理想情况下,每一行都应该单独计算并且是“随机的”。有什么操作可以代替 tf.tile 来实现吗?
    • 在更好地理解您的查询后修改了我的答案。
    • 感谢您修改答案。正如我所说,虽然 tf.random_normal 只是一个例子。使用具有固定形状的随机张量是否仍然可以实现相同的效果?
    • 如果你有一个形状固定的随机张量,并且你希望它随机平铺,你必须遵循我之前的方法,即在它上面应用tf.random_shuffle。如果您希望行是随机的,那么您必须在此之前对其进行转置。
    • tf.random_shuffle 只是打乱我的张量计算的值,它不会使用我的随机张量生成新值......所以平铺张量的每一行中的所有值都是相同的,但是洗牌,对吗?如果是这样,这仍然不是我需要的。
    猜你喜欢
    • 2011-03-08
    • 1970-01-01
    • 2021-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-07
    • 2016-08-29
    • 1970-01-01
    相关资源
    最近更新 更多