tf.compat.v1.nn.embedding_lookup_sparse
Выполняет поиск эмбеддингов для заданных идентификаторов и весов из списка тензоров.
tf.compat.v1.nn.embedding_lookup_sparse(
params,
sp_ids,
sp_weights,
partition_strategy='mod',
name=None,
combiner=None,
max_norm=None,
allow_fast_lookup=False
)
Эта операция предполагает, что для каждой строки в плотном тензоре, представленном sp_ids, имеется как минимум один идентификатор (то есть нет строк с пустыми признаками), а все индексы sp_ids расположены в каноническом построчном порядке.
sp_ids и sp_weights (если не None) являются SparseTensors или RaggedTensors ранга 2. Для SpareTensors с ненулевыми элементами, выровненными по левому краю и представимыми как RaggedTensors, использование RaggedTensors может обеспечить более высокую производительность.
Кроме того, предполагается, что все значения идентификаторов находятся в диапазоне [0, p0), где p0 — сумма размера params по измерению 0.
| Аргументы | |
|---|---|
params | Один тензор, представляющий полный тензор эмбеддингов, или список тензоров одинаковой формы, за исключением первого измерения, представляющих разделённые на шарды тензоры эмбеддингов. Также может быть PartitionedVariable, созданным путём разделения по измерению 0. Размер каждого элемента должен соответствовать заданному partition_strategy. |
sp_ids | N x M SparseTensor идентификаторов типа int64, где N обычно соответствует размеру пакета, а M может быть произвольным, или RaggedTensor ранга 2. |
sparse_weights | SparseTensor или RaggedTensor того же типа и формы, что и sparse_ids, содержащий веса типа float / double, соответствующие sparse_ids, или None, если предполагается, что все веса равны 1.0. |
partition_strategy | Строка, задающая стратегию разделения на шарды; имеет значение, если len(params) > 1. В настоящее время поддерживаются "div" и "mod". Значение по умолчанию — "mod". Подробнее см. tf.nn.embedding_lookup. |
name | Необязательное имя операции. |
combiner | Строка, задающая операцию редукции. В настоящее время поддерживаются "mean", "sqrtn" и "sum". "sum" вычисляет взвешенную сумму результатов эмбеддингов для каждой строки. "mean" — это взвешенная сумма, делённая на общий вес. "sqrtn" — это взвешенная сумма, делённая на квадратный корень из суммы квадратов весов. Значение по умолчанию — mean. |
max_norm | Если значение не равно None, каждый эмбеддинг перед объединением ограничивается, если его l2-норма превышает это значение. |
allow_fast_lookup | Необязательное логическое значение, указывающее, разрешено ли упрощённое получение эмбеддингов, когда params — это один тензор, а max_norm — None. Установка этого флага в True во время обучения может привести к использованию плотных градиентов с увеличенным потреблением памяти. |
| Возвращает | |
|---|---|
Плотный тензор, представляющий объединённые эмбеддинги для разреженных идентификаторов. Для каждой строки в плотном тензоре, представленном sp_ids, операция находит эмбеддинги для всех идентификаторов в этой строке, умножает их на соответствующие веса и объединяет их указанным способом. Другими словами, если
и
то
Например, если params — это матрица размером 10x20, а sp_ids / sp_weights имеют вид [0, 0]: id 1, weight 2.0 [0, 1]: id 3, weight 0.5 [1, 0]: id 0, weight 1.0 [2, 3]: id 1, weight 3.0 при output[0, :] = (params[1, :] * 2.0 + params[3, :] * 0.5) / (2.0 + 0.5) output[1, :] = (params[0, :] * 1.0) / 1.0 output[2, :] = (params[1, :] * 3.0) / 3.0 |
| Вызывает исключения | |
|---|---|
TypeError | Если sp_ids не является SparseTensor или RaggedTensor либо если sp_weights не является None и не имеет тот же тип, что и sp_ids. |
ValueError | Если combiner не входит в {"mean", "sqrtn", "sum"}. |
© 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/compat/v1/nn/embedding_lookup_sparse