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
是占位符并且没有求和操作。有没有办法解决这个问题?
答案 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)