如果我有一个二维张量且第一维是动态的,我如何在每个行的末尾附加一个标量值?
因此,如果我将[[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的某种组合,但我似乎无法正确理解。
答案 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)
这是一种实现方法:
例如:
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])