tf.sparse.SparseTensor
Представляет разреженный тензор.
tf.sparse.SparseTensor(
indices, values, dense_shape
)
Используется в блокнотах
TensorFlow представляет разреженный тензор в виде трех отдельных плотных тензоров: indices, values и dense_shape. В Python для удобства использования эти три тензора объединяются в класс SparseTensor. Если у вас есть отдельные тензоры indices, values и dense_shape, перед передачей в приведенные ниже операции объедините их в объект SparseTensor.
В частности, разреженный тензор SparseTensor(indices, values, dense_shape) состоит из следующих компонентов, где N и ndims — это соответственно количество значений и количество измерений в SparseTensor:
indices: двумерный тензор int64 формы[N, ndims], задающий индексы элементов разреженного тензора, содержащих ненулевые значения (индексация элементов начинается с нуля). Например,indices=[[1,3], [2,4]]указывает, что ненулевые значения есть у элементов с индексами [1,3] и [2,4].values: одномерный тензор любого типа формы[N], задающий значения каждого элемента вindices. Например, если заданоindices=[[1,3], [2,4]], параметрvalues=[18, 3.6]указывает, что значение элемента [1,3] разреженного тензора равно 18, а значение элемента [2,4] тензора равно 3.6.dense_shape: одномерный тензор int64 формы[ndims], задающий dense_shape разреженного тензора. Принимает список, указывающий количество элементов в каждом измерении. Например,dense_shape=[3,6]задает двумерный тензор 3x6,dense_shape=[2,3,4]задает трехмерный тензор 2x3x4, аdense_shape=[9]задает одномерный тензор из 9 элементов.
Соответствующий плотный тензор удовлетворяет условию:
dense.shape = dense_shape dense[tuple(indices[i])] = values[i]
Согласно принятому соглашению, indices должны быть отсортированы в порядке строк (или, что эквивалентно, в лексикографическом порядке кортежей indices[i]). При создании объектов SparseTensor этот порядок не проверяется, однако большинство операций предполагают, что он соблюден. Если порядок в разреженном тензоре st неверен, исправленную версию можно получить, вызвав tf.sparse.reorder(st).
Пример: разреженный тензор
SparseTensor(indices=[[0, 0], [1, 2]], values=[1, 2], dense_shape=[3, 4])
представляет плотный тензор
[[1, 0, 0, 0] [0, 0, 2, 0] [0, 0, 0, 0]]
| Аргументы | |
|---|---|
indices | Двумерный тензор int64 формы [N, ndims]. |
values | Одномерный тензор любого типа формы [N]. |
dense_shape | Одномерный тензор int64 формы [ndims]. |
| Исключения | |
|---|---|
ValueError | При создании SparseTensor в eager-режиме, если dense_shape не определен или содержит неизвестные элементы (None или -1). |
| Атрибуты | |
|---|---|
dense_shape | Одномерный тензор int64, представляющий форму плотного тензора. |
dtype | DType элементов в этом тензоре. |
graph | Graph, содержащий тензоры индексов, значений и dense_shape. |
indices | Индексы ненулевых значений в представленном плотном тензоре. |
op | Operation, возвращающий values в качестве выходных данных. |
shape | Получить TensorShape, представляющий форму плотного тензора. |
values | Ненулевые значения в представленном плотном тензоре. |
Методы
consumers
consumers()
eval
eval(
feed_dict=None, session=None
)
Вычисляет этот разреженный тензор в Session.
При вызове этого метода выполняются все предшествующие операции, создающие входные данные, необходимые для операции, которая формирует этот тензор.
Примечание: Перед вызовомSparseTensor.eval()граф должен быть запущен в сеансе, а также должен быть доступен сеанс по умолчанию или необходимо явно указатьsession.
| Аргументы | |
|---|---|
feed_dict | Словарь, сопоставляющий объекты Tensor со значениями для подстановки. Описание допустимых значений для подстановки см. в разделе tf.Session.run. |
session | (Необязательно.) Session, используемый для вычисления этого разреженного тензора. Если не задан, используется сеанс по умолчанию. |
| Возвращает | |
|---|---|
Объект SparseTensorValue. |
from_value
@classmethod
from_value(
sparse_tensor_value
)
get_shape
get_shape() -> tf.TensorShape
Получить TensorShape, представляющий форму плотного тензора.
| Возвращает | |
|---|---|
Объект TensorShape. |
set_shape
set_shape(
shape
)
Обновляет TensorShape, представляющий форму плотного тензора.
При eager-выполнении этот метод выполняет проверку формы. В этом примере формы совпадают:
st = tf.SparseTensor( indices=[[0, 0], [1, 2]], values=[1, 2], dense_shape=[3, 4]) st.set_shape([3, 4])
Если передать None в новой форме, для этой оси будет допустимо любое значение:
st.set_shape([3, None])
Если передать несовместимую форму, будет вызвана ошибка.
st.set_shape([1, 4]) Traceback (most recent call last): ValueError: Tensor's shape (3, 4) is not compatible with supplied shape [1, 4]
При выполнении в tf.function или создании модели с помощью tf.keras.Input метод SparseTensor.set_shape объединяет заданную shape с текущей формой этого тензора и задает тензору полученную объединенную форму (подробности см. в разделе tf.TensorShape.merge_with):
st = tf.keras.Input(shape=[None, None, 3], sparse=True) print(st.shape) (None, None, None, 3)
Размерности, заданные как None, не обновляются:
st.set_shape([None, 224, 224, None]) print(st.shape) (None, 224, 224, 3)
Этот метод в первую очередь используется для предоставления дополнительных сведений о форме, которые невозможно вывести только из графа.
| Аргументы | |
|---|---|
shape | TensorShape, представляющий форму этого тензора, TensorShapeProto, список, кортеж или None. |
| Исключения | |
|---|---|
ValueError | Если shape несовместим с текущей формой этого тензора. |
with_values
with_values(
new_values
)
Возвращает копию self, в которой values заменено на new_values.
Этот метод создает новый SparseTensor с теми же ненулевыми indices и той же dense_shape, но с обновленными значениями.
| Аргументы | |
|---|---|
new_values | Значения нового SparseTensor. Форма должна совпадать с формой текущего .values Tensor. Тип может отличаться от типа текущего values. |
| Возвращает | |
|---|---|
SparseTensor с теми же индексами и формой, но с обновленными значениями. |
Пример использования:
st = tf.sparse.from_dense([[1, 0, 2, 0], [3, 0, 0, 4]])
tf.sparse.to_dense(st.with_values([10, 20, 30, 40])) # 4 nonzero values
<tf.Tensor: shape=(2, 4), dtype=int32, numpy=
array([[10, 0, 20, 0],
[30, 0, 0, 40]], dtype=int32)>__div__
__div__(
y
)
Выполняет поэлементное деление SparseTensor на плотный тензор.
Ограничение: эта операция транслирует плотную часть только до размера разреженной части, но не наоборот.
| Аргументы | |
|---|---|
sp_indices | Tensor типа int64. Двумерная матрица N x R с индексами непустых значений SparseTensor; порядок индексов может быть неканоническим. |
sp_values | Tensor. Должен иметь один из следующих типов: float32, float64, int32, uint8, int16, int8, complex64, int64, qint8, quint8, qint32, bfloat16, qint16, quint16, uint16, complex128, half, uint32, uint64. Одномерный тензор N непустых значений, соответствующих sp_indices. |
sp_shape | Tensor типа int64. Одномерный тензор, задающий форму входного SparseTensor. |
dense | Tensor. Должен иметь тот же тип, что и sp_values. Тензор R-D — плотный операнд. |
name | Имя операции (необязательно). |
| Возвращает | |
|---|---|
Tensor. Имеет тот же тип, что и sp_values. |
__mul__
__mul__(
y
)
Выполняет поэлементное умножение SparseTensor на плотный тензор.
В позициях, соответствующих неявно нулевым элементам разреженного тензора, результат будет равен нулю (то есть такие элементы не будут занимать место в памяти) независимо от содержимого плотного тензора (даже если оно равно +/-INF и INF*0 == NaN).
Ограничение: эта операция транслирует плотную часть только до размера разреженной части, но не наоборот.
| Аргументы | |
|---|---|
sp_indices | Tensor типа int64. Двумерная матрица N x R с индексами непустых значений SparseTensor; порядок индексов может быть неканоническим. |
sp_values | Tensor. Должен иметь один из следующих типов: float32, float64, int32, uint8, int16, int8, complex64, int64, qint8, quint8, qint32, bfloat16, qint16, quint16, uint16, complex128, half, uint32, uint64. Одномерный тензор N непустых значений, соответствующих sp_indices. |
sp_shape | Tensor типа int64. Одномерный тензор, задающий форму входного SparseTensor. |
dense | Tensor. Должен иметь тот же тип, что и sp_values. Тензор R-D — плотный операнд. |
name | Имя операции (необязательно). |
| Возвращает | |
|---|---|
Tensor. Имеет тот же тип, что и sp_values. |
__truediv__
__truediv__(
y
)
Вспомогательная внутренняя функция для 'sp_t / dense_t'.
© 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/SparseTensor