在TensorFlow中使用coo_矩阵

在TensorFlow中使用coo_矩阵,tensorflow,sparse-matrix,matrix-factorization,Tensorflow,Sparse Matrix,Matrix Factorization,我在TensorFlow中做一个矩阵分解,我想使用Spicle.sparse中的coo_矩阵,因为它使用更少的内存,并且可以很容易地将所有数据放入矩阵中进行训练 是否可以使用coo_矩阵初始化tensorflow中的变量 或者我必须创建一个会话,并使用sess.run和feed_dict将我获得的数据输入tensorflow 我希望你能理解我的问题和我的问题,否则请发表评论,我会尝试解决它。TensorFlow最接近的东西是,它是稀疏的等价物。将coo_矩阵输入您的程序可能是最简单的 tf.Sp

我在TensorFlow中做一个矩阵分解,我想使用Spicle.sparse中的coo_矩阵,因为它使用更少的内存,并且可以很容易地将所有数据放入矩阵中进行训练

是否可以使用coo_矩阵初始化tensorflow中的变量

或者我必须创建一个会话,并使用sess.run和feed_dict将我获得的数据输入tensorflow


我希望你能理解我的问题和我的问题,否则请发表评论,我会尝试解决它。

TensorFlow最接近的东西是,它是稀疏的等价物。将coo_矩阵输入您的程序可能是最简单的

tf.SparseTensor是COO矩阵的一个轻微推广,其中张量表示为三个稠密tf.tensor对象:

索引:tf.int64值的nxd矩阵,其中每行表示非零值的坐标。N是非零的个数,D是矩阵的等价稠密张量2的秩。 值:一个长度为N的值向量,其中元素i是其坐标在索引行i上给出的元素的值。 稠密_形状:tf.int64的长度D向量,表示等效稠密张量的形状。 例如,您可以使用以下代码,该代码用于定义可以馈送的tf.SparseTensor,以及表示馈送的实际值的a:

sparse_input = tf.sparse_placeholder(dtype=tf.float32, shape=[100, 100])
# ...
train_op = ...

coo_matrix = scipy.sparse.coo_matrix(...)

# Wrap `coo_matrix` in the `tf.SparseTensorValue` form that TensorFlow expects.
# SciPy stores the row and column coordinates as separate vectors, so we must 
# stack and transpose them to make an indices matrix of the appropriate shape.
tf_coo_matrix = tf.SparseTensorValue(
    indices=np.array([coo_matrix.rows, coo_matrix.cols]).T,
    values=coo_matrix.data,
    dense_shape=coo_matrix.shape)
将coo_矩阵转换为tf.sparsetenservalue后,可以直接使用tf.sparsetenservalue为sparse_输入输入:

sess.run(train_op, feed_dict={sparse_input: tf_coo_matrix})

TensorFlow最接近的东西是,它是的稀疏等价物。将coo_矩阵输入您的程序可能是最简单的

tf.SparseTensor是COO矩阵的一个轻微推广,其中张量表示为三个稠密tf.tensor对象:

索引:tf.int64值的nxd矩阵,其中每行表示非零值的坐标。N是非零的个数,D是矩阵的等价稠密张量2的秩。 值:一个长度为N的值向量,其中元素i是其坐标在索引行i上给出的元素的值。 稠密_形状:tf.int64的长度D向量,表示等效稠密张量的形状。 例如,您可以使用以下代码,该代码用于定义可以馈送的tf.SparseTensor,以及表示馈送的实际值的a:

sparse_input = tf.sparse_placeholder(dtype=tf.float32, shape=[100, 100])
# ...
train_op = ...

coo_matrix = scipy.sparse.coo_matrix(...)

# Wrap `coo_matrix` in the `tf.SparseTensorValue` form that TensorFlow expects.
# SciPy stores the row and column coordinates as separate vectors, so we must 
# stack and transpose them to make an indices matrix of the appropriate shape.
tf_coo_matrix = tf.SparseTensorValue(
    indices=np.array([coo_matrix.rows, coo_matrix.cols]).T,
    values=coo_matrix.data,
    dense_shape=coo_matrix.shape)
将coo_矩阵转换为tf.sparsetenservalue后,可以直接使用tf.sparsetenservalue为sparse_输入输入:

sess.run(train_op, feed_dict={sparse_input: tf_coo_matrix})

谢谢,这正是我想要的。但是为什么要做sparse\u input=tf.sparse\u placeholderdtype=tf.float32,shape=[100100]这只是创建tf.SparseTensor供您输入的一种示例方法。您不必使用特定的数据类型或形状,您可以为任何tf.SparseTensor提供构建的tf.sparsetenservalue,只要它具有兼容的数据类型和形状。感谢您的快速响应。mry,您似乎对SparseTensor很了解。当索引不符合顺序时,为什么会出现错误?我不想订购我得到的所有索引,所以我希望你能帮助我。链接到Stackoverflow中的新问题我开始谢谢,这是我想要的。但是为什么要做sparse\u input=tf.sparse\u placeholderdtype=tf.float32,shape=[100100]这只是创建tf.SparseTensor供您输入的一种示例方法。您不必使用特定的数据类型或形状,您可以为任何tf.SparseTensor提供构建的tf.sparsetenservalue,只要它具有兼容的数据类型和形状。感谢您的快速响应。mry,您似乎对SparseTensor很了解。当索引不符合顺序时,为什么会出现错误?我不想订购我得到的所有索引,所以我希望你能帮助我。链接到我开始的Stackoverflow中的新问题