tf.sparse.bincount
Подсчёт числа вхождений целого значения в тензоре.
tf.sparse.bincount(
values, weights=None, axis=0, minlength=None, maxlength=None,
binary_output=False, name=None
)
Этот оператор принимает N-мерный Tensor, RaggedTensor, или SparseTensor, и возвращает N-мерный int64 SparseTensor, где элемент [i0...i[axis], j] содержит количество раз, которое значение j появляется в срезе [i0...i[axis], :] входного тензора. В настоящее время поддерживаются только N=0 и N=-1.
| Аргументы | |
|---|---|
values | Тензор, RaggedTensor или SparseTensor, значения которых необходимо подсчитать. Эти тензоры должны иметь ранг 2, если axis=-1. |
weights | Если не равно None, должно иметь ту же форму, что и arr. Для каждого значения в value, ячейка будет увеличиваться на соответствующее значение веса вместо 1. |
axis | Ось для срезки. Оси ниже и включая axis будут сглажены перед подсчётом. В настоящее время поддерживаются только 0, и -1. Если None, все оси будут сглажены (то же, что передача 0). |
minlength | Если задано, гарантирует, что вывод имеет длину не менее minlength, заполняя нулями в конце, если необходимо. |
maxlength | Если задано, пропускает значения в values, которые равны или больше maxlength, гарантируя, что вывод имеет максимальную длину maxlength. |
binary_output | Если True, этот оператор выведет 1 вместо количества вхождений токена (эквивалентно one_hot + reduce_any вместо one_hot + reduce_add). По умолчанию False. |
name | Имя этого оператора. |
| Возвращаемое значение | |
|---|---|
SparseTensor с output.shape = values.shape[:axis] + [N], где N это
|
Примеры:
Подсчёт каждого элемента в отдельных партиях
Этот пример принимает входной параметр (который может быть тензором, RaggedTensor или SparseTensor) и возвращает SparseTensor, где значение (i,j) равно количеству раз, которое значение j появляется в партии i.
data = np.array([[10, 20, 30, 20], [11, 101, 11, 10001]], dtype=np.int64) output = tf.sparse.bincount(data, axis=-1) print(output) SparseTensor(indices=tf.Tensor( [[ 0 10] [ 0 20] [ 0 30] [ 1 11] [ 1 101] [ 1 10001]], shape=(6, 2), dtype=int64), values=tf.Tensor([1 2 1 2 1 1], shape=(6,), dtype=int64), dense_shape=tf.Tensor([ 2 10002], shape=(2,), dtype=int64))
Подсчёт с заданной формой вывода
Этот пример принимает входной параметр (который может быть тензором, RaggedTensor или SparseTensor) и возвращает SparseTensor, где значение (i,j) равно количеству раз, которое значение j появляется в партии i. Однако все значения j, превышающие 'maxlength', игнорируются. Форма dense_shape выходного разрежённого тензора устанавливается в 'minlength'. Обратите внимание, что, хотя входной параметр идентичен примеру выше, значение '10001' в элементе партии 2 пропускается, а форма dense_shape устанавливается в [2, 500] вместо [2,10002] или [2, 102].
minlength = maxlength = 500 data = np.array([[10, 20, 30, 20], [11, 101, 11, 10001]], dtype=np.int64) output = tf.sparse.bincount( data, axis=-1, minlength=minlength, maxlength=maxlength) print(output) SparseTensor(indices=tf.Tensor( [[ 0 10] [ 0 20] [ 0 30] [ 1 11] [ 1 101]], shape=(5, 2), dtype=int64), values=tf.Tensor([1 2 1 2 1], shape=(5,), dtype=int64), dense_shape=tf.Tensor([ 2 500], shape=(2,), dtype=int64))
Двоичный подсчёт
Этот пример принимает входной параметр (который может быть тензором, RaggedTensor или SparseTensor) и возвращает SparseTensor, где (i,j) равно 1, если значение j появляется в партии i хотя бы один раз, и 0 в противном случае. Обратите внимание, что, даже если некоторые значения (например, 20 в партии 1 и 11 в партии 2) появляются более одного раза, тензор 'values' содержит только единицы.
data = np.array([[10, 20, 30, 20], [11, 101, 11, 10001]], dtype=np.int64) output = tf.sparse.bincount(data, binary_output=True, axis=-1) print(output) SparseTensor(indices=tf.Tensor( [[ 0 10] [ 0 20] [ 0 30] [ 1 11] [ 1 101] [ 1 10001]], shape=(6, 2), dtype=int64), values=tf.Tensor([1 1 1 1 1 1], shape=(6,), dtype=int64), dense_shape=tf.Tensor([ 2 10002], shape=(2,), dtype=int64))
Взвешенный подсчёт
Этот пример принимает два входных параметра — тензор значений и тензор весов. Эти тензоры должны иметь одинаковую форму и те же разбиения строк или индексы в случае RaggedTensor или SparseTensor. При выполнении взвешенного подсчёта оператор выведет SparseTensor, где значение (i, j) равно сумме значений в тензоре весов в партии i в тех местах, где тензор значений имеет значение j. В этом случае тип данных вывода совпадает с типом данных тензора весов.
data = np.array([[10, 20, 30, 20], [11, 101, 11, 10001]], dtype=np.int64) weights = [[2, 0.25, 15, 0.5], [2, 17, 3, 0.9]] output = tf.sparse.bincount(data, weights=weights, axis=-1) print(output) SparseTensor(indices=tf.Tensor( [[ 0 10] [ 0 20] [ 0 30] [ 1 11] [ 1 101] [ 1 10001]], shape=(6, 2), dtype=int64), values=tf.Tensor([2. 0.75 15. 5. 17. 0.9], shape=(6,), dtype=float32), dense_shape=tf.Tensor([ 2 10002], shape=(2,), dtype=int64))
© 2020 The TensorFlow Authors. All rights reserved.
Licensed under the Creative Commons Attribution License 3.0.
Code samples licensed under the Apache 2.0 License.
https://www.tensorflow.org/versions/r2.4/api_docs/python/tf/sparse/bincount