Нахождение p% наименьших значений тензора - TensorFlow 2.0 - PullRequest
1 голос
/ 20 февраля 2020

Я использую Python 3.7 и TensorFlow 2.0, и у меня возникла следующая проблема. В пределах данного тензора любого измерения, если я хочу найти p% наименьших весов (где p может быть пользовательским вводом), как мне это сделать?

Пример:

x = tf.random.normal(shape=(3, 2, 2))                                   

x.numpy()                                                               
Out[8]: 
array([[[-0.30938825,  0.40093166],
        [ 1.5417175 , -0.9551434 ]],

       [[-0.7977963 , -2.0784302 ],
        [-1.5039488 , -0.75159657]],

       [[ 1.7954558 ,  0.19909047],
        [-0.2359499 , -2.4791834 ]]], dtype=float32)

Как найти тензор 'x' (формы: (3, 2, 2)), скажем, p = 30% от наименьшего веса? Затем я планирую удалить p% наименьших весов, установив их на ноль.

Спасибо!

1 Ответ

3 голосов
/ 20 февраля 2020

Использование Вероятность TensorFlow stats.percentile:

In [5]: import tensorflow_probability as tfp

In [6]: p30 = tfp.stats.percentile(x, q=30.)

In [7]: p30
Out[7]: <tf.Tensor: id=1159, shape=(), dtype=float32, numpy=-0.9551434>

In [8]: tf.where(x <= p30, 0, x)
Out[8]:
<tf.Tensor: id=1108, shape=(3, 2, 2), dtype=float32, numpy=
array([[[-0.30938825,  0.40093166],
        [ 1.5417175 ,  0.        ]],

       [[-0.7977963 ,  0.        ],
        [ 0.        , -0.75159657]],

       [[ 1.7954558 ,  0.19909047],
        [-0.2359499 ,  0.        ]]], dtype=float32)>

Минимальные требования:

tensorflow==2.0
tensorflow-probability==0.7
...