Spec-Zone.ru › TensorFlow

tf.sparse.bincount

Подсчитывает, сколько раз целочисленное значение встречается в тензоре.

Просмотреть псевдонимы

Псевдонимы совместимости для миграции

Подробности см. в руководстве по миграции.

tf.compat.v1.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, в котором элемент [i0...i[axis], j] содержит число вхождений значения j в срезе [i0...i[axis], :] входного тензора. В настоящее время поддерживаются только N=0 и N=-1.

Аргументы
values Тензор, RaggedTensor или SparseTensor, значения которого нужно подсчитать. Если axis=-1, ранг этих тензоров должен быть равен 2.
weights Если значение не None, оно должно иметь ту же форму, что и arr. Если arr — это SparseTensor, то weights должен быть SparseTensor с той же плотной формой и теми же индексами, что и 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 — это
  • maxlength (если задано);
  • minlength (если задано и minlength > reduce_max(values));
  • 0 (если values пусто);
  • reduce_max(values) + 1 в остальных случаях.
Вызывает исключение
InvalidArgumentError, если в качестве входных данных переданы отрицательные значения.

Примеры:

Подсчёт элементов по бинам в отдельных пакетах

В этом примере на вход подаётся объект (это может быть Tensor, RaggedTensor или SparseTensor), а возвращается SparseTensor, в котором значение (i,j) — это число вхождений значения j в пакете i.

data = np.array([[10, 20, 30, 20], [11, 101, 11, 10001]], dtype=np.int64)
tf.sparse.bincount(data, axis=-1)
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))

В этом примере показан разреженный тензор на входе. Отсутствующие нули не учитываются.

data = tf.sparse.SparseTensor(
    indices=[[0, 3], [0, 7], [0, 8], [0, 11],
             [1, 9], [1, 11], [1, 18], [1, 27]],
    values=[10, 20, 30, 20, 11, 101, 11, 10001],
    dense_shape=[2, 30])
tf.sparse.bincount(data, axis=-1)
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=int32),
 dense_shape=tf.Tensor([    2 10002], shape=(2,), dtype=int64))

Подсчёт по бинам с заданной формой выходных данных

В этом примере на вход подаётся объект (это может быть Tensor, RaggedTensor или SparseTensor), а возвращается SparseTensor, в котором значение (i,j) — это число вхождений значения j в пакете i. Однако все значения j, превышающие 'maxlength', игнорируются. Для dense_shape выходного разреженного тензора устанавливается значение 'minlength'. Обратите внимание: несмотря на то, что входные данные совпадают с данными из предыдущего примера, значение '10001' в элементе пакета 2 отбрасывается, а плотная форма равна [2, 500], а не [2,10002] или [2, 102].

minlength = maxlength = 500
data = np.array([[10, 20, 30, 20], [11, 101, 11, 10001]], dtype=np.int64)
tf.sparse.bincount(
   data, axis=-1, minlength=minlength, maxlength=maxlength)
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))

Бинарный подсчёт по бинам

В этом примере на вход подаётся объект (это может быть Tensor, 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)
tf.sparse.bincount(data, binary_output=True, axis=-1)
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]]
tf.sparse.bincount(data, weights=weights, axis=-1)
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))

© 2022 The TensorFlow Authors. All rights reserved.
Licensed under the Creative Commons Attribution License 4.0.
Code samples licensed under the Apache 2.0 License.
https://www.tensorflow.org/api_docs/python/tf/sparse/bincount

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API