Python 在TensorFlow中使用稍微稀疏的数据
我有形状的多维输入数据YPython 在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
(批次,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
如果有人有类似的问题或关于如何获得最佳内存/性能的好主意,我将非常感谢