Skip to main content
 首页 » 编程设计

python之将行添加到一批 TensorFlow 张量

2025年01月19日27jillzhang

我有 3 阶张量 [batch_size, num_rows, num_cols]),我想向其附加适当大小的行,从而得到尺寸为 [batch_size, num_rows + 1, num_cols] 的 3 阶张量

例如,如果我有以下一批 2x2 矩阵

batch = [ [[2, 2], 
           [2, 2]], 
          [[3, 3], 
           [3, 3]], 
          [[4, 4], 
           [4, 4]] ] 

和一个新行 v = [1, 1] 我想追加,那么期望的结果是

new_batch = [ [[2, 2], 
               [2, 2], 
               [1, 1]],  
              [[3, 3], 
               [3, 3], 
               [1, 1]], 
              [[4, 4], 
               [4, 4], 
               [1, 1]] ] 

在 TensorFlow 中是否有一种简单的方法可以做到这一点?这是我尝试过的:

W, b, c0, q0 = params 
c = tf.concat([context, c0], axis=1) 
q_p = tf.tanh(tf.matmul(W, question) + b) 
q = tf.concat([q_p, q0], axis=1) 
q_mask = tf.concat([question_mask, 1], axis=1) 

为了澄清条款,

  1. context 具有维度 [batch_size, context_len, hidden_​​size]
  2. q_p 具有维度 [batch_size, question_len, hidden_​​size]
  3. question_mask 具有维度 [batch_size, question_len]
  4. c0 和 q0 都有维度 [hidden_​​size]

我想做什么

  1. 将向量 c0 添加到 context,生成维度为 [batch_size, context_len + 1, hidden_​​size]
  2. 的张量
  3. 将向量 q0 添加到 q_p,得到维度为 [batch_size, question_len + 1, hidden_​​size]
  4. 的张量
  5. 将 1 添加到 question_mask,得到维度为 [batch_size, question_len + 1]
  6. 的张量

感谢您的帮助。

请您参考如下方法:

您可以使用 tf.map_fn做这个。

batch = [ [[2, 2], 
           [2, 2]], 
          [[3, 3], 
           [3, 3]], 
          [[4, 4], 
           [4, 4]] ] 
 
row_to_add = [1,1] 
 
t = tf.convert_to_tensor(batch, dtype=np.float32) 
appended_t = tf.map_fn(lambda x: tf.concat((x, [row_to_add]), axis=0), t) 

输出

appended_t.eval(session=tf.Session()) 
 
array([[[ 2.,  2.], 
        [ 2.,  2.], 
        [ 1.,  1.]], 
 
       [[ 3.,  3.], 
        [ 3.,  3.], 
        [ 1.,  1.]], 
 
       [[ 4.,  4.], 
        [ 4.,  4.], 
        [ 1.,  1.]]], dtype=float32)