指定动态形状作为输入参数
Specify dynamic shape as an input argument
对于需要形状参数的张量流函数,我们如何将动态形状作为输入参数之一提供?
例如,假设我有一个占位符
x = tf.placeholder(tf.float32, [None, 3])
现在我想创建一个与 x
的第一维形状相同的一维随机张量。
r = tf.random_uniform([x.get_shape()[0]])
这将不起作用,因为 x.get_shape()[0]
将 return 静态形状 "None"。有没有一种方法可以根据 x
的动态形状将动态形状分配给 r
?
x = tf.placeholder(tf.float32, [None, 3])
s = tf.shape(x)
s2 = tf.slice(s, [0], [1])
r = tf.random_uniform(s2)
sess = create_session()
print r.eval(feed_dict={x:np.ones((4,3))})
[ 0.69890845 0.64149153 0.16378665 0.89732885]
您可以使用 tf.shape()
op 获取张量的动态形状,并将其用作 tf.random_uniform()
:
的参数
x = tf.placeholder(tf.float32, [None, 3])
r = tf.random_uniform(tf.shape(x)[0:1])
(请注意 tf.shape(x)
的切片,即 [0:1]
必须指定一个范围而不是单个元素,因为 tf.random_uniform()
需要一个维度向量。)
对于需要形状参数的张量流函数,我们如何将动态形状作为输入参数之一提供?
例如,假设我有一个占位符
x = tf.placeholder(tf.float32, [None, 3])
现在我想创建一个与 x
的第一维形状相同的一维随机张量。
r = tf.random_uniform([x.get_shape()[0]])
这将不起作用,因为 x.get_shape()[0]
将 return 静态形状 "None"。有没有一种方法可以根据 x
的动态形状将动态形状分配给 r
?
x = tf.placeholder(tf.float32, [None, 3])
s = tf.shape(x)
s2 = tf.slice(s, [0], [1])
r = tf.random_uniform(s2)
sess = create_session()
print r.eval(feed_dict={x:np.ones((4,3))})
[ 0.69890845 0.64149153 0.16378665 0.89732885]
您可以使用 tf.shape()
op 获取张量的动态形状,并将其用作 tf.random_uniform()
:
x = tf.placeholder(tf.float32, [None, 3])
r = tf.random_uniform(tf.shape(x)[0:1])
(请注意 tf.shape(x)
的切片,即 [0:1]
必须指定一个范围而不是单个元素,因为 tf.random_uniform()
需要一个维度向量。)