Tensorflow: tf.matmul() gagal ketika matriks jarang, bahkan jika a_is_sparse diatur. Kesalahan samar.

Dibuat pada 9 Jul 2016  ·  3Komentar  ·  Sumber: tensorflow/tensorflow

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)})

Komentar yang paling membantu

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.

Semua 3 komentar

@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 .

Apakah halaman ini membantu?
0 / 5 - 0 peringkat