Перевод Tensorflow Python API (sparse_ops)

TensorFlow Python алгоритм API

Добавить Автора
WeChat и QQ: 862251340
Публичный аккаунт WeChat: coderpai
мой блог:пожалуйста, нажмите здесь

Сейчас планируется изучить Python API в tensorflow, что облегчит обучение в будущем.
Оригинальная ссылка

В этой главе представлен API для разреженных тензоров.

разреженное тензорное представление

Для многомерных разреженных данных TensorFlow обеспечивает разреженное тензорное представление. Используются значения в разреженном тензореIndexedSlicesИндекс используется для представления данных, которые могут представлять данные более эффективно.

class tf.SparseTensor

Объяснение: Эта функция предназначена для представления разреженного тензора.

Tensorflow использует три плотных тензора:indices,values,dense_shape, чтобы представить разреженный тензор. В интерфейсе Python эти три тензора объединены в одинSparseTensorclass, если вы поменяете местами три плотных тензора, то, прежде чем продолжить,SparseTensorКласс автоматически меняет местами три тензора.

В частности, разреженный тензор представляется какSparseTensor(values, indices, dense_shape):

  • indices: двумерный тензор, тип данныхint64, размерность данных[N, ndims].
  • values: одномерный тензор, тип данных произвольный, а размерность данных[N].
  • dense_shape: одномерный тензор, тип данных которогоint64, размерность данных[ndims].

в,NУказывает на наличие разреженного тензора вNценность,ndimsвыражатьSparseTensorизмерение.

Соответствующий плотный тензор удовлетворяет:

dense.shape = dense_shape
dense[tuple(indices[i])] = values[i]

Как обычно,indicesИндексы в должны быть отсортированы в порядке возрастания.SparseTensorПорядок трех плотных тензоров не соблюдается, вы можете перетасовать порядок,SparseTensorОн будет отсортирован автоматически.

Например:

SparseTensor(values=[1, 2], indices=[[0, 0], [1, 2]], shape=[3, 4])

Тогда плотный тензор:

[[1, 0, 0, 0]
 [0, 0, 2, 0]
 [0, 0, 0, 0]]

tf.SparseTensor.__init__(indices, values, shape)

Объяснение: Целью этой функции является созданиеSparseTensor.

Входные параметры:

  • indices: двумерный тензор, тип данныхint64, размерность данных[N, ndims].
  • values: одномерный тензор, тип данных произвольный, а размерность данных[N].
  • dense_shape: одномерный тензор, тип данных которогоint64, размерность данных[ndims].

Выходные параметры:
* разреженный тензорSparseTensor.

tf.SparseTensor.indices

Объяснение: Функция этой функции состоит в извлечении индекса ненулевого значения в плотной матрице.

Пример использования:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import tensorflow as tf 
import numpy as np

a = tf.SparseTensor(indices=[[4, 1], [1, 2]], values=[1, 2], shape=[3, 4])
b = a.indices
sess = tf.Session()
print sess.run(a)
print sess.run(b)
sess.close()

Выходные параметры:
* Двумерный тензор, тип данныхint64, размерность данных[N, ndims]. в,Nпредставляет количество ненулевых значений в разреженном тензоре,ndimsПредставляет ранг разреженного тензора.

tf.SparseTensor.values

Объяснение: Функция этой функции состоит в том, чтобы вынуть ненулевые значения из плотной матрицы.

Пример использования:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import tensorflow as tf 
import numpy as np

a = tf.SparseTensor(indices=[[4, 1], [1, 2]], values=[1, 2], shape=[3, 4])
b = a.values
sess = tf.Session()
print sess.run(a)
print sess.run(b)
sess.close()

Выходные параметры:
* Одномерный тензор, тип данных произвольный.

tf.SparseTensor.dtype

Объяснение: Цель этой функции — вернуть тип элементов тензора.

Пример использования:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import tensorflow as tf 
import numpy as np

a = tf.SparseTensor(indices=[[4, 1], [1, 2]], values=tf.constant([1, 2]), shape=[3, 4])
b = a.dtype
sess = tf.Session()
print b
sess.close()

Выходные параметры:

  • Возвращает тип элементов тензора.

tf.SparseTensor.shape

Объяснение: Цель этой функции — вернуть размерность разреженного тензора.

Пример использования:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import tensorflow as tf 
import numpy as np

a = tf.SparseTensor(indices=[[4, 1], [1, 2]], values=tf.constant([1, 2]), shape=[3, 4])
b = a.shape
sess = tf.Session()
print sess.run(b)
sess.close()

Выходные параметры:

  • Возвращает размерность разреженного тензора.

tf.SparseTensor.graph

Объяснение: Цель этой функции — вернуть граф, содержащий этот разреженный тензор.

Пример использования:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import tensorflow as tf 
import numpy as np

a = tf.SparseTensor(indices=[[4, 1], [1, 2]], values=tf.constant([1, 2]), shape=[3, 4])
b = a.graph
sess = tf.Session()
print b
sess.close()

Выходные параметры:

  • Верните граф, содержащий этот разреженный тензор.

class tf.SparseTensorValue

Объяснение: Эта функция предназначена для просмотра значения заданного разреженного тензора.

Пример использования:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import tensorflow as tf 
import numpy as np

a = tf.SparseTensorValue(indices=[[4, 1], [1, 2]], values=tf.constant([1, 2]), shape=[3, 4])
sess = tf.Session()
print a
print a[0]
print a[1]
print a[2]
sess.close()

tf.SparseTensorValue.indices

Объяснение: Цель этой функции — вернуть существующую позицию значения в разреженном тензоре.

Пример использования:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import tensorflow as tf 
import numpy as np

a = tf.SparseTensorValue(indices=[[4, 1], [1, 2]], values=tf.constant([1, 2]), shape=[3, 4])
sess = tf.Session()
print a.indices
sess.close()

Выходные параметры:

  • Возвращает, где значения существуют в разреженном тензоре.

tf.SparseTensorValue.shape

Объяснение: Цель этой функции — вернуть размерность разреженного тензора.

Пример использования:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import tensorflow as tf 
import numpy as np

a = tf.SparseTensorValue(values=tf.constant([1, 2]), indices=[[4, 1], [1, 2]], shape=[3, 4])
sess = tf.Session()
print a.shape
sess.close()

Выходные параметры:

  • Возвращает размерность разреженного тензора.

tf.SparseTensorValue.shape

Объяснение: Цель этой функции — вернуть элементы разреженного тензора.

Пример использования:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import tensorflow as tf 
import numpy as np

a = tf.SparseTensorValue(values=tf.constant([1, 2]), indices=[[4, 1], [1, 2]], shape=[3, 4])
sess = tf.Session()
print sess.run(a.values)  # 这是一个张量,所以用sess.run()
sess.close()

Выходные параметры:

  • Возвращает элементы разреженного тензора.
Преобразование разреженных тензоров в плотные тензоры

TensorFlow обеспечивает операции преобразования между разреженными и плотными тензорами.

tf.sparse_to_dense(sparse_indices, output_shape, sparse_values, default_value, name=None)

Объяснение: Роль этой функции заключается в преобразовании разреженного представления в плотный тензор. В частности, разреженный тензорsparseПреобразовать в плотный тензорdenseследующее:

# If sparse_indices is scalar
dense[i] = (i == sparse_indices ? sparse_values : default_value)

# If sparse_indices is a vector, then for each i
dense[sparse_indices[i]] = sparse_values[i]

# If sparse_indices is an n by d matrix, then for each i in [0, n)
dense[sparse_indices[i][0], ..., sparse_indices[i][d-1]] = sparse_values[i]

по умолчанию,denseзначение заполнения вdefault_valueоба0, если значение не задано как скаляр.

Пример использования:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import tensorflow as tf 
import numpy as np

a = tf.sparse_to_dense(sparse_indices = [[1,2],[2,1]], output_shape = [3,3], 
    sparse_values = [2,3], default_value = 1)
sess = tf.Session()
print sess.run(a) 
sess.close()

Входные параметры:

  • sparse_indices: ОдинTensor, тип данных должен бытьint32илиint64. Размерность данных 0-мерная, одномерная или двумерная, или более высокая широтаsparse_indices[i].
  • output_shape: ОдинTensor, тип данных должен быть таким же, какsparse_indicesтакой же. Размерность данных одномерна и представляет размерность выходного плотного тензора.
  • sparse_values: ОдинTensor, размерность данных одномерная, каждый элемент которой соответствуетsparse_indicesЗначение координат посередине.
  • default_value: ОдинTensor, тип данных должен быть таким же, какsparse_valuesОпять же, измерение данных является скаляром. Устанавливает разреженный индекс в неопределенное значение.
  • name: (необязательно) дать имя этой операции.

Выходные параметры:

  • ОдинTensor, тип данных иsparse_valuesтакой же. Размерность данных плотного тензора равнаoutput_shape.

tf.sparse_tensor_to_dense(sp_input, default_value, name=None)

Объяснение: Функция этой функции состоит в преобразовании разреженного тензораSparseTensorПреобразуйте в плотный тензор.

Эта операция является удобным способом преобразования разреженных тензоров в плотные тензоры.

Например,sp_inputРазмерность данных[3, 5], ненулевое значение:

[0, 1]: a
[0, 3]: b
[2, 0]: c

default_valueзначениеx, то размерность выходного плотного тензора равна[3, 5], конкретная форма отображения выглядит следующим образом:

[[x a x b x]
 [x x x x x]
 [c x x x x]]

Пример использования:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import tensorflow as tf 
import numpy as np

a = tf.SparseTensor(indices = [[0, 1], [0, 3], [2, 0]], values=[1,2,3], shape=[3, 5])
b = tf.sparse_tensor_to_dense(a, default_value = 11)
sess = tf.Session()
print sess.run(b)
sess.close()

Входные параметры:

  • sp_input: ОдинSparseTensor.
  • default_value: измерение данных является скаляром, устанавливающим разреженный индекс в неопределенное значение.
  • name: (необязательно) устанавливает префикс для возвращаемых имен тензоров.

Выходные параметры:

  • Плотный тензор с размерностью данныхsp_input.shape, значение в плотном тензоре равноsp_inputзначение, указанное в , значение без индекса равноdefault_valueценность.

аномальный:

  • 类型错误: еслиsp_inputНе одинSparseTensor, будет сообщено об ошибке.

tf.sparse_to_indicator(sp_input, vocab_size, name=None)

Объяснение: Функция этой функции состоит в преобразовании разреженного тензораSparseTensorКоординаты преобразуются в булевы координаты в плотном тензоре.

sp_inputПоследнее измерение в отбрасывается, аsp_inputвместо значения этого бита, еслиsp_input.shape = [D0, D1, D2, ..., Dn, K]Kэто последнее измерение, тоoutput.shape = [D0, D1, D2, ..., Dn, vocab_size],в:

output[d_0, d_1, ..., d_n, sp_input[d_0, d_1, ..., d_n, k]] = True

outputОстальные значения равныFalse.

Например,sp_input.shape = [2, 3, 4], ненулевые значения следующие:

[0, 0, 0]: 0
[0, 1, 0]: 10
[1, 0, 3]: 103
[1, 1, 2]: 112
[1, 1, 3]: 113
[1, 2, 1]: 121

иvocab_size = 200, затем выводoutput.shape = [2, 3, 200]outputЗначения вFalse, за исключением следующих мест:

(0, 0, 0), (0, 1, 10), (1, 0, 103), (1, 1, 112), (1, 1, 113), (1, 2, 121).

Пример использования:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import tensorflow as tf 
import numpy as np

a = tf.SparseTensor(indices = [[0, 1], [0, 3], [2, 0]], values=[1,2,3], shape=[3, 5])
b = tf.sparse_to_indicator(a, 10)
sess = tf.Session()
print sess.run(b)
sess.close()

Входные параметры:

  • sp_input: ОдинSparseTensor, тип данныхint32илиint64.
  • vocab_size: sp_Inputновое измерение последнего измерения, и0 <= sp_input.shape > vocab_size.
  • name: (необязательно) устанавливает префикс для возвращаемых имен тензоров.

Выходные параметры:

  • Модифицированный плотный булев тензор.

аномальный:

  • 类型错误: еслиsp_inputНе одинSparseTensor, будет сообщено об ошибке.
Операции над разреженными тензорами

TensorFlow предоставляет некоторые операции с разреженными тензорами.

tf.sparse_concat(concat_dim, sp_inputs, name=None)

Объяснение: Функция этой функции заключается в преобразовании рядаSparseTensor, объединить по указанному измерению.

Конкретная идея слияния состоит в том, чтобы сначала рассматривать разреженный тензор как плотный тензор, затем объединять тензоры в соответствии с указанной размерностью и, наконец, рассматривать объединенный плотный тензор как разреженный тензор.

Во входных данных,SparseTensorРазмеры данных должны быть одинаковыми, иindices,valuesиshapesдолжны быть одинаковой длины.

Размерности выходных данных будут определяться размерностями входных данных, за исключением тех, которые необходимо объединить, которые представляют собой сумму всех данных в этом измерении.

Элементы выходного тензора будут восстановлены до разреженного тензора, отсортированного в исходном порядке.

Временная сложность этой операцииO(M log M),в,Mявляется суммой всех ненулевых элементов во входных данных.

Например, когдаconcat_dim = 1Время:

sp_inputs[0]: shape = [2, 3]
[0, 2]: "a"
[1, 0]: "b"
[1, 1]: "c"

sp_inputs[1]: shape = [2, 4]
[0, 1]: "d"
[0, 2]: "e"

Тогда выходные данные:

shape = [2, 7]
[0, 2]: "a"
[0, 4]: "d"
[0, 5]: "e"
[1, 0]: "b"
[1, 1]: "c"

Графически представлено следующим образом:

[    a] concat [  d e  ] = [    a   d e  ]
[b c  ]           [         ]     [b c          ]

Пример использования:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import tensorflow as tf 
import numpy as np

a = tf.SparseTensor(indices = [[0, 1], [0, 3], [2, 0]], values=[1,2,3], shape=[3, 5])
aa = tf.SparseTensor(indices = [[1, 1], [1, 3], [2, 1]], values=[11,12,13], shape=[3, 5])
b = tf.sparse_concat(0, [a, aa])
sess = tf.Session()
print sess.run(b)
print sess.run(tf.sparse_tensor_to_dense(b))
sess.close()

Входные параметры:

  • concat_dim: измерение, которое нужно объединить.
  • sp_inputs: тот, который нужно объединитьSparseTensorсписок.
  • name: (необязательно) устанавливает префикс для возвращаемых имен тензоров.

Выходные параметры:

  • объединенныйSparseTensor.

аномальный:

  • 类型错误: еслиsp_inputsНе одинSparseTensorсписок.

tf.sparse_reorder(sp_input, name=None)

Объяснение: Целью этой функции являетсяSparseTensorЭлементы в переставлены, отсортированы по индексу от меньшего к большему.

перестановка не влияетSparseTensorизмерение.

Например, еслиsp_inputРазмерность[4, 5],indices / valuesследующее:

[0, 3]: b
[0, 1]: a
[3, 1]: d
[2, 0]: c

затем выводSparseTensorразмер все еще[4, 5],indices / valuesследующее:

[0, 1]: a
[0, 3]: b
[2, 0]: c
[3, 1]: d

Пример использования:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import tensorflow as tf 
import numpy as np

a = tf.SparseTensor(indices = [[2, 1], [0, 3], [2, 0]], values=[1,2,3], shape=[3, 5])
b = tf.sparse_reorder(a)
sess = tf.Session()
print sess.run(b)
sess.close()

Входные параметры:

  • sp_input: ОдинSparseTensor.
  • name: (необязательно) устанавливает префикс для возвращаемых имен тензоров.

Выходные параметры:

  • ОдинSparseTensor, размерность данных и тип данных неизменны, только значения в нем упорядоченно отсортированы.

аномальный:

  • 类型错误: еслиsp_inputНе одинSparseTensor.

tf.sparse_retain(sp_input, to_retain, name=None)

Объяснение: роль этой функции заключается в сохраненииSparseTensorНепустой элемент, указанный в .

Например, еслиsp_inputРазмерность данных[4, 5], и имеет 4 ненулевых значения следующим образом:

[0, 1]: a
[0, 3]: b
[2, 0]: c
[3, 1]: d

иto_retain = [True, False, False, True], то окончательные выходные данныеSparseTensorРазмерность данных[4, 5], и сохраните два ненулевых значения следующим образом:

[0, 1]: a
[3, 1]: d

Пример использования:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import tensorflow as tf 
import numpy as np

a = tf.SparseTensor(indices = [[2, 1], [0, 3], [2, 0]], values=[1,2,3], shape=[3, 5])
b = tf.sparse_retain(a, [False, False, True])
sess = tf.Session()
print sess.run(b)
sess.close()

Входные параметры:

  • sp_input: ОдинSparseTensor,ВключаютNнепустые элементы.
  • to_retain: логический вектор длиныN, и который содержитMКусокTrueценность.

Выходные параметры:

  • ОдинSparseTensor, измерение данных совпадает с входными данными, которые содержатMненулевые значения, позиция которых основана наTrueположение решать.

аномальный:

  • 类型错误: еслиsp_inputНе одинSparseTensor.

tf.sparse_fill_empty_rows(sp_input, default_value, name=None)

Объяснение: Функция этой функции заключается в преобразовании двумерногоSparseTensor, заполняет пустые строки значением указанного элемента.

Если в строке нет элемента, то координаты новой строки будут[row, 0]заполнятьdefault_value.

Например, мы предполагаемsp_inputРазмерность данных[5, 6], а ненулевые значения следующие:

[0, 1]: a
[0, 3]: b
[2, 0]: c
[3, 1]: d

Поскольку в разреженном тензоре в первой и четвертой строке нет значений, то нам нужно[1, 0]и[4, 0]Заполните координатыdefault_value,следующее:

[0, 1]: a
[0, 3]: b
[1, 0]: default_value
[2, 0]: c
[3, 1]: d
[4, 0]: default_value

Обратите внимание, что ввод может быть указан последним, но это не влияет на эту операцию.

выводSparseTensorЭто будет отсортированный порядок от меньшего к большему, а выходные данные и входные данные имеют одинаковые размерности данных.

Эта операция также возвращает логический вектор с логическими значениями, еслиTrueзначение, то строка добавляетdefault_value,Рассчитывается следующим образом:

empty_row_indicator[i] = True iff row i was an empty row.

Пример использования:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import tensorflow as tf 
import numpy as np

a = tf.SparseTensor(indices = [[2, 1], [0, 3], [2, 0]], values=[1,2,3], shape=[6, 5])
b, bb = tf.sparse_fill_empty_rows(a, 10)
sess = tf.Session()
print sess.run(b)
print '----'
print sess.run(bb)
sess.close()

Входные параметры:

  • sp_input: ОдинSparseTensor, размерность данных[N, M].
  • default_value: значение, тип данных иsp_inputтакой же.
  • name: (необязательно) устанавливает префикс для возвращаемых имен тензоров.

Выходные параметры:

  • sp_ordered_output: ОдинSparseTensor, размерность данных[N, M], все пустые строки заполненыdefault_value.
  • empty_row_indicator: логический вектор с длиной данныхN, если строка заполненаdefault_value, то логическое значение местоположения равноTrue.

аномальный:

  • 类型错误: еслиsp_inputНе одинSparseTensor.


CoderPai — это платформа, ориентированная на алгоритмический бой, с дизайном от базовых алгоритмов до алгоритмов искусственного интеллекта. Если вы заинтересованы в алгоритмическом бою, пожалуйста, следуйте за нами быстро. Присоединяйтесь к группе WeChat для реальных боевых действий AI, группе QQ для реальных боевых действий AI, группе WeChat по алгоритму ACM, группе QQ по алгоритму ACM. Для получения подробной информации, пожалуйста, обратите внимание на учетную запись WeChat «CoderPai» (coderpai).