计算大范围矩阵的bincount(或频谱) 在十个数量级上

2024-04-20 12:02:04 发布

您现在位置:Python中文网/ 问答频道 /正文

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

  • 输入:一个大矩阵,A的整数H x L范围从[0,2^K),其中K是大的。你知道吗
  • 输出:一个整数向量或矩阵的谱,大小为H*L + 1,其中s[i]表示在[0, 2^K)中重复i次的整数数。你知道吗
  • 计算考虑:H x L = 32*400K = 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

不幸的是,这种方法的主要问题是,对于中等大小的K扩展到一个热的形式在计算上变得不可行,并且可能会遇到内存不足的问题。在Tensorflow中有没有更有效的方法?你知道吗


Tags: 方法概念元素示例reduce过程tf矩阵