Tensorflow/keras-在tensor中查找唯一元素的位置
我试图找到二维张量中所有不同值的位置。假设我有以下张量:Tensorflow/keras-在tensor中查找唯一元素的位置,tensorflow,keras,Tensorflow,Keras,我试图找到二维张量中所有不同值的位置。假设我有以下张量: spMap4x4 = tf.Variable([[1, 2, 2, 2], [1, 1, 2, 3], [1, 3, 3, 3], [1, 1, 3, 3]]) 我想找到元素的位置等于1,然后元素的位置等于2,最后元素的位置等于3,而事先不知道这些值 我的想法是在将spMap4x4重塑为一维张量后使用“” spMapFlatten = tf.reshape(spMap4x4, [-1]) y, idx, count = tf.uniqu
spMap4x4 = tf.Variable([[1, 2, 2, 2], [1, 1, 2, 3], [1, 3, 3, 3], [1, 1, 3, 3]])
我想找到元素的位置等于1,然后元素的位置等于2,最后元素的位置等于3,而事先不知道这些值
我的想法是在将spMap4x4重塑为一维张量后使用“”
spMapFlatten = tf.reshape(spMap4x4, [-1])
y, idx, count = tf.unique_with_counts(spMapFlatten)
然后,使用“”获取所需的位置。例如:
a = tf.where(tf.equal(spMap4x4, y[0])
K.eval(a)
这里给出:
a = [[0 0]
[1 0]
[1 1]
[2 0]
[3 0]
[3 1]]
问题是,在不知道这些值是什么的情况下,如何对y中的所有不同值执行该操作?这将包含在keras层中,因此,我需要一个通用解决方案。想到的解决方案是使用,但它要求您知道可能拥有的最大分区数(即输入张量中唯一值的最大数目):
将tensorflow导入为tf
spMap4x4=tf.常数([[1,2,2,2],[1,1,2,3],[1,3,3],[1,1,3,3])
#要求:知道张量可能具有的不同值(分区)的最大数量
最大差值=4
spMap4x4_shape=tf.shape(spMap4x4)
#获取唯一值及其反向索引/分区:
unique\u val,unique\u idx=tf.unique(tf.reformate(spMap4x4,[-1]))
unique_idx=tf.重塑(unique_idx,spMap4x4_形状)
#建立索引矩阵:
idx_cols,idx_rows=tf.meshgrid(tf.range(spMap4x4_形状[0]),tf.range(spMap4x4_形状[1]))
idx_grid=tf.stack([idx_行,idx列],-1)
#根据唯一值的分区对索引矩阵进行分区:
分区的分区=tf.动态分区(idx网格、唯一分区、num分区=最大值)
使用tf.Session()作为sess:
打印(sess.run(partitioned_idx))
#[数组([[0,0],
# [1, 0],
# [1, 1],
# [2, 0],
# [3, 0],
#[3,1]],dtype=int32),
#数组([[0,1],
# [0, 2],
# [0, 3],
#[1,2]],dtype=int32),
#数组([[1,3],
# [2, 1],
# [2, 2],
# [2, 3],
# [3, 2],
#[3,3]],dtype=int32),
#数组([],形状=(0,2),数据类型=int32)]
输入的排序是否使数字总是在增加?例如,@nuric,不,数字并不总是在增加,它可以是随机的。谢谢@Aldream,我想我可以事先计算不同值的数量并将其提供给图层。这不是一个完美的解决方案,但我现在想不出另一个(例如,tf.while\u loop()
和tf.map\u fn()
无法使用,因为每值张量的输出位置将具有不同的形状……)。