tf.matmul(A, B, a_is_sparse=True) gagal pada a = ops.convert_to_tensor(a, name="a") dengan kesalahan samar.
Contoh kode:
import tensorflow as tf
import numpy as np
x = tf.sparse_placeholder(tf.float32)
y = tf.Variable(tf.random_uniform([9, 9], minval=0.0, maxval=1.0, dtype=tf.float32))
with tf.Session() as sess:
sess.run(tf.initialize_all_variables())
indices = np.array([[3, 2], [4, 5]], dtype=np.int64)
values = np.array([1.0, 2.0], dtype=np.float32)
shape = np.array([9, 9], dtype=np.int64)
_ = sess.run(tf.matmul(x, y), feed_dict={
x: tf.SparseTensorValue(indices, values, shape)})
Kesalahan:
baris 12, di
_ = sess.run(tf.matmul(x, y, a_is_sparse=Benar), feed_dict={
File "/usr/local/lib/python2.7/site-packages/tensorflow/python/ops/math_ops.py", baris 1189, di matmul
a = ops.convert_to_tensor(a, nama="a")
File "/usr/local/lib/python2.7/site-packages/tensorflow/python/framework/ops.py", baris 620, di convert_to_tensor
ret = konversi_fungsi(nilai, dtype=dtype, nama=nama, as_ref=as_ref)
File "/usr/local/lib/python2.7/site-packages/tensorflow/python/ops/constant_op.py", baris 179, di _constant_tensor_conversion_function
kembalikan konstanta(v, dtype=dtype, name=name)
File "/usr/local/lib/python2.7/site-packages/tensorflow/python/ops/constant_op.py", baris 162, secara konstan
tensor_util.make_tensor_proto(nilai, dtype=dtype, shape=shape))
File "/usr/local/lib/python2.7/site-packages/tensorflow/python/framework/tensor_util.py", baris 421, di make_tensor_proto
tensor_proto.string_val.extend([compat.as_bytes(x) untuk x dalam nilai_proto])
File "/usr/local/lib/python2.7/site-packages/tensorflow/python/util/compat.py", baris 44, di as_bytes
menaikkan TypeError('String biner atau unicode yang diharapkan, dapatkan %r' % bytes_or_text)
TypeError: String biner atau unicode yang diharapkan, dapatkan
Diperbaiki dengan mengonversi secara eksplisit dari tensor jarang ke tensor padat sebelum perkalian:
import tensorflow as tf
import numpy as np
x = tf.sparse_placeholder(tf.float32)
z = tf.sparse_tensor_to_dense(x)
y = tf.Variable(tf.random_uniform([9, 9], minval=0.0, maxval=1.0, dtype=tf.float32))
with tf.Session() as sess:
sess.run(tf.initialize_all_variables())
indices = np.array([[3, 2], [4, 5]], dtype=np.int64)
values = np.array([1.0, 2.0], dtype=np.float32)
shape = np.array([9, 9], dtype=np.int64)
_ = sess.run(tf.matmul(z, y), feed_dict={
x: tf.SparseTensorValue(indices, values, shape)})
@concretevitamin , Apakah ini diharapkan berfungsi, atau apakah ini batasan tensor jarang yang diketahui.
Bendera a_is_sparse
dan b_is_sparse
tidak menunjukkan bahwa operan adalah SparseTensor
s. Sebaliknya, mereka adalah petunjuk algoritmik untuk menjalankan algoritme yang lebih efisien pada dua operan Tensor
padat.
Untuk menggabungkan SparseTensor dan Tensor yang padat, Anda dapat menggunakan tf.sparse_tensor_dense_matmul()
sebagai gantinya.
Bendera a_is_sparse dan b_is_sparse tidak menunjukkan bahwa operan adalah SparseTensors. Sebaliknya, itu adalah petunjuk algoritmik untuk menjalankan algoritme yang lebih efisien pada dua operan Tensor yang padat.
Ini harus menjadi bagian dari dokumentasi matmut. Sangat tidak jelas apa yang dilakukan flag a_is_sparse
.
Komentar yang paling membantu
Bendera
a_is_sparse
danb_is_sparse
tidak menunjukkan bahwa operan adalahSparseTensor
s. Sebaliknya, mereka adalah petunjuk algoritmik untuk menjalankan algoritme yang lebih efisien pada dua operanTensor
padat.Untuk menggabungkan SparseTensor dan Tensor yang padat, Anda dapat menggunakan
tf.sparse_tensor_dense_matmul()
sebagai gantinya.