Tensorflow运行时确定Tensor的形状

时间:2017-03-21 06:42:36

标签: python numpy tensorflow

Tensorflow是否支持运行时确定Tensor的形状?

问题是在运行时基于输入向量length_q构建常量张量。目标张量的列数是 length_q 的总和。代码段如下所示,length_q的长度固定为64。

T = tf.reduce_sum(length_q, 0)[0]
N = np.shape(length_q)[0]
wm = np.zeros((N, T), dtype=np.float32)

# Something inreletive.
count = 0
for i in xrange(N):
    ones = np.ones(length_q[i])
    wm[i][count:count+length_q[i]] = ones
    count += length_q[i]
return tf.Constant(wm)

更新

我想根据输入length_q创建动态Tensor。 length_q是一些输入向量(64 * 1)。我想要创建的新张量形状取决于length_q的总和,因为在每个批次中length_q中的数据都会发生变化。当前的代码段如下:

def some_matrix(length_q):
    T = tf.reduce_sum(length_q, 0)[0]
    N = np.shape(length_q)[0]
    wm = np.zeros((N, T), dtype=np.float32)
    count = 0
return wm

def network_inference(length_q):
    wm = tf.constant(some_matrix(length_q));
    ...

问题可能是因为length_q是占位符并且没有求和操作。有没有办法解决这个问题?

2 个答案:

答案 0 :(得分:1)

听起来tf.fill() op就是你所需要的。此操作允许您将形状指定为tf.Tensor(即运行时值)以及值:

def some_matrix(length_q):
    T = tf.reduce_sum(length_q, 0)[0]
    N = tf.shape(length_q)[0]
    wm = tf.fill([T, N], 0.0)
    return wm

答案 1 :(得分:0)

不清楚你在计算什么。如果你需要计算N形,你可以生成这样的

T = tf.constant(20.0,tf.float32) # tf variable which is reduced sum , 20.0 is example float value 
T = tf.cast(T,tf.int32)      # columns will be integer only
N = 10                       # if numpy integer-  assuming np.shape giving 10
# N = length_q.getshape()[0] # if its a tensor, 'lenght_q' replace by your tensor name
wm = tf.ones([N,T],dtype=tf.float32) # N rows and T columns
sess = tf.Session()
sess.run(tf.initialize_all_variables())
sess.run(wm)