Используйте coo_matrix в TensorFlow
Я делаю матричную факторизацию в TensorFlow, я хочу использовать coo_matrix из Spicy.sparse, потому что он использует меньше памяти и позволяет легко помещать все мои данные в мою матрицу для обучения данных.
Можно ли использовать coo_matrix для инициализации переменной в tenorflow?
Или я должен создать сеанс и передать полученные данные в тензорный поток, используя sess.run() с feed_dict.
Я надеюсь, что вы понимаете мой вопрос и мою проблему, иначе прокомментируйте, и я постараюсь это исправить.
1 ответ
Ближайшая вещь, которую TensorFlow должен scipy.sparse.coo_matrix
является tf.SparseTensor
, что является редким эквивалентом tf.Tensor
, Вероятно, будет проще всего накормить coo_matrix
в вашу программу.
tf.SparseTensor
является небольшим обобщением матриц COO, где тензор представлен в виде трех плотных tf.Tensor
объекты:
indices
: AnN
ИксD
матрицаtf.int64
значения, в которых каждая строка представляет координаты ненулевого значения.N
число ненулевых, иD
является рангом эквивалентного плотного тензора (2 в случае матрицы).values
: Длина-N
вектор значений, где элементi
это значение элемента, координаты которого приведены в строкеi
изindices
,dense_shape
: Длина-D
векторtf.int64
, представляющий форму эквивалентного плотного тензора.
Например, вы можете использовать следующий код, который использует tf.sparse_placeholder()
определить tf.SparseTensor
что вы можете накормить, и tf.SparseTensorValue
что представляет собой фактическое значение, которое подается:
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
к tf.SparseTensorValue
можно кормить sparse_input
с tf.SparseTensorValue
непосредственно:
sess.run(train_op, feed_dict={sparse_input: tf_coo_matrix})