Python 通过连接最后一维中的数字来减少张量

Python 通过连接最后一维中的数字来减少张量,python,tensorflow,Python,Tensorflow,为了识别唯一的序列,我需要使用tensorflow函数,通过连接最后一个维度中的数字,将2D int张量缩减为1D int张量 比如说, [[1, 0], [2, 1], [1, 3], [2, 0], [0, 1]] 应该成为 [10, 21, 13, 20, 1] 到目前为止,我得到的是 def reduce_concat(input): def join(x): dec = tf.range(0, x.shape[-1], 1) dec = tf.map_fn(la

为了识别唯一的序列,我需要使用tensorflow函数,通过连接最后一个维度中的数字,将2D int张量缩减为1D int张量

比如说,

[[1, 0], [2, 1], [1, 3], [2, 0], [0, 1]]
应该成为

[10, 21, 13, 20, 1]
到目前为止,我得到的是

def reduce_concat(input):
  def join(x):
    dec = tf.range(0, x.shape[-1], 1)
    dec = tf.map_fn(lambda x: tf.math.pow(10, x), dec)
    return tf.math.reduce_sum(x * dec)
  return tf.map_fn(join, input)
这几乎是可行的,但它忽略了零,并且不是很优雅


如果有人能为这个问题提供一个优雅的解决方案,我将不胜感激。谢谢。

您可以尝试以下方法:

def reduce_concat(input):
  dec = 10**tf.range(input.shape[-1]-1, -1, -1)
  return tf.reduce_sum(input * dec, axis=-1)
输入的结果:

[10, 21, 13, 20,  1]

我使用的技巧是创建一个与输入形状相同的
因子
矩阵,其中包含10的幂次使用。然后,进行元素相乘,最后应用reduce和

代码如下:

将tensorflow导入为tf
向量=tf.常数([[1,0],[2,1],[1,3],[2,0],[0,1]])
系数=tf.常数([列表(反向)([10**功率用于功率输入
范围(vector.shape[1]))]
输出=tf.减和(tf.乘(向量,因子),轴=1)