在下面的例子中,我有一个随机行张量 r
(为了这个例子,它是一个简单的 tf.random_normal
但在我的实际代码中是一个复杂的图形,其形状我无法改变) .
看起来在TensorFlow中,只有在计算了 r
的值之后才运行 tf.tile
操作,实际上平铺张量 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]]
1 回答
您将所有行都视为相同,因为
tf.tile
会复制第一个参数 . 在您的情况下,名为r
的节点输出随机张量 . 这个张量被送到tf.tile
,它复制它(即复制值)三次 .如果你不想要,你可以直接将指定的形状传递给
tf.random_normal()
来生成一个完全随机的张量,并符合你的形状要求 .