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")
ํ์ผ "/usr/local/lib/python2.7/site-packages/tensorflow/python/framework/ops.py", 620ํ, convert_to_tensor
ret = conversion_func(๊ฐ, dtype=dtype, ์ด๋ฆ=์ด๋ฆ, as_ref=as_ref)
_constant_tensor_conversion_function์ ํ์ผ "/usr/local/lib/python2.7/site-packages/tensorflow/python/ops/constant_op.py", 179ํ
๋ฐํ ์์(v, dtype=dtype, ์ด๋ฆ=์ด๋ฆ)
ํ์ผ "/usr/local/lib/python2.7/site-packages/tensorflow/python/ops/constant_op.py", ์ค 162, ์ผ์ ํ๊ฒ
tensor_util.make_tensor_proto(๊ฐ, dtype=dtype, ๋ชจ์=๋ชจ์))
make_tensor_proto์์ ํ์ผ "/usr/local/lib/python2.7/site-packages/tensorflow/python/framework/tensor_util.py", ๋ผ์ธ 421
tensor_proto.string_val.extend([proto_values์ x์ ๋ํ compat.as_bytes(x)])
ํ์ผ "/usr/local/lib/python2.7/site-packages/tensorflow/python/util/compat.py", 44ํ, as_bytes
raise TypeError('์์ ๋ฐ์ด๋๋ฆฌ ๋๋ ์ ๋์ฝ๋ ๋ฌธ์์ด, %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
s์์ ๋ํ๋ด์ง ์์ต๋๋ค. ๋์ ๋ ๊ฐ์ ์กฐ๋ฐํ Tensor
ํผ์ฐ์ฐ์์ ๋ํด ๋ณด๋ค ํจ์จ์ ์ธ ์๊ณ ๋ฆฌ์ฆ์ ํธ์ถํ๊ธฐ ์ํ ์๊ณ ๋ฆฌ์ฆ ํํธ์
๋๋ค.
SparseTensor์ Dense Tensor๋ฅผ ํตํฉํ๋ ค๋ฉด tf.sparse_tensor_dense_matmul()
๋์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
a_is_sparse ๋ฐ b_is_sparse ํ๋๊ทธ๋ ํผ์ฐ์ฐ์๊ฐ SparseTensor์์ ๋ํ๋ด์ง ์์ต๋๋ค. ๋์ ๋ ๊ฐ์ ์กฐ๋ฐํ Tensor ํผ์ฐ์ฐ์์์ ๋ณด๋ค ํจ์จ์ ์ธ ์๊ณ ๋ฆฌ์ฆ์ ํธ์ถํ๊ธฐ ์ํ ์๊ณ ๋ฆฌ์ฆ ํํธ์ ๋๋ค.
์ด๊ฒ์ matmut ๋ฌธ์ ์ ์ผ๋ถ์ฌ์ผ ํฉ๋๋ค. a_is_sparse
ํ๋๊ทธ๊ฐ ๋ฌด์์ ํ๋์ง๋ ๋งค์ฐ ๋ถ๋ถ๋ช
ํฉ๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
a_is_sparse
๋ฐb_is_sparse
ํ๋๊ทธ๋ ํผ์ฐ์ฐ์๊ฐSparseTensor
s์์ ๋ํ๋ด์ง ์์ต๋๋ค. ๋์ ๋ ๊ฐ์ ์กฐ๋ฐํTensor
ํผ์ฐ์ฐ์์ ๋ํด ๋ณด๋ค ํจ์จ์ ์ธ ์๊ณ ๋ฆฌ์ฆ์ ํธ์ถํ๊ธฐ ์ํ ์๊ณ ๋ฆฌ์ฆ ํํธ์ ๋๋ค.SparseTensor์ Dense Tensor๋ฅผ ํตํฉํ๋ ค๋ฉด
tf.sparse_tensor_dense_matmul()
๋์ ์ฌ์ฉํ ์ ์์ต๋๋ค.