Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在TensorFlow中使用稍微稀疏的数据_Python_Tensorflow - Fatal编程技术网

Python 在TensorFlow中使用稍微稀疏的数据

Python 在TensorFlow中使用稍微稀疏的数据,python,tensorflow,Python,Tensorflow,我有形状的多维输入数据Y(批次,m,n,c,x),其中只有大约15%的m/n值数据存在,其余用零填充。我需要执行的计算是tf.einsum(“bnx,bmncx->bnc”,X,Y) 我尝试使用tensorflow稀疏矩阵,但这会导致速度大大减慢,甚至会导致更大的数据量 out = Y.__mul__(X[:, tf.newaxis, :, tf.newaxis]) tf.raw_ops.SparseReduceSum( input_indices=out

我有形状的多维输入数据Y
(批次,m,n,c,x)
,其中只有大约15%的m/n值数据存在,其余用零填充。我需要执行的计算是
tf.einsum(“bnx,bmncx->bnc”,X,Y)

我尝试使用tensorflow稀疏矩阵,但这会导致速度大大减慢,甚至会导致更大的数据量

out = Y.__mul__(X[:, tf.newaxis, :, tf.newaxis])
tf.raw_ops.SparseReduceSum(
                    input_indices=out.indices,
                    input_values=out.values,
                    input_shape=tf.cast(tf.shape(out), dtype=tf.int64),
                    reduction_axes=(1, -1)
                )
比tf.einsum慢30倍以上。我的问题是,对于大数据,tf.einsum不能在我的GPU上执行,我知道应该可以将内存使用量减少一大部分

我考虑的另一种方法是自己使用类似

data = []
index = []

for configuration in tf.unstack(Y, axis=0):
    index.append(tf.where(configuration[:, :, 0, 0]))
    data.append(tf.gather_nd(configuration, index[-1]))
但是
数据
索引
的大小在每个批次中都不同,我不能在我的
tf.data
输入管道中使用它

我的下一个方法是减小Y中
m
n
的大小,并使用一个热编码和X上的一些聚集来执行einsum

如果有人有类似的问题或关于如何获得最佳内存/性能的好主意,我将非常感谢