我有 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)
为了澄清条款,
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] 的张量
- 将 1 添加到
question_mask,得到维度为[batch_size, question_len + 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)
