tf.matmul(A、B、a_is_sparse = True)は、a = ops.convert_to_tensor(a、name = "a")で失敗し、不可解なエラーが発生します。
コード例:
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)})
エラー:
12行目
_ = sess.run(tf.matmul(x、y、a_is_sparse = True)、feed_dict = {
ファイル "/usr/local/lib/python2.7/site-packages/tensorflow/python/ops/math_ops.py"、1189行目、matmul
a = ops.convert_to_tensor(a、name = "a")
convert_to_tensorのファイル "/usr/local/lib/python2.7/site-packages/tensorflow/python/framework/ops.py"、行620
ret = Conversion_func(value、dtype = dtype、name = name、as_ref = as_ref)
ファイル "/usr/local/lib/python2.7/site-packages/tensorflow/python/ops/constant_op.py"、179行目、_constant_tensor_conversion_function
戻り定数(v、dtype = dtype、name = name)
ファイル "/usr/local/lib/python2.7/site-packages/tensorflow/python/ops/constant_op.py"、行162、定数
tensor_util.make_tensor_proto(value、dtype = dtype、shape = shape))
make_tensor_protoのファイル "/usr/local/lib/python2.7/site-packages/tensorflow/python/framework/tensor_util.py"、行421
tensor_proto.string_val.extend([compat.as_bytes(x)for x in proto_values])
ファイル "/usr/local/lib/python2.7/site-packages/tensorflow/python/util/compat.py"、44行目、as_bytes
タイプエラーを発生させます( '予期されるバイナリまたはユニコード文字列、%rを取得しました'%bytes_or_text)
TypeError:予期されるバイナリまたはユニコード文字列、取得
乗算の前にスパーステンソルからデンソルテンソルに明示的に変換することで修正されました。
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 、これは機能することが期待されていますか、それともスパーステンソルの既知の制限ですか。
フラグa_is_sparse
およびb_is_sparse
は、オペランドがSparseTensor
ことを示していません。 代わりに、これらは2つの密なTensor
オペランドでより効率的なアルゴリズムを呼び出すためのアルゴリズムのヒントです。
SparseTensorとDenseTensorを組み合わせるには、代わりにtf.sparse_tensor_dense_matmul()
使用できます。
フラグa_is_sparseおよびb_is_sparseは、オペランドがSparseTensorsであることを示していません。 代わりに、これらは2つの密なTensorオペランドでより効率的なアルゴリズムを呼び出すためのアルゴリズムのヒントです。
これは、matmutのドキュメントの一部である必要があります。 フラグa_is_sparse
が何をするのかは非常に不明確です。
最も参考になるコメント
フラグ
a_is_sparse
およびb_is_sparse
は、オペランドがSparseTensor
ことを示していません。 代わりに、これらは2つの密なTensor
オペランドでより効率的なアルゴリズムを呼び出すためのアルゴリズムのヒントです。SparseTensorとDenseTensorを組み合わせるには、代わりに
tf.sparse_tensor_dense_matmul()
使用できます。