1

我正在 TensorFlow 中进行矩阵分解,我想使用 Spicy.sparse 中的 coo_matrix,因为它使用的内存更少,并且可以轻松地将我的所有数据放入我的矩阵中以进行训练数据。

是否可以使用 coo_matrix 初始化 tensorflow 中的变量?

或者我是否必须创建一个会话并使用 sess.run() 和 feed_dict 将我输入的数据输入到 tensorflow 中。

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

4

1 回答 1

11

TensorFlow 最接近的scipy.sparse.coo_matrixtf.SparseTensor,它是tf.Tensor. 将 acoo_matrix输入到您的程序中可能是最容易的。

Atf.SparseTensor是 COO 矩阵的一个小泛化,其中张量表示为三个密集tf.Tensor对象:

  • indices:一个Nx值D矩阵,tf.int64其中每一行代表一个非零值的坐标。N是非零的数量,并且D是等效密集张量的秩(在矩阵的情况下为 2)。
  • values:值的长度N向量,其中 elementi是其坐标在 的行上给出的元素的iindices
  • dense_shape: 的长度D向量tf.int64,表示等效密集张量的形状。

例如,您可以使用以下代码,该代码tf.sparse_placeholder()用于定义tf.SparseTensor您可以输入的 a 和tf.SparseTensorValue表示输入的实际值的 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_matrixatf.SparseTensorValue后,您可以直接使用:sparse_inputtf.SparseTensorValue

sess.run(train_op, feed_dict={sparse_input: tf_coo_matrix})
于 2017-03-02T18:01:34.537 回答