Tensorflow: tf.matmul()์€ a_is_sparse๊ฐ€ ์„ค์ •๋œ ๊ฒฝ์šฐ์—๋„ ํ–‰๋ ฌ์ด ํฌ์†Œ์ธ ๊ฒฝ์šฐ ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค. ๋น„๋ฐ€ ์˜ค๋ฅ˜.

์— ๋งŒ๋“  2016๋…„ 07์›” 09์ผ  ยท  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
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)})

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

a_is_sparse ๋ฐ b_is_sparse ํ”Œ๋ž˜๊ทธ๋Š” ํ”ผ์—ฐ์‚ฐ์ž๊ฐ€ SparseTensor s์ž„์„ ๋‚˜ํƒ€๋‚ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋Œ€์‹  ๋‘ ๊ฐœ์˜ ์กฐ๋ฐ€ํ•œ Tensor ํ”ผ์—ฐ์‚ฐ์ž์— ๋Œ€ํ•ด ๋ณด๋‹ค ํšจ์œจ์ ์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ˜ธ์ถœํ•˜๊ธฐ ์œ„ํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ํžŒํŠธ์ž…๋‹ˆ๋‹ค.

SparseTensor์™€ Dense Tensor๋ฅผ ํ†ตํ•ฉํ•˜๋ ค๋ฉด tf.sparse_tensor_dense_matmul() ๋Œ€์‹  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  3 ๋Œ“๊ธ€

@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 ํ”Œ๋ž˜๊ทธ๊ฐ€ ๋ฌด์—‡์„ ํ•˜๋Š”์ง€๋Š” ๋งค์šฐ ๋ถˆ๋ถ„๋ช…ํ•ฉ๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰