Tensorflow назначает разреженный ввод по оси

avatar
Tim
9 августа 2021 в 06:06
40
1
0

У меня есть разреженные данные по одной оси, например

[[0,0,0],
 [1,2,3],
 [0,0,0],
 [0,0,0],
 [4,5,6]]

Для эффективности я хотел бы вводить партии в формате

sparse_axes = [1,4]
sparse_data = [[1,2,3],[4,6,6]]

и в тензорном потоке разрежите эти данные.

Я знаю, что есть функция tf.sparse, но она не работает с осями, что в данном случае неэффективно. Есть ли функция в тензорном потоке, чтобы сделать что-то вроде этого:

> dense_data = tf.zeros((5,3))
> dense_data.assign(sparse_axes, sparse_data) # <--- this is the function I am looking for. 
> dense_data
[[0,0,0],
 [1,2,3],
 [0,0,0],
 [0,0,0],
 [4,5,6]]
Источник

Ответы (1)

avatar
Tim
9 августа 2021 в 06:16
0

Я нашел решение:

> sparse_axes = [1,4]
> sparse_data = [[1.0,2.0,3.0],[4.0,6.0,6.0]]
> dense_data = tf.IndexedSlices(
>     tf.Variable(sparse_data), sparse_axes, dense_shape=(5,3)
> )
> dense_data.dense_shape
[5,3]
> dense_data * tf.ones((5,3))
<tf.Tensor: shape=(5, 3), dtype=float32, numpy=
array([[0.  0.  0.],
       [1.  2.  3.],
       [0.  0.  0.],
       [0.  0.  0.],
       [4.  6.  6.]], dtype=float32)>