首页 文章

Tensorflow运行时确定Tensor的形状

提问于
浏览
1

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

问题是在运行时基于输入向量 length_q 构建常量张量 . 目标张量的列数是 sum of 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)

Update

我想根据输入 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 回答

  • 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
    
  • 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)
    

相关问题