Die nächste Sache, die TensorFlow hat, ist scipy.sparse.coo_matrix
ist tf.SparseTensor
, die das spärliche Äquivalent von tf.Tensor
ist. Es wird wahrscheinlich am einfachsten sein, eine coo_matrix
in Ihr Programm zu füttern.
A tf.SparseTensor
ist eine leichte Verallgemeinerung des COO-Matrices, wobei die Tensor als drei dichte tf.Tensor
Objekte dargestellt wird:
indices
: Eine N
x D
Matrix von tf.int64
Werten bei der jede Zeile, die Koordinaten eines darstellt Wert ungleich Null. N
ist die Anzahl der Nicht-Nullen und D
ist der Rang des äquivalenten dichten Tensors (2 im Falle einer Matrix).
values
: A längen- N
Vektor von Werten, wobei der Wert i
Element des Elements, dessen Koordinaten auf der Reihe von indices
i
gegeben sind.
dense_shape
: Eine Länge Vektor von tf.int64
, die Form des äquivalenten dichten Tensors darstellt.
Zum Beispiel könnten Sie den folgenden Code verwenden, die tf.sparse_placeholder()
eine tf.SparseTensor
zu definieren verwendet, die man füttern kann, und einen tf.SparseTensorValue
, der den Istwert darstellt zugeführt wird:
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)
Sobald Sie konvertiert haben Ihre coo_matrix
zu einem tf.SparseTensorValue
, können Sie sparse_input
mit dem tf.SparseTensorValue
direkt füttern:
sess.run(train_op, feed_dict={sparse_input: tf_coo_matrix})
Danke, th Das war was ich wollte. Aber warum tun Sie sparse_input = tf.sparse_placeholder (dtype = tf.float32, shape = [100, 100]) –
Es ist nur ein Beispiel für die Erstellung eines 'tf.SparseTensor' für Sie zu füttern. Sie brauchen nicht diesen bestimmten 'dtype' oder' shape' zu verwenden, und Sie können jeden 'tf.SparseTensor' mit Ihrem konstruierten' tf.SparseTensorValue' füttern (solange er einen kompatiblen 'dtype' und' shape' hat)). – mrry
Danke für eine schnelle Antwort. –