Tensorflow(Python):如何将标量附加到张量的每一行

时间:2018-07-04 05:32:30

标签: python tensorflow

如果我有一个二维张量且第一维是动态的,我如何在每个行的末尾附加一个标量值?

因此,如果我将[[1,2],[3,4]]馈入张量,我想将其设为[[1,2,5],[3,4,5]]。

示例(无效):

a = tf.placeholder(tf.int32, shape=[None, 2])
b = tf.concat([tf.constant(5), a], axis=1)

这给了我: ValueError:无法将输入形状为[],[?, 2],[]的'concat_3'(op:'ConcatV2')的标量连接起来(。

我认为这需要tf.stack,tf.tile和tf.shape的某种组合,但我似乎无法正确理解。

3 个答案:

答案 0 :(得分:1)

IMO填充是这里最简单的方法:

a = tf.placeholder(tf.int32, shape=[None, 2])
b = tf.pad(a, [[0, 0], [0, 1]], constant_values=5)

将附加一个5列。

文档:tf.pad

答案 1 :(得分:0)

这是一种实现方法:

  • 扩展要添加的标量张量的尺寸,使其排名为2。
  • 使用tf.tile重复行。
  • 沿着最后一个轴连接两个张量。

例如:

import tensorflow as tf

a = tf.placeholder(tf.int32, shape=[None, 2])
c = tf.constant(5)[None, None]  # Expand dims. Shape=(1, 1)
c = tf.tile(c, [tf.shape(a)[0], 1])  # Repeat rows. Shape=(tf.shape(a)[0], 1)
b = tf.concat([a, c], axis=1)

with tf.Session() as sess:
    print(sess.run(b, feed_dict={a: [[1, 2], [3, 4]]}))

答案 2 :(得分:0)

受rvinas答案的启发,我想出了一个更简单的解决方案:

constants = tf.fill((tf.shape(tensors)[0], 1), 5.0) # create the constant column vector
tensors = tf.keras.layers.Concatenate(axis=1)([tensors, constants])