小编You*_* Oh的帖子

使用 SparseTensor 作为可训练变量?

我正在尝试使用SparseTensor来表示全连接层中的权重变量。
但是,TensorFlow 0.8 似乎不允许将 SparseTensor 用作 tf.Variable。
有什么办法可以解决这个问题吗?

我试过了

import tensorflow as tf

a = tf.constant(1)
b = tf.SparseTensor([[0,0]],[1],[1,1])

print a.__class__  # shows <class 'tensorflow.python.framework.ops.Tensor'>
print b.__class__  # shows <class 'tensorflow.python.framework.ops.SparseTensor'>

tf.Variable(a)     # Variable is declared correctly
tf.Variable(b)     # Fail
Run Code Online (Sandbox Code Playgroud)

顺便说一下,我使用 SparseTensor 的最终目标是永久屏蔽一些密集形式的连接。因此,在计算和应用梯度时忽略这些修剪后的连接。

在我当前的 MLP 实现中,SparseTensor 及其稀疏形式的matmul ops 成功地报告了推理输出。但是,使用 SparseTensor 声明的权重不会随着训练步骤的进行而训练。

sparse-matrix neural-network tensorflow

6
推荐指数
1
解决办法
4609
查看次数

Tensorflow是否将稀疏矩阵使用CSR以外的COO格式作为显而易见的原因?

我正在尝试从Tensorflow的内置稀疏矩阵乘法API中获得性能优势。并且,keveman建议tf.embedding_lookup_sparse是正确的方法。

但是,似乎embedding_lookup_sparse的性能在我的实验中有些令人失望。尽管它执行<1,3196>和<3196,1024>较小的矩阵乘法,但稀疏度为0.1的稀疏矩阵无法赢得密集的矩阵乘法。

如果我的实现是正确的,我认为原因之一是Tensorflow使用COO格式保存所有索引-非零对。我不是该领域的专家,但是,众所周知,CSR格式在这种计算中性能更高吗?Tensorflow内部使用除CSR以外的COO格式进行稀疏矩阵表示的任何明显原因是什么?

sparse-matrix tensorflow

4
推荐指数
1
解决办法
1070
查看次数

标签 统计

sparse-matrix ×2

tensorflow ×2

neural-network ×1