在Tensorflow中计算大范围矩阵的bincount(或频谱)

时间:2017-04-19 19:58:07

标签: python tensorflow

我想在Tensorflow中有效地实现矩阵元素多样性的概念,以便可以在神经网络训练的每次迭代中执行。更准确地说,

  • 输入:一个大整数A整数H x L,其范围为[0,2^K),其中K很大。
  • 输出:整数的向量,或矩阵的谱,s,大小为H*L + 1,其中s[i]表示[0, 2^K)中重复的整数数{{ 1}}次。
  • 计算注意事项:iH x L = 32*400。这个过程需要在神经网络的每次迭代中运行。

示例:

K = 16

天真的方法

A = [[0,0,0,1,1,2,2],
     [3,4,4,4,4,5,6]]
K = 3
s = [1,2,2,1,1,0,0,0,0,0,0,0,0,0,0]

不幸的是,这种方法的主要问题是,对于中等大小的I = tf.one_hot(A) #Shape: H x L x 2^K y = tf.reduce_sum(tf.reduce_sum(I,0),1) # Shape: 2^K s = tf.bincount(y, minLength = H*L + 1) # Shape: H*L + 1 ,扩展为one_hot形式在计算上是不可行的,并且也可能遇到内存不足的问题。在Tensorflow中有更有效的方法吗?

1 个答案:

答案 0 :(得分:0)

如果你在矩阵上调用一次bincount,你将获得一个向量,其中在位置i你有元素i的计数。然后,如果你打电话给bincount,那么你将有一个向量,在位置c你有数量c的元素,这就是我想你想要的。