向批量的TensorFlow张贴添加行

时间:2018-03-12 19:52:05

标签: python tensorflow

我有3个张量[batch_size,num_rows,num_cols]),我想要追加适当大小的行,导致3级张量的维度为[batch_size,num_rows + 1,num_cols]

例如,如果我有以下批次的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. c0q0都有尺寸[hidden_size]
  5. 我想做什么

    1. 将向量c0添加到context,从而产生尺寸为[batch_size, context_len + 1, hidden_size]
    2. 的张量
    3. 将向量q0添加到q_p,从而产生尺寸为[batch_size, question_len + 1, hidden_size]
    4. 的张量
    5. question_mask添加1,从而产生尺寸为[batch_size, question_len + 1]的张量
    6. 感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

您可以使用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)