Tensorflow: يفشل tf.matmul () عندما تكون المصفوفات متفرقة ، حتى إذا تم تعيين a_is_sparse. خطأ خفي.

تم إنشاؤها على ٩ يوليو ٢٠١٦  ·  3تعليقات  ·  مصدر: tensorflow/tensorflow

فشل 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
أ = ops.convert_to_tensor (أ ، الاسم = "أ")
ملف "/usr/local/lib/python2.7/site-packages/tensorflow/python/framework/ops.py" ، السطر 620 ، في convert_to_tensor
ret = convert_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 ، الاسم = الاسم)
ملف "/usr/local/lib/python2.7/site-packages/tensorflow/python/ops/constant_op.py" ، السطر 162 ، ثابت
tensor_util.make_tensor_proto (القيمة ، النوع = النوع ، الشكل = الشكل))
ملف "/usr/local/lib/python2.7/site-packages/tensorflow/python/framework/tensor_util.py" ، السطر 421 ، في make_tensor_proto
tensor_proto.string_val.extend ([auth.as_bytes (x) for x in proto_values])
ملف "/usr/local/lib/python2.7/site-packages/tensorflow/python/util/compat.py" ، السطر 44 ، في as_bytes
رفع TypeError ('سلسلة ثنائية أو unicode متوقعة ، حصلت على٪ r'٪ bytes_or_text)
TypeError: تم الحصول على سلسلة ثنائية أو unicode متوقعة

تم إصلاحه عن طريق التحويل الصريح من موتر متناثر إلى موتر كثيف قبل الضرب:

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

التعليق الأكثر فائدة

لا تشير العلامات a_is_sparse و b_is_sparse إلى أن المعاملات هي SparseTensor s. بدلاً من ذلك ، فهي تلميحات حسابية لاستدعاء خوارزمية أكثر فاعلية على المعاملين الكثيفين Tensor .

للحصول على SparseTensor و Tensor كثيف ، يمكنك استخدام tf.sparse_tensor_dense_matmul() بدلاً من ذلك.

ال 3 كومينتر

concretevitamin ، هل هذا من المتوقع أن يعمل ، أم أن هذا حد معروف لموترات متفرقة.

لا تشير العلامات a_is_sparse و b_is_sparse إلى أن المعاملات هي SparseTensor s. بدلاً من ذلك ، فهي تلميحات حسابية لاستدعاء خوارزمية أكثر فاعلية على المعاملين الكثيفين Tensor .

للحصول على SparseTensor و Tensor كثيف ، يمكنك استخدام tf.sparse_tensor_dense_matmul() بدلاً من ذلك.

لا تشير العلامات a_is_sparse و b_is_sparse إلى أن المعاملات هي SparseTensors. بدلاً من ذلك ، فهي تلميحات حسابية لاستدعاء خوارزمية أكثر كفاءة على معاملي Tensor الكثيفين.

يجب أن يكون هذا جزءًا من توثيق matmut. من غير الواضح تمامًا ما يفعله العلم a_is_sparse .

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات