我有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)
澄清条款,
context
的尺寸为[batch_size, context_len, hidden_size]
q_p
的尺寸为[batch_size, question_len, hidden_size]
question_mask
的尺寸为[batch_size, question_len]
c0
和q0
都有尺寸[hidden_size]
我想做什么
c0
添加到context
,从而产生尺寸为[batch_size, context_len + 1, hidden_size]
q0
添加到q_p
,从而产生尺寸为[batch_size, question_len + 1, hidden_size]
question_mask
添加1,从而产生尺寸为[batch_size, question_len + 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)