使用 SparseTensor 作为可训练变量?

You*_* Oh 6 sparse-matrix neural-network tensorflow

我正在尝试使用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 声明的权重不会随着训练步骤的进行而训练。

kev*_*man 2

TensorFlow 目前不支持稀疏张量变量。然而,它确实支持密集变量的稀疏查找(tf.embedding_lookup)和稀疏梯度更新(tf.sparse_add)。我怀疑这两个足以满足您的用例。