我正在 TensorFlow 中进行矩阵分解,我想使用 Spicy.sparse 中的 coo_matrix,因为它使用的内存更少,并且可以轻松地将我的所有数据放入我的矩阵中以进行训练数据。
是否可以使用 coo_matrix 初始化 tensorflow 中的变量?
或者我是否必须创建一个会话并使用 sess.run() 和 feed_dict 将我输入的数据输入到 tensorflow 中。
我希望您理解我的问题和我的问题,否则发表评论,我会尝试解决它。
我正在 TensorFlow 中进行矩阵分解,我想使用 Spicy.sparse 中的 coo_matrix,因为它使用的内存更少,并且可以轻松地将我的所有数据放入我的矩阵中以进行训练数据。
是否可以使用 coo_matrix 初始化 tensorflow 中的变量?
或者我是否必须创建一个会话并使用 sess.run() 和 feed_dict 将我输入的数据输入到 tensorflow 中。
我希望您理解我的问题和我的问题,否则发表评论,我会尝试解决它。
TensorFlow 最接近的scipy.sparse.coo_matrix
是tf.SparseTensor
,它是tf.Tensor
. 将 acoo_matrix
输入到您的程序中可能是最容易的。
Atf.SparseTensor
是 COO 矩阵的一个小泛化,其中张量表示为三个密集tf.Tensor
对象:
indices
:一个N
x值D
矩阵,tf.int64
其中每一行代表一个非零值的坐标。N
是非零的数量,并且D
是等效密集张量的秩(在矩阵的情况下为 2)。values
:值的长度N
向量,其中 elementi
是其坐标在 的行上给出的元素的i
值indices
。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_matrix
atf.SparseTensorValue
后,您可以直接使用:sparse_input
tf.SparseTensorValue
sess.run(train_op, feed_dict={sparse_input: tf_coo_matrix})